DazeyMod

Allows changes to various BGG pages including Last Seen icons and Username Tagging

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        DazeyMod
// @namespace   www.lucky13games.com
// @description Allows changes to various BGG pages including Last Seen icons and Username Tagging
// @include     http://www.boardgamegeek.com/*
// @include     http://boardgamegeek.com/*
// @version     1.2
// @grant       GM_registerMenuCommand
// @grant       GM_xmlhttpRequest
// @grant       GM_getValue
// @grant       GM_setValue
// @grant       GM_listValues
// ==/UserScript==


// Changelog
// v1.2 - 5/28/2014
//  - Fixed icons not showing up in some GeekBuddy views again
// v1.1 - 5/21/2014
//  - Fixed a bug where the LastSeen data wasn't stored all the time
// v1.0 - 5/21/2014
//  - Converted from localStorage to GreaseMonkey storage
//  - Added Username Tag functionality
//  - Added tabbed settings
//  - Fixed icons not showing up in Geekbuddy views
//  - Fixed icons not showing up in Geekmail
//  - Bug fixes and code cleanup
// v0.9 - 5/3/2014
//  - Began adding functionality for other "modules" to interact with DazeyMod
// v0.8 - 4/25/2014
//  - Added larger size thumbnail option for list views, doesn't work on AJAX requests, need to fix this.
// v0.7 - 4/16/2014
//  - Added icon refreshing after saving the settings
//  - Added option to move QuickBar down
//  - Prettied up the settings window
//  - Redid popup text for settings and manual buttons to use simpler title attribute
//  - Code Cleanup
// v0.6 - 4/15/2014
//  - Added "loading" icons and text so page wouldn't change size when loading
//  - Added Setting to enable/disable context menu
//  - Fixed Manual load duplication bug


//--- Check if GreaseMonkey variables exist, create them with defaults if not ---//
if(typeof GM_getValue("DM_LS_Settings")==='undefined'){
  console.log("DM_LS_Settings not set");
  var tmpObj = new Object;
  tmpObj["showLoginText"]="always";
  tmpObj["showLoginTextGeeklists"]=true;
  tmpObj["showLoginTextTrades"]=true;
  tmpObj["showLoginTextForums"]=true;
  tmpObj["showLoginIcon"]="always";
  tmpObj["showLoginIconGeeklists"]=true;
  tmpObj["showLoginIconTrades"]=true;
  tmpObj["showLoginIconForums"]=true;
  tmpObj["showLoginIconHover"]=true;
  tmpObj["iconPack"]="D10";
  tmpDays=new Array(0, 1.5, 7, 30, 180, 365);
  tmpObj["iconDays"]=JSON.stringify(tmpDays);
  tmpObj["showContextMenu"]=false;
  GM_setValue("DM_LS_Settings", JSON.stringify(tmpObj));
}
var DM_LS_Settings = JSON.parse(GM_getValue("DM_LS_Settings"));

if(typeof GM_getValue("DM_LS_Users")==='undefined'){
  console.log("DM_LS_Users not set");
  var tmpObj = new Object;
  tmpObj["dazeysan.lastChecked"]="0";
  GM_setValue("DM_LS_Users", JSON.stringify(tmpObj));
}
var DM_LS_Users = JSON.parse(GM_getValue("DM_LS_Users"));

if(typeof GM_getValue("DM_LT_Settings")==='undefined'){
  console.log("DM_LT_Settings not set");
  var tmpObj = new Object;
  tmpObj["largeThumbnail"]=false;
  tmpObj["largeThumbnailSize"]="90";
  GM_setValue("DM_LT_Settings", JSON.stringify(tmpObj));
}
var DM_LT_Settings = JSON.parse(GM_getValue("DM_LT_Settings"));

if(typeof GM_getValue("DM_QB_Settings")==='undefined'){
  console.log("DM_QB_Settings not set");
  var tmpObj = new Object;
  tmpObj["moveQuickBar"]=false;
  GM_setValue("DM_QB_Settings", JSON.stringify(tmpObj));
}
var DM_QB_Settings = JSON.parse(GM_getValue("DM_QB_Settings"));

if(typeof GM_getValue("DM_UT_Settings")==='undefined'){
  console.log("DM_UT_Settings not set");
  var tmpObj = new Object;
  tmpObj["showUsernameTag"]=false;
  tmpObj["defaultIcon"]="8";
  GM_setValue("DM_UT_Settings", JSON.stringify(tmpObj));
}
var DM_UT_Settings = JSON.parse(GM_getValue("DM_UT_Settings"));

if(typeof GM_getValue("DM_UT_Users")==='undefined'){
  console.log("DM_UT_Users not set");
  var tmpObj = new Object;
  tmpObj["dazeysan"]="Maker of DazeyMod";
  tmpObj["dazeysan.icon"]="3";
  GM_setValue("DM_UT_Users", JSON.stringify(tmpObj));
}
var DM_UT_Users = JSON.parse(GM_getValue("DM_UT_Users"));
//--- End GreaseMonkey Storage Set Up ---//

//--- Set up some other variables ---//
var usernameTagIcons=new Array("2014491.png","2014492.png","2014493.png","2014494.png","2014495.png","2014496.png","2014497.png","2014498.png","2014499.png","2014500.png","2014501.png","2014502.png");
var tmp=DM_LS_Settings["iconDays"];
var loginDays=JSON.parse(tmp);
var tList;
// QuickBar Moving stuff
document.getElementById('quickbar_status').parentNode.parentNode.id="QBParent";
quickBar = document.getElementById('quickbar_status').parentNode;
// Set up an array of other module's save functions
window.saveFunctions = [ ];
// Arrays of file names for the LastSeen Icons
var loginIconD10=new Array("1990299.png","1990300.png","1990303.png","1990301.png","1990302.png","1990298.png","1992653.png");
var loginIconHex=new Array("1990348.png","1990349.png","1990350.png","1990352.png","1990353.png","1990354.png","1992652.png");
var loginIconHour=new Array("1992646.jpg","1992647.jpg","1992648.jpg","1992649.jpg","1992650.jpg","1992651.jpg","1992654.png");
if(DM_LS_Settings["iconPack"]=="D10") {
  loginIcons = loginIconD10;
}
if(DM_LS_Settings["iconPack"]=="Hex") {
  loginIcons = loginIconHex;
}
if(DM_LS_Settings["iconPack"]=="Hour") {
  loginIcons = loginIconHour;
}
var showText = false;
var showIcon = false;
var uList = document.getElementsByClassName("avatarblock js-avatar");
var avatarAdded=0;
var now = new Date();
var days;
if(DM_LS_Settings["showLoginText"]=="always") {
  //console.log("Always Text");
  showText = true;
}
if(DM_LS_Settings["showLoginIcon"]=="always") {
  //console.log("Always Icon");
  showIcon = true;
}

// Check what sort of page we're on and show text or icons as needed
if(document.baseURI.indexOf("/geeklist/") > -1) { // Geeklist
  console.log("Page is in Geeklists");
  if(DM_LS_Settings["showLoginTextGeeklists"]==true && DM_LS_Settings["showLoginText"]=="selected") {
    showText = true;
  }
  if(DM_LS_Settings["showLoginIconGeeklists"]==true && DM_LS_Settings["showLoginIcon"]=="selected") {
    showIcon = true;
  }
}
if(document.baseURI.substr(-10) == "fortrade=1") { // Trades Collection page
  console.log("Page is in Trades");
  if(DM_LS_Settings["showLoginTextTrades"]==true && DM_LS_Settings["showLoginText"]=="selected") {
    showText = true;
  }
  if(DM_LS_Settings["showLoginIconTrades"]==true && DM_LS_Settings["showLoginIcon"]=="selected") {
    showIcon = true;
  }
}
if(document.baseURI.indexOf("/article/") > -1) { // Forums
  console.log("Page is in Forums");
  if(DM_LS_Settings["showLoginTextForums"]==true && DM_LS_Settings["showLoginText"]=="selected") {
    showText = true;
  }
  if(DM_LS_Settings["showLoginIconForums"]==true && DM_LS_Settings["showLoginIcon"]=="selected") {
    showIcon = true;
  }
}
//--- End Other Variable Set Up ---//

//--- Move QuickBar if needed ---//
if(DM_QB_Settings["moveQuickBar"]==true){
  //console.log("moving QuickBar");
  document.getElementById('main_content').insertBefore(quickBar, document.getElementById('main_content').childNodes[0]);
}
//--- End of moving Quickbar ---//

//--- Make a "bluebox" at the top of the content for our use ---//
tmpDiv = document.createElement('div');
tmpDiv.id = "DazeyModSettings";
tmpDiv.setAttribute("class", "bluebox");
tmpDiv.appendChild(document.createTextNode("DazeyMod\u00A0\u00A0\u00A0"));
// Add a settings button
tmpElm=document.createElement('a');
tmpElm.addEventListener("click", showHideSettingsLoad, false);
tmpImg=document.createElement('img');
tmpImg.id="DazeyMod.SettingsIcon";
tmpImg.src="http://cf.geekdo-images.com/images/pic1991213.png";
tmpImg.style.cursor="pointer";
tmpImg.title="DazeyMod Settings";
tmpElm.appendChild(tmpImg);
tmpDiv.appendChild(tmpElm);
tmpDiv.appendChild(document.createTextNode("\u00A0\u00A0\u00A0"));
// Add a manual button
tmpElm=document.createElement('a');
tmpElm.addEventListener("click", function(){showLoginDates("manual");}, false);
tmpImg=document.createElement('img');
tmpImg.src="http://cf.geekdo-images.com/images/pic"+loginIcons[0];
tmpImg.style.cursor="pointer";
tmpImg.id="DazeyMod.ManualIcon";
tmpImg.title="Manually Load Last Login Data";
tmpElm.appendChild(tmpImg);
tmpDiv.appendChild(tmpElm);
// Stick our bluebox at the top of main_content
document.getElementById('main_content').insertBefore(tmpDiv, document.getElementById('main_content').childNodes[0]);
//--- End of the DazeyMod "bluebox" ---//

// Insert the place holder images above the avatar
function modAvatars() {
  console.log("modAvatars()");
  uList = document.getElementsByClassName("avatarblock js-avatar");
  for(av=0; av<uList.length; av++) {
    if(uList[av].getAttribute("data-dazeymod") != "modded") {
	  // Need to check if we're on the geekbuddy action=view page as the avatars are laid out differently there, but make sure we're not on action=viewusers as that is the normal layout
      if(document.baseURI.indexOf("/geekbuddy.php3?action=view") > -1 && document.baseURI.indexOf("action=viewusers") == -1) {
        iconRow = uList[av].childNodes[5].childNodes[1].childNodes[1].childNodes[0];
      } else {
        iconRow = uList[av].childNodes[7].childNodes[1].childNodes[1].childNodes[0];
      }
      dCell = iconRow.insertCell(-1);
      dCell.setAttribute("data-DazeyMod", "temp");
      tmpImg=document.createElement('img');
      tmpImg.id = "DazeyMod.LSIcon."+av;
      tmpImg.src = "http://cf.geekdo-images.com/images/pic2015885.png";
      dCell.appendChild(tmpImg);
      dCell = iconRow.insertCell(-1);
      tmpImg=document.createElement('img');
      tmpImg.id = "DazeyMod.UTIcon."+av;
      tmpImg.src = "http://cf.geekdo-images.com/images/pic2015885.png";
      dCell.appendChild(tmpImg);
	  uList[av].setAttribute("data-dazeymod", "modded");
	} else {
	  if(document.baseURI.indexOf("/geekbuddy.php") > -1) {
        iconRow = uList[av].childNodes[5].childNodes[1].childNodes[1].childNodes[0];
      } else {
        iconRow = uList[av].childNodes[7].childNodes[1].childNodes[1].childNodes[0];
      }
      iconRow.childNodes[7].childNodes[0].id = "DazeyMod.LSIcon."+av;
	  iconRow.childNodes[8].childNodes[0].id = "DazeyMod.UTIcon."+av;
	}
  }
  if(showText || showIcon) { 
    showLoginDates("automatic");
  }
  if(DM_UT_Settings["showUsernameTag"]==true) {
    refreshUsernameTags();
  }
} // End modAvatars()
modAvatars();

// Geekmail support, add an onClick to each message so we can refresh the icons
gmList = document.getElementsByClassName('gm_label');
for (gm=0; gm<gmList.length; gm++) {
  //console.log(gmList[gm].nextSibling.nextSibling.id);
  gmList[gm].nextSibling.nextSibling.addEventListener("click", function(){ window.setTimeout(modAvatars, 1000); }, false);
}

function loadLargeThumbnails() {
  //console.log("Large Thumbs");
  tList = document.getElementsByClassName('collection_thumbnail');
  //console.log("Thumbs: "+tList.length);
  if(tList.length > 0) {
    for(i=1; i<tList.length; i++){
	  tList[i].childNodes[1].childNodes[0].src = tList[i].childNodes[1].childNodes[0].src.replace("_mt.", "_t.");
	}
	updateThumbnailSize();
  }
} // End loadLargeThumbnails()
if(DM_LT_Settings["largeThumbnail"]==true) {
  loadLargeThumbnails();
}

function updateThumbnailSize() {
  for(i=1; i<tList.length; i++){
    var tmpWd = tList[i].childNodes[1].childNodes[0].width;
    var tmpHt = tList[i].childNodes[1].childNodes[0].height;
      if(tmpWd > tmpHt) {
	  tmpRat = tmpHt/tmpWd;
      tList[i].childNodes[1].childNodes[0].style.width=DM_LS_Settings["largeThumbnailSize"]+"px";
      tList[i].childNodes[1].childNodes[0].style.height=(DM_LS_Settings["largeThumbnailSize"]*tmpRat)+"px";
    } else {
	  tmpRat = tmpWd/tmpHt;
      tList[i].childNodes[1].childNodes[0].style.width=(DM_LS_Settings["largeThumbnailSize"]*tmpRat)+"px";
	  tList[i].childNodes[1].childNodes[0].style.height=DM_LS_Settings["largeThumbnailSize"]+"px";
	}
  }
} // End updateThumbnailSize()

function showLoginDates(src) {
  uList = document.getElementsByClassName("avatarblock js-avatar");
  if (src == "manual") {
    if(DM_LS_Settings["showLoginText"]=="manual" || DM_LS_Settings["showLoginText"]=="always") {
      showText = true;
    }
    if(DM_LS_Settings["showLoginIcon"]=="manual" || DM_LS_Settings["showLoginIcon"]=="always") {
      showIcon = true;
    }
  }
  avatarAdded=0;
	if(uList.length > 0) {
	  if(showText || showIcon) {
	    ShowDateTemp();
		window.setTimeout(getLast, 1000);
	  } else {
	    getLast();
	  }
	}
} // End showLoginDates()


function getLast() {
  // Loop through the detected avatars and display text or icons as chosen in settings
  //console.log("getLast()" + avatarAdded);
  uList = document.getElementsByClassName("avatarblock js-avatar");
  var uName=uList[avatarAdded].getAttribute("data-username");
  
  if(typeof DM_LS_Users[""+uName+".lastLogin"]==='undefined' || (now.getTime() - DM_LS_Users[""+uName+".lastChecked"]) > (3600000*6)){
    console.log("Request "+uName+" via XMLAPI2");

    var oReq = new XMLHttpRequest();
    oReq.onload = function(){
      var lastLogin=oReq.responseXML.getElementsByTagName("lastlogin")[0].getAttribute("value");
      if(lastLogin==""){
	    lastLogin="2000-01-01";
	  }
	  DM_LS_Users[""+uName+".lastLogin"]=lastLogin;
	  DM_LS_Users[""+uName+".lastChecked"]=now.getTime();
	  GM_setValue("DM_LS_Users", JSON.stringify(DM_LS_Users));
	  var then = new Date(lastLogin);
      days = (((now.getTime()-(now.getTimezoneOffset()*60000))-then.getTime())/(86400000));  //Get number of days between now and then
	  console.log("Days since "+uName+"'s last login: "+days);
	  if (showText) {
	    showDateText(avatarAdded, lastLogin);
      }
	  if (showIcon) {
        showDateIcon(avatarAdded, lastLogin, days);
	  }
      avatarAdded++;
	  if(avatarAdded<uList.length){
	    window.setTimeout(getLast, 250);
	  }
    }
    oReq.open("get", "/xmlapi2/user?name="+uName, true);
    oReq.send();
  
  } else {
    console.log("Retrieve "+uName+" via Local GreaseMonkey Storage");
    lastLogin = DM_LS_Users[""+uName+".lastLogin"];
	var then = new Date(lastLogin);
    days = (((now.getTime()-(now.getTimezoneOffset()*60000))-then.getTime())/(86400000));  //Get number of days between now and then
	console.log("Days since "+uName+"'s last login: "+days);
	if (showText) {
	  showDateText(avatarAdded, lastLogin);
    }
	if (showIcon) {
      showDateIcon(avatarAdded, lastLogin, days);
	}
    avatarAdded++;
	if(avatarAdded<uList.length){
	  window.setTimeout(getLast, 10);
	}
  }
} // End getLast()

function showDateText(av, ll) {
  //console.log("Function showDateText "+av+ "|"+ll);
  if(document.getElementById('DazeyMod.LSText.'+av).getAttribute("data-DazeyMod")!="done") {
    // Display the user's last login date under their name
	if(ll == "2000-01-01") {
	  ll = "Unknown";
	}
    uList[av].childNodes[1].setAttribute("data-DazeyMod", "done");
	document.getElementById('DazeyMod.LSText.'+av).childNodes[0].data=ll;
  }
} // End showDateText()

function showDateIcon(av, ll, dy) {
  // Display an icon representing the user's last login date to the right of their menu bar
  if(document.getElementById('DazeyMod.LSIcon.'+av).getAttribute("data-DazeyMod")!="done") {
    loginImg = loginIcons[0];
	var li = 0;
    if (dy >= loginDays[1]) {
      li = 1;
    }
    if (dy >= loginDays[2]) {
      li = 2;
    }
    if (dy >= loginDays[3]) {
      li = 3;
    }
    if (dy >= loginDays[4]) {
      li = 4;
    }
    if (dy >= loginDays[5]) {
      li = 5;
    }
	loginImg = loginIcons[li];
	avDiv=document.getElementById('DazeyMod.LSIcon.'+av);
	avDiv.src="http://cf.geekdo-images.com/images/pic"+loginImg;
	avDiv.title=ll;
	avDiv.setAttribute("data-DazeyMod", "done");
	avDiv.setAttribute("data-iconLevel", li);
  }
} // End showDateIcon()

function ShowDateTemp() {
  // Insert the grey icons and "Loading..." text before loading the actual content
  //console.log("Inserting Temp Dates");
  uList = document.getElementsByClassName("avatarblock js-avatar");
  for (av=0; av<uList.length; av++) {
    if(showText && uList[av].childNodes[1].getAttribute("data-DazeyMod") != "done") {
	  //console.log("Inserting Temp Text");
	  uList[av].childNodes[1].appendChild( document.createElement('br') );
      tmpSpn=document.createElement('span');
	  tmpSpn.id = "DazeyMod.LSText."+av;
	  tmpSpn.appendChild( document.createTextNode("Loading...") );
      uList[av].childNodes[1].setAttribute("data-DazeyMod", "temp");
	  uList[av].childNodes[1].appendChild(tmpSpn);
	}
	if(showIcon) { 
	  tmpIco = document.getElementById('DazeyMod.LSIcon.'+av);
	  if (tmpIco.getAttribute("data-dazeymod") != "done") {
	    tmpIco.src = "http://cf.geekdo-images.com/images/pic"+loginIcons[6];
	    tmpIco.title = "Loading...";
      }
    }
  }
} //End ShowDateTemp

function createContextMenu() {
  // Create a context menu to manually load the dates.
  myMenu=document.createElement('menu');
  myMenu.id = "DazeyModMenu";
  myMenu.setAttribute("type", "context");
  myMenuItem=document.createElement('menuitem');
  myMenuItem.id = "menubtn";
  myMenuItem.setAttribute("label", "Show Login Dates");
  myMenuItem.addEventListener("click", function(){showLoginDates("manual");}, false);
  myMenu.appendChild(myMenuItem);
  document.getElementById('container').appendChild(myMenu);
  document.getElementById('container').setAttribute("contextMenu", "DazeyModMenu");
}
if(DM_LS_Settings["showContextMenu"]==true) {
  createContextMenu();
}

function refreshIcons() {
  // Refresh the LastSeen icons after enabling them
  console.log("Refreshing the icons");
  for (i=0; i<uList.length; i++) {
    document.getElementById('DazeyMod.LSIcon.'+i).src="http://cf.geekdo-images.com/images/pic"+loginIcons[document.getElementById('DazeyMod.LSIcon.'+i).getAttribute('data-iconLevel')];
  }
  document.getElementById('DazeyMod.ManualIcon').src="http://cf.geekdo-images.com/images/pic"+loginIcons[0];
  for (i=0; i<6; i++) {
    document.getElementById('Dazeymod.DayRangeIcon.'+i).src="http://cf.geekdo-images.com/images/pic"+loginIcons[i];
  }
} //End refreshIcons()

// Make the Settings DIV
var tmpDiv=document.createElement('div');
tmpDiv.id = "settingsDiv";
tmpDiv.style.visibility="hidden";
tmpDiv.style.backgroundColor="#EAFFFF";
tmpDiv.style.border="2px solid black";
tmpDiv.style.position="absolute";
tmpDiv.style.left="146px";
tmpDiv.style.top="157px";
var tmpElm=document.createElement('p');
tmpElm.appendChild( document.createTextNode("DazeyMod Settings") );
tmpElm.style.textAlign="center";
tmpElm.style.margin="0em";
tmpDiv.appendChild(tmpElm);
tmpDiv.appendChild( document.createElement('br') );

// Settings - Tabs
tmpTabs=document.createElement('div');
tmpTbl=document.createElement('table');
tmpTr=document.createElement('tr');
tmpTd=document.createElement('td');
tmpTd.addEventListener("click", function() { switchSettingsTab(0); }, false);
tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="3px 15px 10px 15px";
tmpHdr.style.fontWeight="bold";
tmpHdr.id="DazeyMod.LastSeen.Tab";
tmpHdr.style.borderTop="1px solid black";
tmpHdr.style.borderRight="1px solid black";
tmpHdr.style.backgroundColor="#EAEAFF";
tmpHdr.style.cursor="pointer";
tmpHdr.style.borderTopLeftRadius="15px";
tmpHdr.style.borderTopRightRadius="15px";
tmpHdr.className="DazeyMod.SettingsTab";
tmpHdr.appendChild( document.createTextNode("LastSeen Date Settings") );
tmpTd.appendChild(tmpHdr);
tmpTr.appendChild(tmpTd);
tmpTd=document.createElement('td');
tmpTd.addEventListener("click", function() { switchSettingsTab(1); }, false);
tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="3px 15px 10px 15px";
tmpHdr.style.fontWeight="bold";
tmpHdr.id="DazeyMod.UsernameTag.Tab";
tmpHdr.style.border="1px solid black";
//tmpHdr.style.borderLeft="1px solid black";
//tmpHdr.style.borderBottom="1px solid black";
tmpHdr.style.cursor="pointer";
tmpHdr.style.borderTopLeftRadius="15px";
tmpHdr.style.borderTopRightRadius="15px";
tmpHdr.className="DazeyMod.SettingsTab";
tmpHdr.appendChild( document.createTextNode("Username Tag Settings") );
tmpTd.appendChild(tmpHdr);
tmpTr.appendChild(tmpTd);
/*
tmpTd=document.createElement('td');
tmpTd.style.borderTop="1px solid black";
tmpTd.style.borderRight="1px solid black";
//tmpTd.style.backgroundColor="#EAEAFF";
tmpTd.className="DazeyMod.SettingsTab";
tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.paddingBottom="5px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Enhanced Play Logging Settings") );
tmpTd.appendChild(tmpHdr);
tmpTr.appendChild(tmpTd);
*/
tmpTbl.appendChild(tmpTr);
tmpTabs.appendChild(tmpTbl);
tmpDiv.appendChild(tmpTabs);

// Settings - Form
var tmpFrm=document.createElement('form');

// Settings - LastSeen Div
var tmpDivLS=document.createElement('div');
tmpDivLS.id="DazeyMod.LastSeen.SettingsDiv";
tmpDivLS.style.backgroundColor="#EAEAFF";

// Settings - Table
var tmpTbl=document.createElement('table');
var tmpTr=document.createElement('tr');

var tmpTd=document.createElement('td');
tmpTd.style.verticalAlign="top";
tmpTd.style.padding="0px 10px";
tmpTd.style.borderRight="1px dotted black";
// Settings - Text Date
var tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="10px 0px 5px 0px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Display Date") );
tmpTd.appendChild(tmpHdr);
// Settings - Text - Never
var tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioText");
tmpFld.id = "radioTextNever";
if(DM_LS_Settings["showLoginText"] == "never") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideTextSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Never") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Text - Manual
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioText");
tmpFld.id = "radioTextManual";
if(DM_LS_Settings["showLoginText"] == "manual") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideTextSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Manual") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Text - Always
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioText");
tmpFld.id = "radioTextAlways";
if(DM_LS_Settings["showLoginText"] == "always") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideTextSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Always") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Text - Selected
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioText");
tmpFld.id = "radioTextSelected";
if(DM_LS_Settings["showLoginText"] == "selected") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideTextSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Selected Sites:") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Text - Selected - Geeklist
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkTextGeeklists";
tmpFld.checked=(DM_LS_Settings["showLoginTextGeeklists"]==true);
tmpFld.style.marginLeft="15px";
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Geeklists") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Text - Selected - Trades
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkTextTrades";
tmpFld.checked=(DM_LS_Settings["showLoginTextTrades"]==true);
tmpFld.style.marginLeft="15px";
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Trade Lists") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Text - Forums
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkTextForums";
tmpFld.checked=(DM_LS_Settings["showLoginTextForums"]==true);
tmpFld.style.marginLeft="15px";
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Forums") );
tmpTr.appendChild(tmpTd);

tmpTd=document.createElement('td');
tmpTd.style.verticalAlign="top";
tmpTd.style.padding="0px 10px";
tmpTd.style.borderRight="1px dotted black";
tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="10px 0px 5px 0px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Display Icons") );
tmpTd.appendChild(tmpHdr);
// Settings - Icon - Never
var tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioIcon");
tmpFld.id = "radioIconNever";
if(DM_LS_Settings["showLoginIcon"] == "never") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideTextSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Never") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Icon - Manual
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioIcon");
tmpFld.id = "radioIconManual";
if(DM_LS_Settings["showLoginIcon"] == "manual") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideIconSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Manual") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Icon - Always
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioIcon");
tmpFld.id = "radioIconAlways";
if(DM_LS_Settings["showLoginIcon"] == "always") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideIconSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Always") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Icon - Selected
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioIcon");
tmpFld.id = "radioIconSelected";
if(DM_LS_Settings["showLoginIcon"] == "selected") {
  tmpFld.checked=true;
}
tmpFld.addEventListener("click", showHideIconSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Selected Sites:") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Icon - Selected - Geeklist
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkIconGeeklists";
tmpFld.checked=(DM_LS_Settings["showLoginIconGeeklists"]==true);
tmpFld.style.marginLeft="15px";
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Geeklists") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Icon - Selected - Trades
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkIconTrades";
tmpFld.checked=(DM_LS_Settings["showLoginIconTrades"]==true);
tmpFld.style.marginLeft="15px";
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Trade Lists") );
tmpTd.appendChild( document.createElement('br') );
// Settings - Icon - Forums
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkIconForums";
tmpFld.checked=(DM_LS_Settings["showLoginIconForums"]==true);
tmpFld.style.marginLeft="15px";
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Forums") );
//tmpTd.appendChild( document.createElement('br') );
tmpTr.appendChild(tmpTd);

// Icon Packs
tmpTd=document.createElement('td');
tmpTd.style.verticalAlign="top";
tmpTd.style.padding="0px 10px";
tmpTd.style.borderRight="1px dotted black";
var tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="10px 0px 5px 0px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Choose Icon Style") );
tmpTd.appendChild(tmpHdr);
// Icons - D10
var tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioPack");
tmpFld.id = "radioIconPackD10";
if(DM_LS_Settings["iconPack"] == "D10") {
  tmpFld.checked=true;
}
//tmpFld.addEventListener("click", showHideTextSelected, false);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0") );
for(i=0; i<loginIconD10.length; i++) {
  tmpImg=document.createElement('img');
  tmpImg.src="http://cf.geekdo-images.com/images/pic"+loginIconD10[i];
  tmpTd.appendChild(tmpImg);
}
tmpTd.appendChild( document.createElement('br') );
// Icons - Hex
var tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioPack");
tmpFld.id = "radioIconPackHex";
if(DM_LS_Settings["iconPack"] == "Hex") {
  tmpFld.checked=true;
}
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0") );
for(i=0; i<loginIconHex.length; i++) {
  tmpImg=document.createElement('img');
  tmpImg.src="http://cf.geekdo-images.com/images/pic"+loginIconHex[i];
  tmpTd.appendChild(tmpImg);
}
tmpTd.appendChild( document.createElement('br') );
tmpTr.appendChild(tmpTd);
// Icons - Hour
var tmpRow=document.createElement('div');
var tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "radio");
tmpFld.setAttribute("name", "radioPack");
tmpFld.id = "radioIconPackHour";
if(DM_LS_Settings["iconPack"] == "Hour") {
  tmpFld.checked=true;
}
tmpRow.appendChild(tmpFld);
tmpRow.appendChild( document.createTextNode("\u00A0") );
for(i=0; i<loginIconHour.length; i++) {
  tmpImg=document.createElement('img');
  tmpImg.src="http://cf.geekdo-images.com/images/pic"+loginIconHour[i];
  tmpImg.title="Art by Floodgate";
  tmpRow.appendChild(tmpImg);
}
tmpTd.appendChild(tmpRow);
tmpTr.appendChild(tmpTd);

// Icon Day Ranges
tmpTd=document.createElement('td');
tmpTd.style.verticalAlign="top";
tmpTd.style.padding="0px 10px";
tmpTd.style.borderRight="1px dotted black";
tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="10px 0px 5px 0px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Custom Days") );
tmpTd.appendChild(tmpHdr);
// Ranges
for (i=0; i < loginDays.length; i++) {
  tmpImg=document.createElement('img');
  tmpImg.src="http://cf.geekdo-images.com/images/pic"+loginIcons[i];
  tmpImg.id="Dazeymod.DayRangeIcon."+i;
  tmpTd.appendChild(tmpImg);
  tmpTd.appendChild( document.createTextNode("\u00A0:\u00A0") );
  tmpFld=document.createElement('input');
  tmpFld.setAttribute("type", "text");
  tmpFld.id = "checkIconDays"+i;
  tmpFld.value = loginDays[i];
  tmpFld.size="3";
  tmpTd.appendChild(tmpFld);
  tmpTd.appendChild( document.createTextNode("\u00A0+ days") );
  tmpTd.appendChild( document.createElement('br') );
}
tmpTr.appendChild(tmpTd);

// Other Settings
tmpTd=document.createElement('td');
tmpTd.id="tdCustomSettings";
tmpTd.style.verticalAlign="top";
tmpTd.style.padding="0px 10px";
tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="10px 0px 5px 0px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Other Settings") );
tmpTd.appendChild(tmpHdr);
// Context Menu Option
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkContextMenu";
tmpFld.checked=(DM_LS_Settings["showContextMenu"]==true);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Enable right-click menu") );
tmpTd.appendChild( document.createElement('br') );
// Move QuickBar Option
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkQuickBar";
tmpFld.checked=(DM_QB_Settings["moveQuickBar"]==true);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Move QuickBar down") );
tmpTd.appendChild( document.createElement('br') );
// Large Thumbnail Option
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkLargeThumb";
tmpFld.checked=(DM_LT_Settings["largeThumbnail"]==true);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Large thumbnails in lists") );
tmpTd.appendChild( document.createElement('br') );
tmpTd.appendChild( document.createTextNode("\u00A0\u00A0\u00A0Size (60-150): ") );
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "text");
tmpFld.id = "textLargeThumb";
tmpFld.value = DM_LS_Settings["largeThumbnailSize"];
tmpFld.size="3";
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createElement('br') );

tmpTr.appendChild(tmpTd);

// End the LastSeen Table
tmpTbl.appendChild(tmpTr);
tmpDivLS.appendChild(tmpTbl);
tmpFrm.appendChild(tmpDivLS);


// Settings - UsernameTag Div
var tmpDivUT=document.createElement('div');
tmpDivUT.id="DazeyMod.UsernameTag.SettingsDiv";
tmpDivUT.style.display="none";
tmpDivUT.style.backgroundColor="#EAEAFF";

// Settings - Table
var tmpTbl=document.createElement('table');
var tmpTr=document.createElement('tr');

var tmpTd=document.createElement('td');
tmpTd.style.verticalAlign="top";
tmpTd.style.padding="0px 10px";
tmpTd.style.borderRight="1px dotted black";
// Settings - Username Tag First TD
var tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="10px 0px 5px 0px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Username Tag") );
tmpTd.appendChild(tmpHdr);
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "checkbox");
tmpFld.id = "checkUsernameTag";
tmpFld.checked=(DM_UT_Settings["showUsernameTag"]==true);
tmpTd.appendChild(tmpFld);
tmpTd.appendChild( document.createTextNode("\u00A0Enable Username Tagging") );
tmpTd.appendChild( document.createElement('br') );
tmpTd.appendChild( document.createElement('br') );
tmpTd.appendChild( document.createTextNode("\u00A0Choose Default Tag Icon:") );
tmpTd.appendChild( document.createElement('br') );
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "hidden");
tmpFld.id = "DazeyMod.UTIconDefault";
tmpTd.appendChild(tmpFld);
for(i=0; i<usernameTagIcons.length; i++) {
  tmpImg=document.createElement('img');
  tmpImg.src="http://cf.geekdo-images.com/images/pic"+usernameTagIcons[i];
  tmpImg.id="DazeyMod.UTIconDefault."+i;
  tmpImg.style.padding="1px";
  tmpTd.appendChild(tmpImg);
}
tmpTd.appendChild( document.createElement('br') );
tmpTd.appendChild( document.createElement('br') );
// UT - Show count of tagged users
tmpTxt=document.createElement('div');
tmpTxt.id = "DazeyMod.UTIcon.Count";
tmpTd.appendChild(tmpTxt);
tmpTr.appendChild(tmpTd);

// Settings - Username Tag Second TD
var tmpTd=document.createElement('td');
tmpTd.style.verticalAlign="top";
tmpTd.style.padding="0px 10px";
tmpTd.style.borderRight="1px dotted black";
var tmpHdr=document.createElement('div');
tmpHdr.style.textAlign="center";
tmpHdr.style.padding="10px 0px 5px 0px";
tmpHdr.style.fontWeight="bold";
tmpHdr.appendChild( document.createTextNode("Saved Username Tags") );
tmpTd.appendChild(tmpHdr);
tmpTxt=document.createElement('div');
tmpTxt.id="DazeyMod.UTUserList";
tmpTxt.style.height="140px";
tmpTxt.style.width="460px";
tmpTxt.style.overflowY="scroll";
tmpTd.appendChild(tmpTxt);
tmpTr.appendChild(tmpTd);

// End the UsernameTag Table
tmpTbl.appendChild(tmpTr);
tmpDivUT.appendChild(tmpTbl);
tmpFrm.appendChild(tmpDivUT);

// Buttons and Status Bar at bottom of settings
var tmpTbl=document.createElement('table');
tmpTr=document.createElement('tr');
tmpTd=document.createElement('td');
tmpTd.setAttribute("colspan", "2");
tmpDv2=document.createElement('div');
tmpDv2.style.cssFloat="left";
tmpDv2.style.padding="10px";
// Add a Save button
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "button");
tmpFld.setAttribute("value", "Save");
tmpFld.addEventListener("click", function() { document.getElementById('DazeyMod.SettingsStatus').childNodes[0].data="Thinking..."; window.setTimeout(function(){saveDazeyModSettings();}, 250); }, false);
tmpDv2.appendChild(tmpFld);

tmpDv2.appendChild( document.createTextNode("\u00A0\u00A0") );

// Add a Close button
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "button");
tmpFld.setAttribute("value", "Close");
tmpFld.addEventListener("click", showHideSettings, false);
tmpDv2.appendChild(tmpFld);
tmpTd.appendChild(tmpDv2);

// Status box
tmpSts=document.createElement('div');
tmpSts.id="DazeyMod.SettingsStatus";
tmpSts.style.padding="10px";
tmpSts.style.cssFloat="left";
tmpSts.style.fontWeight="bold";
tmpSts.appendChild( document.createTextNode("") );
tmpTd.appendChild(tmpSts);

tmpTr.appendChild(tmpTd);
tmpTbl.appendChild(tmpTr);
tmpFrm.appendChild(tmpTbl);

// Add the Form & Settings Div to the page
tmpDiv.appendChild(tmpFrm);
document.getElementById('maincontent').appendChild(tmpDiv);
// Disable the Blue 0 field
document.getElementById('checkIconDays0').disabled=true;


function saveDazeyModSettings() {
  console.log("saveDazeyModSettings()");
  // Save Settings for LastSeen Text Options
  if(document.getElementById('radioTextNever').checked) {
    DM_LS_Settings["showLoginText"]="never";
  }
  if(document.getElementById('radioTextManual').checked) {
    DM_LS_Settings["showLoginText"]="manual";
  }
  if(document.getElementById('radioTextAlways').checked) {
    DM_LS_Settings["showLoginText"]="always";
  }
  if(document.getElementById('radioTextSelected').checked) {
    DM_LS_Settings["showLoginText"]="selected";
  }
  DM_LS_Settings["showLoginTextGeeklists"]=document.getElementById('checkTextGeeklists').checked;
  DM_LS_Settings["showLoginTextTrades"]=document.getElementById('checkTextTrades').checked;
  DM_LS_Settings["showLoginTextForums"]=document.getElementById('checkTextForums').checked;
  
  // Save Settings for LastSeen Icon Options
  if(document.getElementById('radioIconNever').checked) {
	DM_LS_Settings["showLoginIcon"]="never";
  }
  if(document.getElementById('radioIconManual').checked) {
	DM_LS_Settings["showLoginIcon"]="manual";
  }
  if(document.getElementById('radioIconAlways').checked) {
	DM_LS_Settings["showLoginIcon"]="always";
  }
  if(document.getElementById('radioIconSelected').checked) {
	DM_LS_Settings["showLoginIcon"]="selected";
  }
  DM_LS_Settings["showLoginIconGeeklists"]=document.getElementById('checkIconGeeklists').checked;
  DM_LS_Settings["showLoginIconTrades"]=document.getElementById('checkIconTrades').checked;
  DM_LS_Settings["showLoginIconForums"]=document.getElementById('checkIconForums').checked;
  
  //console.log("Save Icon Pack");
  var oldPack = DM_LS_Settings["iconPack"];
  if(document.getElementById('radioIconPackD10').checked) {
    //console.log("Icon Pack: D10");
	DM_LS_Settings["iconPack"]="D10";
  }
  if(document.getElementById('radioIconPackHex').checked) {
    //console.log("Show Icon Manual");
	DM_LS_Settings["iconPack"]="Hex";
  }
  if(document.getElementById('radioIconPackHour').checked) {
    //console.log("Show Icon Always");
	DM_LS_Settings["iconPack"]="Hour";
  }
  if(oldPack != DM_LS_Settings["iconPack"]) {
    if(DM_LS_Settings["iconPack"]=="D10") {
      loginIcons = loginIconD10;
    }
    if(DM_LS_Settings["iconPack"]=="Hex") {
      loginIcons = loginIconHex;
    }
    if(DM_LS_Settings["iconPack"]=="Hour") {
      loginIcons = loginIconHour;
    }
	refreshIcons();
  }
  
  //console.log("Save Day Ranges");
  tmpDays = new Array();
  for (i=0; i<6; i++) {
    tmpDays[i] = document.getElementById("checkIconDays"+i).value;
  }
  DM_LS_Settings["iconDays"]=JSON.stringify(tmpDays);
  
  //console.log("Save Other Settings");
  //console.log("Save Context Menu");
  if(DM_LS_Settings["showContextMenu"]==false && document.getElementById('checkContextMenu').checked){
    createContextMenu();
  }
  if(DM_LS_Settings["showContextMenu"]==true && !document.getElementById('checkContextMenu').checked) {
    var tmpMnu = document.getElementById("DazeyModMenu");
    tmpMnu.parentNode.removeChild(tmpMnu);
  }
  DM_LS_Settings["showContextMenu"]=document.getElementById('checkContextMenu').checked;
  
  //console.log("Save QuickBar Option");
  if(DM_QB_Settings["moveQuickBar"]==false && document.getElementById('checkQuickBar').checked){
    document.getElementById('main_content').insertBefore(quickBar, document.getElementById('main_content').childNodes[0]);
  }
  if(DM_QB_Settings["moveQuickBar"]==true && !document.getElementById('checkQuickBar').checked) {
    document.getElementById('QBParent').insertBefore(quickBar, document.getElementById('QBParent').childNodes[0]);
  }
  DM_QB_Settings["moveQuickBar"]=document.getElementById('checkQuickBar').checked;
  
  //console.log("Save Large Thumb Option");
  //console.log(DM_LT_Settings["largeThumbnail"]);
  if(DM_LT_Settings["largeThumbnail"]==false && document.getElementById('checkLargeThumb').checked){
    loadLargeThumbnails();
  }
  if(DM_LT_Settings["largeThumbnail"]==true && !document.getElementById('checkLargeThumb').checked) {
    // Code to restore small thumbs
  }
  DM_LT_Settings["largeThumbnail"]=document.getElementById('checkLargeThumb').checked;
  if(DM_LS_Settings["largeThumbnailSize"]!=document.getElementById('textLargeThumb').value) {
    DM_LS_Settings["largeThumbnailSize"]=document.getElementById('textLargeThumb').value;
	if(DM_LT_Settings["largeThumbnail"]) {
	  updateThumbnailSize();
	}
  }
  //console.log(DM_LT_Settings["largeThumbnail"]);
  
  if(DM_UT_Settings["showUsernameTag"]==false && document.getElementById('checkUsernameTag').checked) {
    refreshUsernameTags();
  }
  if(DM_UT_Settings["showUsernameTag"]==true && !document.getElementById('checkUsernameTag').checked) {
    hideUsernameTagIcons();
  }
  DM_UT_Settings["showUsernameTag"]=document.getElementById('checkUsernameTag').checked;
  DM_UT_Settings["defaultIcon"]=document.getElementById('DazeyMod.UTIconDefault').value;
  
  // Run other module's save functions
  if (window.saveFunctions.length>0){
    for (i=0; i<window.saveFunctions.length; i++) {
	  window.saveFunctions[i]();
	}
  }
  
  // Show "Saved" status
  window.setTimeout(function(){ 
    document.getElementById('DazeyMod.SettingsStatus').childNodes[0].data="Saved"
  }, 500);window.setTimeout(function(){ 
    document.getElementById('DazeyMod.SettingsStatus').childNodes[0].data=""
  }, 3000);
  
  //console.log("Set the GM Variable");
  GM_setValue("DM_LS_Settings", JSON.stringify(DM_LS_Settings));
  GM_setValue("DM_QB_Settings", JSON.stringify(DM_QB_Settings));
  GM_setValue("DM_LT_Settings", JSON.stringify(DM_LT_Settings));
  GM_setValue("DM_UT_Settings", JSON.stringify(DM_UT_Settings));
} // End saveDazeyModSettings()


function showHideTextSelected() {
  // Enable or disable the LastSeen Text sub-page fields if the user picked "Selected Sites" or not
  if (document.getElementById('radioTextSelected').checked == true) {
    document.getElementById('checkTextGeeklists').disabled=false;
	document.getElementById('checkTextTrades').disabled=false;
	document.getElementById('checkTextForums').disabled=false;
  } else {
    document.getElementById('checkTextGeeklists').disabled=true;
	document.getElementById('checkTextTrades').disabled=true;
	document.getElementById('checkTextForums').disabled=true;
  }
} // End showHideTextSelected
showHideTextSelected()

function showHideIconSelected() {
  // Enable or disable the LastSeen Icon sub-page fields if the user picked "Selected Sites" or not
  if (document.getElementById('radioIconSelected').checked == true) {
    document.getElementById('checkIconGeeklists').disabled=false;
	document.getElementById('checkIconTrades').disabled=false;
	document.getElementById('checkIconForums').disabled=false;
  } else {
    document.getElementById('checkIconGeeklists').disabled=true;
	document.getElementById('checkIconTrades').disabled=true;
	document.getElementById('checkIconForums').disabled=true;
  }
} // End showHideIconSelected
showHideIconSelected()

function showHideSettingsLoad() {
  // Show a spinning cursor when loading the settings DIV
  // This is because it can take several seconds if they have tagged hundreds of users
  document.getElementById('main_content').style.cursor="progress"; 
  document.getElementById('DazeyMod.SettingsIcon').style.cursor="progress";
  window.setTimeout(showHideSettings, 50);
} // End showHideSettingsLoad()

function showHideSettings() {
  // Display the Settings window and update some of the contents
  console.log("showHideSettings()");
  if (document.getElementById('settingsDiv').style.visibility == "hidden") {
    // It's currently hidden, so show it
    document.getElementById('settingsDiv').style.visibility = "visible";
    // Set the Default Tag icon
    for (i=0; i<usernameTagIcons.length; i++) {
      document.getElementById('DazeyMod.UTIconDefault.'+i).style.border="";
    }
    tmpIcon = DM_UT_Settings["defaultIcon"];
    if (typeof tmpIcon==='undefined' || tmpIcon=="undefined") {
      tmpIcon = "8";
    }
    document.getElementById('DazeyMod.UTIconDefault.'+tmpIcon).style.border="1px solid grey"
    document.getElementById('DazeyMod.UTIconDefault').value = tmpIcon;
    for (i=0; i<usernameTagIcons.length; i++) {
      listenerForUsernameTagIconDefault(i);
    }
    // Update the tagged user list
    txtBox = document.getElementById('DazeyMod.UTUserList');
    while (txtBox.hasChildNodes()) {
      txtBox.removeChild(txtBox.lastChild);
    }
    tagCount = 0;
    Object.keys(DM_UT_Users).forEach(function(key) {
      if(key.indexOf(".icon") == -1) {
	    tagCount++;;
        tmpIcon = DM_UT_Users[key+".icon"];
        if (typeof tmpIcon==='undefined' || tmpIcon=="undefined") {
          tmpIcon = 11;
        }
	    tmpImg=document.createElement('img');
	    tmpImg.src="http://cf.geekdo-images.com/images/pic"+usernameTagIcons[tmpIcon];
	    txtBox.appendChild(tmpImg);
	    tmpBld=document.createElement('b');
	    tmpBld.appendChild( document.createTextNode(key));
	    txtBox.appendChild(tmpBld);
	    txtBox.appendChild( document.createTextNode(": "+DM_UT_Users[key]) );
	    txtBox.appendChild( document.createElement('br') );
	  }
    });
    // Update the number of tagged users count
    DM_UT_Users = JSON.parse(GM_getValue("DM_UT_Users"));
    document.getElementById('DazeyMod.UTIcon.Count').innerHTML="You have tagged <b>"+(tagCount)+"</b> users.";
    // Set the cursors back to non-spinning as the settings are loaded
    document.getElementById('main_content').style.cursor="";
    document.getElementById('DazeyMod.SettingsIcon').style.cursor="pointer";
  } else {
    // The settings are visible, so hide them
    document.getElementById('settingsDiv').style.visibility = "hidden";
    // Also switch the cursors back in case they hit the gear icon to close the window
    document.getElementById('main_content').style.cursor="";
    document.getElementById('DazeyMod.SettingsIcon').style.cursor="pointer";

  }
} // End showHideSettings()

// Create DIV for UsernameTag hover text
tmpDiv=document.createElement('div');
tmpDiv.id="DazeyMod.UTText";
tmpDiv.style.visibility="hidden";
tmpDiv.style.zindex="200";
tmpDiv.style.position="absolute";
tmpDiv.style.backgroundColor="#99BEFF";
tmpDiv.style.border="1px Solid Black";
tmpDiv.style.padding="3px";
document.getElementById("main_content").appendChild(tmpDiv);

// Create DIV for UsernameTag Editor
tmpDiv=document.createElement('div');
tmpDiv.id="DazeyMod.UTEdit";
tmpDiv.style.visibility="hidden";
tmpDiv.style.zindex="200";
tmpDiv.style.position="absolute";
tmpDiv.style.backgroundColor="#99BEFF";
tmpDiv.style.border="1px Solid Black";
tmpDiv.style.padding="2px 4px";
tmpDiv.addEventListener("keypress", function(e) { if(e.keyCode==13){saveUsernameTag();} }, false);
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "text");
tmpFld.id = "DazeyMod.UTFieldText";
tmpFld.size="40";
tmpFld.style.border="1px solid black";
tmpFld.style.padding="2px";
tmpDiv.appendChild(tmpFld);
tmpDiv.appendChild( document.createTextNode("\u00A0\u00A0") );
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "button");
tmpFld.setAttribute("value", "Save");
tmpFld.addEventListener("click", function() { saveUsernameTag(); }, false);
tmpDiv.appendChild(tmpFld);
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "button");
tmpFld.setAttribute("value", "Close");
tmpFld.addEventListener("click", function() { document.getElementById('DazeyMod.UTEdit').style.visibility="hidden"; }, false);
tmpDiv.appendChild(tmpFld);
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "hidden");
tmpFld.id = "DazeyMod.UTFieldUser";
tmpDiv.appendChild(tmpFld);
tmpFld=document.createElement('input');
tmpFld.setAttribute("type", "hidden");
tmpFld.id = "DazeyMod.UTIconPick";
tmpDiv.appendChild(tmpFld);
tmpDiv.appendChild( document.createElement('br') );
for(i=0; i<usernameTagIcons.length; i++) {
  tmpImg=document.createElement('img');
  tmpImg.src="http://cf.geekdo-images.com/images/pic"+usernameTagIcons[i];
  tmpImg.id="DazeyMod.UTIconPicker."+i;
  tmpImg.style.padding="1px";
  tmpDiv.appendChild(tmpImg);
}
document.getElementById("main_content").appendChild(tmpDiv);
for(i=0; i<usernameTagIcons.length; i++) {
  listenerForUsernameTagIcon(i);
}

function editUsernameTag(av, user, e) {
  hideUsernameTag();
  edtDiv = document.getElementById('DazeyMod.UTEdit');
  edtDiv.style.left=e.pageX+15+"px";
  edtDiv.style.top=e.pageY+"px";
  edtDiv.style.visibility="visible";
  tmpTxt = DM_UT_Users[user];
  if (typeof tmpTxt==='undefined' || tmpTxt=="undefined") {
    tmpTxt = "";
  }
  document.getElementById('DazeyMod.UTFieldText').value = tmpTxt;
  document.getElementById('DazeyMod.UTFieldUser').value = user;
  document.getElementById('DazeyMod.UTFieldText').focus();
  document.getElementById('DazeyMod.UTFieldText').select();
  for (i=0; i<usernameTagIcons.length; i++) {
    document.getElementById('DazeyMod.UTIconPicker.'+i).style.border="";
  }
  tmpIcon = DM_UT_Users[user+".icon"];
  if (typeof tmpIcon==='undefined' || tmpIcon=="undefined") {
    tmpIcon = DM_UT_Settings["defaultIcon"];
  }
  document.getElementById('DazeyMod.UTIconPicker.'+tmpIcon).style.border="1px solid grey"
  document.getElementById('DazeyMod.UTIconPick').value = tmpIcon;
}

function pickUsernameTagIcon(icon) {
  for (i=0; i<usernameTagIcons.length; i++) {
    document.getElementById('DazeyMod.UTIconPicker.'+i).style.border="";
  }
  document.getElementById('DazeyMod.UTIconPicker.'+icon).style.border="1px solid grey"
  document.getElementById('DazeyMod.UTIconPick').value = icon;
  document.getElementById('DazeyMod.UTFieldText').focus();
}

function pickUsernameTagIconDefault(icon) {
  for (i=0; i<usernameTagIcons.length; i++) {
    document.getElementById('DazeyMod.UTIconDefault.'+i).style.border="";
  }
  document.getElementById('DazeyMod.UTIconDefault.'+icon).style.border="1px solid grey"
  document.getElementById('DazeyMod.UTIconDefault').value = icon;
}

function saveUsernameTag() {
  //alert (document.getElementById('DazeyMod.UTFieldText').value + " | " + document.getElementById('DazeyMod.UTFieldUser').value);
  DM_UT_Users[document.getElementById('DazeyMod.UTFieldUser').value] = document.getElementById('DazeyMod.UTFieldText').value;
  DM_UT_Users[(document.getElementById('DazeyMod.UTFieldUser').value)+".icon"] = document.getElementById('DazeyMod.UTIconPick').value;
  GM_setValue("DM_UT_Users", JSON.stringify(DM_UT_Users));
  refreshUsernameTags();
  document.getElementById('DazeyMod.UTEdit').style.visibility="hidden";
}

function showUsernameTag(av, user, e) {
  //console.log("mouseover "+user);
  txtDiv = document.getElementById('DazeyMod.UTText');
  tmpTxt = DM_UT_Users[user];
  if (typeof tmpTxt==='undefined' || tmpTxt=="" || tmpTxt=="undefined") {
    tmpTxt = "";
	txtDiv.style.visibility=tmpVis = "hidden";
  } else {
    txtDiv.style.visibility=tmpVis = "visible";
  }
  txtDiv.innerHTML=tmpTxt;
  txtDiv.style.left=e.pageX+10+"px";
  txtDiv.style.top=e.pageY+"px";
}
function hideUsernameTag() {
  document.getElementById('DazeyMod.UTText').style.visibility="hidden";
}

function listenerForUsernameTag(av, user) {
  //console.log("listen "+av+" "+user);
  document.getElementById('DazeyMod.UTIcon.'+av).addEventListener("click", function(e){editUsernameTag(av, user, e);}, false);
  document.getElementById('DazeyMod.UTIcon.'+av).addEventListener("mouseover", function(e){showUsernameTag(av, user, e);}, false);
  document.getElementById('DazeyMod.UTIcon.'+av).addEventListener("mouseout", function(){hideUsernameTag();}, false);
}

function listenerForUsernameTagIcon(icon) {
  document.getElementById('DazeyMod.UTIconPicker.'+icon).addEventListener("click", function(){pickUsernameTagIcon(icon);}, false);
}

function listenerForUsernameTagIconDefault(icon) {
  document.getElementById('DazeyMod.UTIconDefault.'+icon).addEventListener("click", function(){pickUsernameTagIconDefault(icon);}, false);
}

function switchSettingsTab(tab) {
  //console.log("Switch to tab "+tab);
  if (tab == 0) {
    document.getElementById('DazeyMod.UsernameTag.SettingsDiv').style.display="none";
	document.getElementById('DazeyMod.UsernameTag.Tab').style.backgroundColor="#EAFFFF";
    document.getElementById('DazeyMod.UsernameTag.Tab').style.borderBottom="1px solid black";
    document.getElementById('DazeyMod.LastSeen.SettingsDiv').style.display="";
	document.getElementById('DazeyMod.LastSeen.Tab').style.backgroundColor="#EAEAFF";
	document.getElementById('DazeyMod.LastSeen.Tab').style.borderBottom="";
  }
  if (tab == 1) {
    document.getElementById('DazeyMod.LastSeen.SettingsDiv').style.display="none";
    document.getElementById('DazeyMod.LastSeen.Tab').style.backgroundColor="#EAFFFF";
	document.getElementById('DazeyMod.LastSeen.Tab').style.borderBottom="1px solid black";
    document.getElementById('DazeyMod.UsernameTag.SettingsDiv').style.display="";
	document.getElementById('DazeyMod.UsernameTag.Tab').style.backgroundColor="#EAEAFF";
    document.getElementById('DazeyMod.UsernameTag.Tab').style.borderBottom="";
  }
}

function refreshUsernameTags() {
  console.log("refreshUsernameTags()");
  uList = document.getElementsByClassName("avatarblock js-avatar");
  for (av=0; av<uList.length; av++) {
    uName = uList[av].getAttribute("data-username");
    tmpTxt = DM_UT_Users[uName];
    if (typeof tmpTxt==='undefined' || tmpTxt=="" || tmpTxt=="undefined") {
      // Grey icon
	  document.getElementById('DazeyMod.UTIcon.'+av).src="http://cf.geekdo-images.com/images/pic"+usernameTagIcons[11];
    } else {
      // Colorful icon
	  document.getElementById('DazeyMod.UTIcon.'+av).src = "http://cf.geekdo-images.com/images/pic"+usernameTagIcons[DM_UT_Users[uName+".icon"]];
    }
    console.log(uName);
    listenerForUsernameTag(av, uName);
  }
} // End refreshUsernameTags()

function hideUsernameTagIcons() {
  for (av=0; av<uList.length; av++) {
    document.getElementById('DazeyMod.UTIcon.'+av).src="http://cf.geekdo-images.com/images/pic2015885.png";
  }
}

if (DM_UT_Settings["showUsernameTag"]==true) {
  refreshUsernameTags();
}