Mondo Caboodle

By Michael Devore Last update Jun 21, 2007 — Installed 114 times.

the source is over 100KB, syntax highlighting in the browser is too slow

// mondo_caboodle.user.js
//
// Copyright 2005-2007, Michael Devore
// This file is licensed under the terms of the Artistic License.
// See http://www.opensource.org/licenses/artistic-license.php for the license itself.
//
// This is a Greasemonkey script.
// See http://greasemonkey.mozdev.org/ for more information on Greasemonkey.
//
// ==UserScript==
// @name          Mondo Caboodle
// @namespace     http://www.devoresoftware.com/gm/mcab
// @description	Personalize the Metafilter experience even more
// @include       http://*.metafilter.com/*
// @include       http://www.devoresoftware.com/*
// ==/UserScript==
//
// Work begun, December 2005 (as Mondo Meta)
// Version 1.0, released early February 2007
// Version 2.0, released early mid-June 2007, includes Mondo Meta 2.01, Mondo Image 1.3
//

// Mondo Caboodle variables
var mondoCaboodleVersion = "Version 2.0, Mondo Caboodle";
var imagesText = "Images";

// ***********************************************
// Mondo Meta variables
// ***********************************************
var expandedLinksFlag = 0;
var boxUp = 0;
var mondo_meta_control = null;
var mondo_meta_highlight_control = null;
var mondo_meta_delete_control = null;
var mondo_meta_tag_control = null;
var mondo_meta_style_control = null;
var mondo_meta_manage_control = null;
var freeRules = new Array();
var aDeleteInfo = new Array();
var aHighlightInfo = new Array();
var aTagInfo = new Array();
var aStyleInfo = new Array();
var storedRuleCount = 0;
var currentRuleNumber = 0;
var currentRuleType = 0;
var deactivateDeleteFlag = false;
var deactivateHighlightFlag = false;
var deactivateTagFlag = false;
var deactivateStyleFlag = false;
var flagMultiple = 1;
var flagHighlight = flagMultiple << 1;
var flagDelete = flagHighlight << 1;
var flagTag = flagDelete << 1;
var flagStyle = flagTag << 1;
var originalMenuHeight = "50px";
var originalSiblingHeight = "50px";
var expandTextChoice = [ "Expand Links", "Compact Links"];
var deleteFilterText = "Delete-Filter";
var tagText = "Tag";
var highlightText = "Highlight";
var styleText = "Style";
var manageText = "Manage";
//var separatorText = "------------";
var compactText = "compact";
var defaultText = "default";
var expandText = "expand";
var usedRuleHeader = "Used:mm1.0:";
var freeRuleHeader = "Free:mm1.0:";
var deleteHeader = "Delete:";
var highlightHeader = "Highlight:";
var tagHeader = "Tag:";
var styleHeader = "Style:";
var systemHeader = "System:mm1.0:";
var systemStatusText = "System Status";
var optionText = "Option";
var contentText = "Content";
var footerText = "Footer";
var contentFooterText = contentText + "+" + footerText;
var customText = "Custom";
var unchangedText = "Unchanged";
var buttonText = "button";
var spanText = "SPAN";
var removeText = "Remove";
var invisibleText = "Make Invisible";
var fg_bgText = "Foreground = Background";
var mmHighlightAttribText = "mmModifiedHighlight";
var mmDeleteAttribText = "mmModifiedDelete";
var mmTagClassText = "mmTagClass";
var mmStyledPostAttribText = "mmStyledPost";
var whiteText = "white";
var darkBlueText = "darkblue";
var textNodeText = "#text";
var trueText = "true";
var falseText = "false";
var clickText = "click";
var noneText = "none";
var hiddenText = "hidden";
var visibleText = "visible";
var xText = "x";

// ***********************************************
// Mondo Image variables
// ***********************************************
var aDefaultSites = [ "*.flickr.com", "*.imageshack.us", "*.photobucket.com" ];
var aDefaultExtensions = [ ".png", ".jpg", ".gif", ".jpeg" ];
var defaultLimitMaxWidth = "550px";
var defaultLimitMaxHeight = "550px";
var miBottomPos = "5px";
var miLeftPos = "280px";
var miFontSize = "12px";
var miFontWeight = "bold";
var miColor = "darkblue";
var miOpacity = ".85";
var miBackgroundColor = "#FFCFCF";
var lightgrayColor = "lightgray";
var whiteColor = "white";
var restrictedImage = "data:image/jpeg,%FF%D8%FF%E0%00%10JFIF%00%01%01%01%01%2C%01%2C%00%00%FF%DB%00C%00%08%06%06%07%06%05%08%07%07%07%09%09%08%0A%0C%14%0D%0C%0B%0B%0C%19%12%13%0F%14%1D%1A%1F%1E%1D%1A%1C%1C%20%24.'%20%22%2C%23%1C%1C(7)%2C01444%1F'9%3D82%3C.342%FF%DB%00C%01%09%09%09%0C%0B%0C%18%0D%0D%182!%1C!22222222222222222222222222222222222222222222222222%FF%C0%00%11%08%00I%00%C5%03%01%22%00%02%11%01%03%11%01%FF%C4%00%1F%00%00%01%05%01%01%01%01%01%01%00%00%00%00%00%00%00%00%01%02%03%04%05%06%07%08%09%0A%0B%FF%C4%00%B5%10%00%02%01%03%03%02%04%03%05%05%04%04%00%00%01%7D%01%02%03%00%04%11%05%12!1A%06%13Qa%07%22q%142%81%91%A1%08%23B%B1%C1%15R%D1%F0%243br%82%09%0A%16%17%18%19%1A%25%26'()*456789%3ACDEFGHIJSTUVWXYZcdefghijstuvwxyz%83%84%85%86%87%88%89%8A%92%93%94%95%96%97%98%99%9A%A2%A3%A4%A5%A6%A7%A8%A9%AA%B2%B3%B4%B5%B6%B7%B8%B9%BA%C2%C3%C4%C5%C6%C7%C8%C9%CA%D2%D3%D4%D5%D6%D7%D8%D9%DA%E1%E2%E3%E4%E5%E6%E7%E8%E9%EA%F1%F2%F3%F4%F5%F6%F7%F8%F9%FA%FF%C4%00%1F%01%00%03%01%01%01%01%01%01%01%01%01%00%00%00%00%00%00%01%02%03%04%05%06%07%08%09%0A%0B%FF%C4%00%B5%11%00%02%01%02%04%04%03%04%07%05%04%04%00%01%02w%00%01%02%03%11%04%05!1%06%12AQ%07aq%13%222%81%08%14B%91%A1%B1%C1%09%233R%F0%15br%D1%0A%16%244%E1%25%F1%17%18%19%1A%26'()*56789%3ACDEFGHIJSTUVWXYZcdefghijstuvwxyz%82%83%84%85%86%87%88%89%8A%92%93%94%95%96%97%98%99%9A%A2%A3%A4%A5%A6%A7%A8%A9%AA%B2%B3%B4%B5%B6%B7%B8%B9%BA%C2%C3%C4%C5%C6%C7%C8%C9%CA%D2%D3%D4%D5%D6%D7%D8%D9%DA%E2%E3%E4%E5%E6%E7%E8%E9%EA%F2%F3%F4%F5%F6%F7%F8%F9%FA%FF%DA%00%0C%03%01%00%02%11%03%11%00%3F%00%F5%DA(%AC%AF%0Ek%91x%8BC%B7%D4%A3%85%ED%DAE%06H%1C%82%D1%B6%01%C1%F6%20%86%07%8C%AB)%C0%CDcgk%9E%A9%ABEc%E9%3E%22%B6%D5%60%D4%EEv%FD%9E%D6%C6%E1%A2%F3%A5p%16D%08%AF%E6%E7%A0B%1B%20%E7%05p%7B%E0_%87Q%B1%B8%B3%8E%F2%1B%CBy-d%60%892J%A5%19%8Bm%0008%24%B7%1F%5E(i%A0%2C%D1U%ACu%1B%1DN%135%85%E5%BD%DCJ%DB%0B%C1*%C8%A1%B0%0E2%0F%5EG%E7T%ED%BCAc%7F%A9%DB%DA%D8%5C%5B%DEE%2C3Hg%82uuF%8D%A2%1Bx%CF'%CD%07%AF%18%F7%A2%CC%0DZ*%B5%B6%A3c%7B4%F0%DA%DE%5B%CF-%BBl%9D%22%95Y%A2l%91%86%00%F0x%3D%7D%0DCu%AAEg%A9%C3k6%C4%89%EDg%B9y%DD%C2%ACk%13F%0Es%DB%F7%99%CEx%DB%EF%C1g%B0%17%E8%AA%07%5C%D2%15.%9C%EA%96!m%18%25%C97%09%88X%9C%00%FC%FC%A7%20%8E%7B%D4%D2%EA60X%0B%F9o-%E3%B2*%AE.%1EU%11%95lm%3B%B3%8C%1C%8Cz%E6%8B0%2C%D1U%A2%D4lg%B07%F1%5E%5B%C9d%15%9C%DC%24%AAc%0A%B9%DCwg%18%189%F4%C5%16z%8D%8E%A0%9B%EC%AF-%EEWh%7C%C3*%B8%DAI%00%F0zeX%7DT%FAR%B3%02%CD%15Z%C7Q%B1%D4%E13X%5E%5B%DD%C4%AD%B0%BC%12%AC%8A%1B%00%E3%20%F5%E4~tO%A8%D8%DA%CC%90%DC%5E%5B%C5%2B%B2%22%A4%92%AA%B33%92%10%00O%24%EDlz%ED%3E%94Y%81f%8A%AC%9A%8D%8C%97%F2XGyn%F7%B1.%F9-%D6U2%22%F1%C9%5C%E4%0EG%E6)%9F%DA%FAo%F6%97%F6o%F6%85%A7%DB%FF%00%E7%D7%CE_7%A6%EF%B9%9C%F4%E7%A7Ni%D9%81r%8A%C7%B0%F1V%89%A9%5BK%3C%1A%9D%A0H%A4%927%DD%3Aq%B0%BF%CD%C1%E8V6p%7B%A8%CF%AD_%B3%BC%8A%F4J%F0%CBo%2CJ%CA%11%E0%98I%95(%AC%09%C0%E0%9D%D9%03%9C%82%A7%3C%E0%0D5%B8%16h%AC%7B%AF%15h%96%DAj%EA%1F%DAv%92%DA%9B%84%B6%F3b%9D%19C%B1%03%19%CE8%07q%EE%14%13W%1FW%D3b%FB'%99%A8Z'%DB1%F6%5D%D3(%F3%F3%8Cl%E7%E6%FB%C3%A7%A8%F5%A3%95%81r%8A%AD%7D%A8%D8%E9%90%89%AF%EF-%ED%22f%D8%1EyV5-%82q%92z%F0%7F*f%99%7F%FD%A3h%F3%F9~%5E%DB%89%E0%DB%BB9%F2%E5h%F3%F8%ED%CE%3Bf%8B%3B%5C%0B%94QE%20%0A(%A2%80%0A%F3%FB%08%AE%ED%FC%3F%A0Gb%5E5%D6t%DBkY%5D%1Fk%24%81%13.%98%23%12y%1Ey%DCs%FE%A61%D8%2Bz%05f%DDk%D66w%2Fn%E2%EEY%13%1B%C5%B5%9C%D3%84%24g%0CcV%00%E0%83%83%CE%08%3D%08%AB%8Bkd3%9D%F2b%B4%D4.%D8F%91i%96z%D4op%AA%A0G%14Kc%18BTq%B5d%F2%CFL.%D0%DC%05%C8f%AB%F6mP%DF%DCA%E5%5Di7W%1A%5Ce%97%0D%0C%F2%8B%A0%24%3E%8F%F2%18%94%B7%20%ED%DB%9C%A9%03%ABmV%C9%7C%AD%B3y%BEu%BB%DDE%E4%A9%93%CC%89v%E5%97h%3B%BE%FA%E0%0ENx%CD%5C%A7%CFml%07%23%ADC%2C%FA%CE%AC%91%C6%F2%AF%D9t%D6%9A4R%C5%E1%173%19Wh%E5%81%8C8*3%B8q%83%9CUmV%EE%DBY%D6eo%0F%DCEs~%DA%1D%F4Iqj%E3%EF%EE%87%CBQ(%E3%20%92q%9C%AE%E0N7%02%7B%15%BA%85%EFe%B3W%CC%F1F%92%BA%60%F0%AEX)%CFNJ7%E5%F4%A7%CD4V%F0%C94%D2%24qF%A5%DD%DD%80UP2I'%A0%14)%DB%A0%1C%EA%DDi%F7%FA%A6%8B%1E%8A%F17%D8%A4qq%1C%03i%B6%83%C9u%F2%DDx)%F3%F9_%BB89L%E3%E48%A7%E3o%F9z%FF%00%B1%7BS%FF%00%DA%15%D8%D1IJ%CD00g%B4%B6O%17%E8%91%A5%BCJ%96%DA%7D%DF%90%A1%00%11a%AD%D4m%1F%C3%F2%928%ECH%AC4%BC%5B8m%5D%EEll%40%BE%D4%DDoo%C1hc%7F%B58%D8%17z%0F1%836%1B9%0A%AE%00%C36%3By%A5X!%92W%0EU%14%B1%08%85%D8%803%C2%80I%3E%C0d%D3%E8R%03%82%B0%91%1A%5B%9B%C6%BD%96%F7N%83%5CY%AEn%A7U%01%A3%16H%12F%0A%AA%A5%04%866%0C%06%00U%7C%E0n%A2%FEHuk%FD~%5D%11%A2%9CIo%A74%D2%C5%11%95%26U%9E_3%85%C7%9C%3C%B5*UI%DC%14%A7Q%8A%ED%2F%AD%1A%F2%10%89wqk%22%B6%E4%96%06%01%81%C1%1D%18%15a%82x%60G~%A0%10%CB%0D9%2C%BC%C7i%E5%B9%B9%97%1Em%CC%FBw%B8%19%DA%3EP%14%01%93%80%00%19%24%F5bMs%AD%C0%C3%D1f%97P%F1%01%BE%5DZ%C7Q%89-Z%19%25%D3%AD%8ADX%BA%95%0E%FEk%EEa%87!%40%F9C%B18%DC7%5D%B7%86%26%F1%CE%A31%8D%0C%A9%A6%DA%A2%B9Q%B9T%CBpH%07%D0%ED%5C%FD%07%A5l%09T%CC%D1%00%FB%95C%12P%85%C1%24%0C60O%07%20%1C%8E3%D4e%F5%0E%40y%FE%96%2F%9E%CFH%D2%E7%D5lN%A1m42Og%0D%93%7D%AE'V%06Vw3p%1B%2F%BAB%B8q!%C6%EF1C_%FBl67%FF%00%D9%D6%F7%FA%7D%E26%A1%B8%E9r%C0E%DA%B4%93%EFg%E5%FA%231%94%1F%2F%EE(9%FE%3A%ECh%AAs%B8%1C-%9C%D67%B3iVfKy%E5%B7%F1%1D%EB%CB%0E%E5f%89%B3x%C8Y%7B%1E%01%19%F4%C8%AB%97P%CB%3C%5E%25H%E3yW%FBZ%D9%A6%8D%14%B1xDV%A6U%DA9%60c%0E%0A%8C%EE%1C%60%E7%15%D7QK%9F%5B%81%CAk%9A%B6%8Dw%A5%3D%F5%A5%DD%A4%A9%15%E5%87%9Fw%1B%02%81V%E9%08%06A%F2%FC%B9c%8C%FC%A1%B2q%B8f%9D%D5%D3%C7%AAj%AF%26%AB%A4%C5k%A8%F9f%D5.%EC%DA%E4%DEA%E4%A8%DB%11YW%CC%1B%8C%9F%BBPN_8%FD%E0%CFh%25S3D%03%EEU%0CIB%17%04%900%D8%C1%3C%1C%80r8%CFQ%96%5D%DDCce%3D%E5%CB%EC%82%08%DAY%1F%04%EDU%19'%03%93%C0%A1J%DAX%0Ej%CET%D0%EFm%A6%D7o%3C%A4%1A%5D%B5%BCWW%D2*%E6U.f%05%B7%15Wo%DD%127%1D%DBx-%B0%91g%C22%DAC%A0E%1CA-%E2%92%FA%F1-%E1d%F2%8E%3E%D1)%0A%10%80A%0A%0F%CB%8C%80%0F%1CV%FAJ%B2%3C%8A%03%83%1Bmm%C8%40'%00%F0H%E4r9%19%19%C8%EA%0D%3E%93%95%D0%05%14QR%20%A2%8A(%00%AC%7F%0A%7F%C8%A9%A5%EE%FF%00%5D%F6u%FBF~%F7%9D%8F%DE%EF%EF%BF~%ED%D9%E7vs%CEkb%B2%EFtK%0B%9B%87%B8sw%1C%D2%7D%E1k%7B-%BF%98%C0u!%1DC6%00%19%3C%E0%01%9C%01%86%9A%B5%98%9BI%5D%9C%FF%00%89%E6%8A%DC%DCM%A7H%91%98%F4%5DY%D5%ED%D8%0D%B2%87%84%B1%05z0%7C%E7%BEs%DE%B6nc%3A%AF%88.4%E9%E6%B8%8E%D6%DA%D6%19%D5m%A7xY%DEG%95IfB%18%80%23%18%19%03%E69%07%E5%DB4%BAF%9F~%82%16%B4Ak%1D%B4%B6AQ%8A%0F)%F6%87%40%A3%A2%FC%8B%C8%C1%1Bx%E3%AC%97%96v%1A%ABE%E6%B3%EE%40%7C%B9m%EEZ'%C1%EA%A1%A3%60%D8%3BrGC%B4%7Fw%8A%E7VFq%AFM%DB%5D%F6%F3%F4%F2%F39%FDCR%9BE%D7u%26D%96%E6D%D2%ED%1AK%99%10%15%8A5%92%E3%7C%D2m%DA%0E%01%DD%B1p%CD%D1%40%19%2B%7F%C4%F6K%1F%805%9Bw%9E%E2%5D%B63%B9%95%E5!%DD%82%B3d%91%8E%09%FE%11%85%C7%CB%8D%BCV%C5%BD%8D%9D%AD%C3Io%0CqI%E4G%06%D4%E0%2Ch%5Bb%85%E8%00%DC%D8%C0%FET%D3%A5Y%1D%26M%2F%C9%FF%00B%927%89%A1%DCp%11%B3%95%1C%E5F%09%00%0C%000%06%00%14s%2B%A6j%9A%7B%19%22%C9.5ytf%B8%BE%5B%2B%3BX%A7%40%97%B3%09%1D%E4yA%2F%26%ED%E4%01%1F%03v%3Ec%90p%BBmi%AD6%AF%E1%FB%88n.eI%0C%976%86%E2%12%12L%24%AF%10p%40%C0%7C(9%00%0C%F4%00qR%CB%A1YKoo%03%0B%C3%E4%96%092%DE%CA%26P%DC%90e%DF%BC%A9%20q%928%5E8%18%B9m%E4G%1A%DB%5B%A2F%90%A8U%8D%00%0A%8A%09P%00%1C%01%F2%F4%ED%8ANH%978%A9(%B7%AB8%CDOY%BE%D4%B4%3B%E2%93%BD%AD%C6%99%A6%DC%CDt%D6%EE%C8%1A%E0%09%A0%1B%0Erc%0D%14%CD%CE%0EDG%AE%40%D2%D6.n.%7CA%26%9D%F6-N%EA%D6%0BX%A7%DB%A7%5C%AD%BBow%91r%ECdF%20%08%F8%00%E3%96%C8%3F.6.4%EB9%12%EE%D9%ED%B7E%A9%96%17_%BC%23~c%08%7B%E7%95P%3E%5Ct%CD-%DD%85%96%AC%23iL%BB%E3%07d%90N%F0%C8%14%F5%1B%90%86%DAv%83%8C%E0%ED%07%9C%0A%AEx%89U%83%97-%F5%FF%00%86zw%DF%A1%CB%8DsS%B30%C9%23n%BA%BB%B7%9A%DD%23%99%D5%D5%25%8E%E9!%85%9CF%DBA%3Ex%F3v%FF%00s%00%0D%B8%AB%9Am%DD%CBkvZ%24%D7%12%B1%D3%BE%D1%E6K%BC%96%9Fb%C2%22%DEO%DE%CCw*%CD%C0%FD%E2%E4p9%E8%1A%CA%C4%0BQ%E5G%1A%D8%1F2%05S%B5b%F9%19%06%00%E3%1BY%86%3A~T%E6%86%DA%DE%EAk%ED%A0O%24K%1B1lnT%DE%CA98%E3%7B%9F%C7%9E%94%9C%D7a%BA%91I%B6%F69%DF%10%5D%DC%C3%FF%00%09W%95q%2C~F%86%92%C5%B5%C8%F2%DF%FD'%E6_C%F2%AF%23%9F%94zS%E6%D2%CAx%82%CFO%FE%D2%D4%CC%17V%B3%CFs%9B%C7%0D%2B%C6%F1%05%20%83%FB%B1%FB%C6%24E%B0%1E%066%8CV%BD%E5%96%9Bs%15%EC%97%08%AE%B7v%ABo%3F%EF%08%DF%17%CF%B4u%18%FB%EF%C8%C7%5E%BC%0A%B4m%A0%96%F2%2B%C2%87%CF%89%1E%24s%91%85b%A5%86%3D%CA%2F%3E%DCu%A3%9Dt%05R%12%7C%A9%EAr%B1%DEM%3E%9Fmd%ED%A8%5D%1F%B4%5E%A7%D9%ED%25%09%3C%91C9%8DI%99%9D%08%0A%0A%03%F3obT%92F%FC%B2%C6%E7PV%3A%3D%CC%8F%0A%C9%AB%7D%8C%F9wo3%C7%17%D9%04%E4%2C%CE%03%92X%1F%98%F2%03%10%A4aH%E8%A5%D0t%E9bX%FC%B9c%DB%24%92%2B%C1q%24N%0C%8C%5D%C6%F4%60%D8f9%2B%9Cd%0E8%18%AD%3E%83%0D%AE%99%3D%B6%97gn%DE%7C%C2i%E3%9Ei%17%CD%7D%A0o%F3F%E6I%01Tm%F8%24%95%CF%0Cw%0A%E6E%98%D7%D3%DD%E8W%9A%AC6W7%D3%A7%93%A7%AC1I7%9A%F1%99%AE%24%8D%F6%19%0F%2Cz%82%E4%8C%E0%1F%94%00%2F%E8%D2%5D%5B%EB%2Bf%2C%F5%0B%5B9m%E4%94%A6%A3x%93%B9%91Y%001%9F5%DF%18c%BB%3F(!1%82N%E9%B4_%0F%C5l%2F%A7%BA%86%16%92%F9%16%09%E1%135%CA%B2%26%F1%87%92A%BAF%3B%D8%12%C0aB%AE%3E%5C%9D%1B%0D%3A%D3O%DEmD%B24%A7k%CB4%EF3%E1s%80%5D%D8%B6%01%CE%06p%0B%1E94%A5%25%B1%3C%C8%C2%F1%05%DD%CC%3F%F0%95yW%12%C7%E4hi%2C%5B%5C%8F-%FF%00%D2~e%F4%3F*%F29%F9G%A5S%F1%2C%0F%A6%D9jV%A9ww2%5Dhw%F3Nn'i7%C8%820%AC%01%F9S%FDc%F0%81W%9E%9C%0CuW%1Ae%95%E8%BC3%C0%5B%ED%96%FF%00e%9F%2C%CB%BE1%BF%E5%EB%C7%DF~G%3C%F5%E9K%7D%A5Yj%3B%BE%D7%0F%99%BA%DE%5BS%F3%11%98%A4%DB%BDx%3D%F6%AF%3DF8%A1M%2B%0D4%F5G%3B%A8%DC%5D%B4%3A%DCq%DE%DCB%CB%ADYA%1C%91%BF%CD%120%B4%C8%5C%E4c%E7n%08%20%EE9%07%26%99%7Fus%A1M%A9%DAXIw*%08%EC%0Ck%24%E6y%15%E7%B8x%9C%A3J%C7%9D%A1p%18%ED%04d%8ENzW%D2%AC%A4%F3%F7%C3%9F%3E%E2%3B%A9%3Ec%F3K%1E%CD%8D%D7%8Cyi%C7N9%EAi%EF%A7%DAK5%C4%B2%C0%925%CC%2B%04%C1%FEex%D4%B1%0AT%F1%8F%9D%FBs%9EhS_%D7%C8f%1E%8D%25%D5%BE%B2%B6b%CFP%B5%B3%96%DEIJj7%89%3B%99%15%90%03%19%F3%5D%F1%86%3B%B3%F2%82%13%18%24%EE%E9j%9D%86%97k%A6%F9%86%DCJ%CF%267%C9%3C%EF3%903%81%B9%C9l%0C%9C%0C%E0%12OsVa%89%60%868%90%B9TP%A0%BB%97b%00%C7%2CI%24%FB%93%93S'v%03%E8%A2%8A%91%100%FBL%40%10%CA%8C2%19X%1E08%3DA%EA%7DG%1FJ%AD%3C%B3-%D10.%F2%F8C%D0aG%19%07%9E%8C%C7%3C%1Fp%3A%99%9C%07S*d%1C%90%7C%B1%9D%E0%E3%BF%07%A69%07%03%F0%A8diV%DB%CCYa%16%E3%86%12G%F2%14%C0%1F(%07'%9C%E0w%CF%D2%A5%9E%26.M%C5%B4%DD%D6%B7M_N%BA%D9%24%AE%D3%BD%FF%00!b%93%ED%8F4m%10)%9D%8C%C4%02T%82N9%18%20q%EB%83%EA%0Ein%20%F3%A4r%AC%CE%D9%D9%B7qP%87%0A%D9%CE%0F%3C%03%E9%F8%F5%8A%CEcp%C2%06e%05P2%AE%DETt%E0%A9%18%E3%D3%D4%11%C1%C0M%C6%7B%C8%D1%A2u%DD%9C%86%25%86%07'%B8%2B%9D%D8%C1%1F%DD%E3%B5.%87*%AD%1A%B8x%F3%7B%DC%CE%DA%FA%BD%1E%E9Z%FF%00j%F7%BE%DBZ%C3%C7%24k%B5%5D%8BHr%CC%178l%F0~%9C%8E%A7%A2%E3%9Ei%EE%0B%85%8D%D9%C4%81GG*%1C%90x%C8%FAg%81%FA%12)X%C9%1C%A8%AA%A1c%04*%AA%B0%01%BDr%08%E3%03%24c%D2%A9%AF%9F%24%F22%F9%C5%94%EDd%90%82%B9%5D%A7%20%60%0C%9E%DD3%D7%2BM%9Du%EAF%8B%E5Qn%FA%5BV%B4%ED%7D%F5%FF%00%3DV%F6%A5_%9E1%E5%90%D2%1C%BB(%2C%17%8Cu%04%60%F3%8C%FA%7B%0E%1B%2F%98%262%B3%AA%95Q%84%CE%E5%07%91%9E%99%C9%C9%03%18%CE%3A%F3D%C9%13%DC%E2m%C0%90%A1X%26%01%19%FB%A5%BB%E4%F6%3Cr%3B%D4%0A%9Bd%F3%CA%B4%40J%EC2%0E%09%2B%C1%DA%07%3F%A1%CF%1C%9E%A9%93%5En2i%7F7%7D%AD%A5%DD%BF%F0%2B%5D%5E%EF%5E%D6%96hn%03%2F%CE%F1%B6%D3%F7N9%03%8E%3E%A0%F3%EA%7D%0E*y%B2D%7C%BD%AA%F3D%C1%23%DC7%B9%DCO9%CF%1F(%CFo%C0b%A6%24%BA%B4%8C%25%90*%E4%98%81R%FC%F4%EA%08%DB%F3%7C%BE%E3%BD8D%A9%B1U6%04%8C%E2D%8F%2C%08%C08%CE%7B%0F%7C%8F%A7%26%E4%D5%F6%95%AD%2B%FC%D6%ED7%D3%A6%8FT%EFd%D7f%98%DD%CC%D6%F1%A2%B3%15p%0A%9D%8C%EA%E0%93%90%C4%E4%80F%3A%F4%F55%5E%2B%C9f%9D%BF%D0%C2%23%01%E6%E17%EE%1D%8Er20%0Fc%D3%BEj%EC08%80%24%DB%1D%D4%EEB%D9%7C%1C%7B%F3%C1%CE%3D%B1Y%B1%B0i%1E8%B6%A3%95%C2%CB%23%96%DEH%C0%3B%F3%F7%BA%F0%01%E8%C0%1EM%0C%E6%C5%FBjN%95%DD%93%E9%DE%CBn%B6%EB%B3WN%DA%B2%F3I%25%DA%A3%DB%5D%08%A3rv%B6%C0%D9%C7%B1%C1%07%AF%AF%DD%EDLB%C6V%BB%25%DA6P%AE%A8%AD%9D%C1%F00%3A%F1%CEx%19%F4%E7%14%D8%E5E%B6%9F%CD%FD%EB%96Ve%0F%BB9%C0_%BA%07%07%03%8C%1E%3E%B8%A7%EE%96%24%91%9C%C3%14%9B%15%DEO%979%CF%DD%23%3C%8E%08%04%91%D7%EAh5%F6%8A%A3U%24%DBvo%AE%8D%5D-%1B%B4v%92%B5%F5%D5J%5E%EE%B2%3CP%A4%ABs'%C8%E0%03%BANB%0C%9C%8C%E7%FD%A2%3A%E3%A7%A5!%96q%F7%A2%25%9D%89H%F7%80T%00z%91%DB%20w%FE%2C%7Dd%2C%7C%9793%AE%1422%F2%07%19%C8%C7%A1%CE1%9F%CCU4v%8E%E5%93z%89%97%18G%95%D8%1C%9E%E7'%B7%A8%EE%A7%BE)%B3z%F3T%A4%94%3D%D4%FB%5B%5E%F7%D1%A6%DAN%CA%EB%CD%3B%2BMp1%C4bh%9C%ABI%98%E3%DCA%E0%E3%3D9%23%90%3A%9E%FC%F2%F3q%B3%E4P%8D%3B%91%9D%9C%8EN%D2N9%E3%1C%93%8E%9D%BBV%F2%14%A9%F3!%11%BC%E7%CBWE%20%829R%06x%18%03%8E0G%3E%C3K%B4%BD%B4%F0%AA%C7%B4%C6%1A3%922N%40%CFN0B%8C%9E%9C%1E%CA%E7%3A%C4N%12%94%DF%BB%7D%16%FA%3E%97%D2%C9%B5%AD%F6%BB%B6%B6d%CD8%12%0F9%FE%60J%06U%20)%C1%E8%08%3F1%FCx%FF%00%7B%05%90%DE%C92%09%B7%AA%06F%0A%AC%3E%5D%D8%C89%C7%60%1B%3C%F6%ECx%A9e0%B2lc%14J2%AF%93%81%B4q%8E%A0%F4n%3A%81%9F%A5%3A%11%22%A2%15UE*B%C2%13h%CEr%09%3D%86%3D%87_%5E(%D4%D9*%CE%AD%94%FD%DD%F4%BD%FAZ%FA%A7%A7%9E%AFUgm%23_%3EL%CD%E7%5B%AC~_%FA%D49%C3%00G%B0%DA%09'%9C%FF%00%84%EF5%BC%11%A4%926%C0%17%E5g%078%E3%8C%9Es%ED%D4%E2%A9%5C%24%CF%1A%CA%F32%90%BC%E2%1C%A8%C8%C9%047%1D%F1%9C%0C%0C%82je*%F0!%92%17%9E%17!%97z%86*%BBA%F7%CF~%BC%F5%EAq%92%E2%A5%88%9C%1C%A0%96%BB%DEZ%ADz%D9%3B%A5%D3%D6%DA%BBif9KL%F1%12%84%A7'i9%00%F4%C8%FC%FB%F6%1E%BCKUm%F6%B1R'.TmV%0EHu%1D%C8%E8O%3C%91%DF%F2%ABUH%F5%B0%B3%94%E1v%FF%00%E1%BA%7D%DD%FA%EF%B3%0A(%A2%99%D0S*-%E1T(%BEX%60%AD%F2%E0%15%DB%82O%5E%3E%B8%E9%D7%D6TFy%0B6%ED%8D%F3ma%91%9E1%8C%F21%8C%E3%1DMOE%2B%1C%B1%C2%A8%BB_%DD%E8%BF%E0%F6%F2!6%B1%B4%09%0B%B4%8C%AAA%C9s%92Grh%9A%20a%C2%90%81%14%95%DA%B9*GB%00%FCx%EF%D2%A6%A2%8B%1A%3C5.V%94V%D6%F9-%BC%F4)%C2%EFu%F3%98%1A%2C%A0R%5C%90G%3C%808%ED%DF%E9%E9%C4%F1%C2%81%B7l%C1Rv%06%03%E4%18%C7%CB%E8%0E%3FZ%96%8A%2CE%2C2%8AN%A3%E6%97%7B%25%AF%7D%3F%AF%C0)%8D%1A%B2%14%60J%93%92%09%3C%F3%9F%CB%DB%F0%A7%D1L%E8qR%D1%A2%16%85%F6%95I%5B%96%C9%24%F2%BC%93%C7%F2%C1%E3%1F%91U%B7U%2Cw9%2C%A1%09-%CE%018%E7%AF~%B5-%14%ACd%B0%F4%F9%94%AD%B7%F5%FA%90%98%9AT%9E9X%ECpT%60%01%80Go%FE%BF%7C%F6%C5F%D6%F3%C9%92nY%0E%EF%E0%03%A6%E2G_l%0F%E7%9A%B5E%16%26XZr%F8%AF%F7%BF%CE%F7%D2%EE%DEL%80C%22%CA%F2%2B%A6%E7%E0%E5I%E0%7D%D1%F7%BBd%FD%7D%A9%E1%19%1C%EC%DA%15%8E%E2NI%CEy%FD8%F6%C0%EB%DAJ(%B1Q%C3%D3%8F%C3%A7_%BF%7F%BF%AF%DF%B9T%C6w4EVD%91G%9A%03%E0%F3%90N%3D%3F%1E%83%8E%95%26%04m%BF%CAb2%D9%24%EE%2B%F4%1C%F0q%D0%7Bq%E95%14X%98%E1%94uO%D3E%A6%B7%ED%7F%C7%AB%D8%A2R%EE%E1B%CF%1A%AA2%95eW%C1%04%80%09%3D%7F%DA%C7%5E%A3%D3%22T%B5%3C%3C%8E%A6Q%FF%00-%11%02%92q%80O%5C%91%93%ED%CFJ%B3E%163%86%06%9A%7C%D3nO%BB%7F%E5e%FEZ%DBvG%14B5%E3%A9%E4%E38%CEI%24%0C%F1%C95%1BI%2C%2B%92%8A%22H%8B3%17'%0C1%C6q%9Cu%E7%9F%F1%B1E%166%95%1FqF%9B%E5%B6%C6t%B6%92%C9%E5%B2%90dX%F2VL%AA%EF'%EFax%CF%DE%E8x%E2%AC%F9b!%BC%23b%05*%8A%A3%24%AE%07%1Dy%E4%7Bt%FC%ECQE%8C!%80%A5M%B9Gwo%C3o%D2%FEi%15%ED%A1*%81%9D%02%9C%E5c%CE%E1%1F%18%E0%FF%00%87%1E%9E%F6(%A2%99%D3F%94iAB%3F%D7%F5%E5%A7m%02%8A(%A0%D0%FF%D9";
var mondo_image_control = null;
var mondo_image_paramBox = null;
var limitSites = true;
var allowedSites = new Array();
allowedSites = aDefaultSites.slice(0);
var allowedExtensions = new Array();
allowedExtensions = aDefaultExtensions.slice(0);
var limitUsers = false;
var allowedUsers = new Array();
var limitText = false;
var allowedText = new Array();
var masterSwitchSet = false;
var aSearchSites = new Array();
var aSearchExtensions = new Array();
var aSearchUsers = new Array();
var aSearchText = new Array();
var aSearchBadSites = new Array();
var aSearchBadUsers = new Array();
var limitMaxWidth = defaultLimitMaxWidth;
var limitMaxHeight = defaultLimitMaxHeight;
var excludeSites = false;
var notAllowedSites = new Array();
var excludeUsers = false;
var notAllowedUsers = new Array();
var flagRestricted = false;

// ***********************************************
// Mondo Meta code
// ***********************************************

function switchSidebar(onSwitch)
{
	var xpath = "//div[@id='page']/div[@id='ajaxcontentarea']/div[@id='menu']/div[@class='sidebar']";
	var menu_div = document.evaluate(
		xpath,
		document,
		null,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
		null
	);

	if (menu_div)
	{
		var menu_node = menu_div.snapshotItem(0);
		// try to affect subscription buttons following
		var sibling = null;
		if (menu_node)
		{
			sibling = menu_node.nextSibling;
		}
		if (sibling)
		{
			if (sibling.nodeName === textNodeText)
			{
				sibling = sibling.nextSibling;
			}
			if (sibling && sibling.nodeName != "DIV")
			{
				sibling = null;
			}
		}
		if (menu_node)
		{
			menu_node.style.visibility = onSwitch ? visibleText : hiddenText;
			if (sibling)
			{
				sibling.style.visibility = onSwitch ? visibleText : hiddenText;
			}
			if (onSwitch)
			{
				menu_node.style.height = originalMenuHeight;
				if (sibling)
				{
					sibling.style.height = originalSiblingHeight;
				}
			}
			else
			{
				originalMenuHeight = menu_node.style.height;
				menu_node.style.height = "1px";
				if (sibling)
				{
					originalSiblingHeight = sibling.style.height;
					sibling.style.height = "1px";
				}
			}
		}
	}
}

function isPostFooter(node)
{
	if (!node)
	{
		return 0;
	}
	var currentNode = node;
	while (currentNode)
	{
		if (currentNode.nodeName === spanText && currentNode.getAttribute('class') === 'smallcopy')
		{
			return 1;
		}
		currentNode = currentNode.parentNode;
	}
 	return 0;
}

function escapePattern(toEscape)
{
	var needsEscaping = "\\^.*?$|([{}])";
	var afterEscape = "";
	var pos = 0;
	while (pos < toEscape.length)
	{
		var c = toEscape.charAt(pos++);
		if (needsEscaping.indexOf(c) >= 0)
		{
			afterEscape += "\\" + c;
		}
		else
		{
			afterEscape += c;
		}
	}
	return afterEscape;
}

// get free configuration value slot
function getFreeSlot()
{
	if (freeRules.length)
	{
		var slotID = freeRules.pop();
	}
	else
	{
		var slotID = "Rule" + (++storedRuleCount);
	}
	return slotID;
}

// store information to free configuration value slot
function storeInfoToSlot(infoString)
{
	var gmKey = getFreeSlot();
	var gmValue = usedRuleHeader + infoString;
	GM_setValue(gmKey, gmValue);
	return gmKey;
}

// show a slot as free
function freeSlot(ruleID)
{
	GM_setValue(ruleID, freeRuleHeader);
	freeRules.push(ruleID);
}

function expandLinks()
{
	var xpath = "//div[@class='copy' or @class='comments' or @class='comments best']//a";
	var link_anchors = document.evaluate(
		xpath,
		document,
		null,
		XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
		null
	);

	switchSidebar(expandedLinksFlag);

	for (var i = 0; i < link_anchors.snapshotLength; i++)
	{
 		var candidate = link_anchors.snapshotItem(i);
 		var href_value;
 		if ((href_value = candidate.getAttribute('href')) && !isPostFooter(candidate))
 		{
    		if (!expandedLinksFlag)
    		{
    			var expansion = " [" + href_value + "] ";
				candidate.appendChild(document.createTextNode(expansion));
			}
			else if (candidate.lastChild)
			{
				candidate.removeChild(candidate.lastChild);
			}
 		}
	}

	expandedLinksFlag ^= 1;
}

function saveDeleteItem(deleteInfo)
{
	var infoString = deleteHeader;
	for (var i = 0; i < 9; i++)
	{
		infoString += String(deleteInfo[i]).length + ":" + deleteInfo[i];
	}
	var gmKey = storeInfoToSlot(infoString);
	return gmKey;
}

function saveDelete(event)
{
	event.stopPropagation();
// userDelText, userLocated, userHow, userWhole, userCase, userLinks, userRegExp, userDuration
	mondo_meta_delete_control.style.display = noneText;
	var elem = document.getElementById("mondo_meta_delete_text");
	var userDelText = elem.value;
	elem = document.getElementById("mondo_meta_delete_located");
	var userLocated = elem.value;
	elem = document.getElementById("mondo_meta_delete_how");
	var userHow = elem.value;
	var checkNode = document.getElementById("mondo_meta_delete_wholeword");
	var userWhole = checkNode.checked;
	checkNode = document.getElementById("mondo_meta_delete_matchcase");
	var userCase =  checkNode.checked;
	checkNode = document.getElementById("mondo_meta_delete_matchlinks");
	var userLinks =  checkNode.checked;
	checkNode = document.getElementById("mondo_meta_delete_regexp");
	var userRegExp =  checkNode.checked;
	elem = document.getElementById("mondo_meta_delete_duration");
	var userDuration = elem.value;
	var rightNow = new Date();

	aDeleteInfo.push([
		userDelText,
		userLocated,
		userHow,
		userWhole,
		userCase,
		userLinks,
		userRegExp,
		userDuration,
		rightNow.getTime()]);
	nodeBreaker(flagDelete, aDeleteInfo.length - 1);
	var gmKey = saveDeleteItem(aDeleteInfo[aDeleteInfo.length - 1]);
	aDeleteInfo[aDeleteInfo.length - 1][9] = gmKey;

	boxUp = 0;
}

function cancelDelete(event)
{
	event.stopPropagation();
	boxUp = 0;
	mondo_meta_delete_control.style.display = noneText;
}

function saveTagItem(tagInfo)
{
	var infoString = tagHeader;
	for (var i = 0; i < tagInfo.length; i++)
	{
		infoString += String(tagInfo[i]).length + ":" + tagInfo[i];
	}
	var gmKey = storeInfoToSlot(infoString);
	return gmKey;
}

function saveTag(event)
{
	event.stopPropagation();
// userTagText, userLocated, userTagTags, userWhole, userCase, userRegExp,
	mondo_meta_tag_control.style.display = noneText;
	var elem = document.getElementById("mondo_meta_tag_text");
	var userTagText = elem.value;
	elem = document.getElementById("mondo_meta_tag_located");
	var userLocated = elem.value;
	elem = document.getElementById("mondo_meta_tag_tags");
	var userTagTags = elem.value;
	var checkNode = document.getElementById("mondo_meta_tag_wholeword");
	var userWhole = checkNode.checked;
	checkNode = document.getElementById("mondo_meta_tag_matchcase");
	var userCase =  checkNode.checked;
	checkNode = document.getElementById("mondo_meta_tag_regexp");
	var userRegExp =  checkNode.checked;
	var rightNow = new Date();

	aTagInfo.push([
		userTagText,
		userLocated,
		userTagTags,
		userWhole,
		userCase,
		userRegExp,
		rightNow.getTime()]);
	nodeBreaker(flagTag, aTagInfo.length - 1);
	var gmKey = saveTagItem(aTagInfo[aTagInfo.length - 1]);
	aTagInfo[aTagInfo.length - 1][aTagInfo[aTagInfo.length - 1].length] = gmKey;

	boxUp = 0;
}

function cancelTag(event)
{
	event.stopPropagation();
	boxUp = 0;
	mondo_meta_tag_control.style.display = noneText;
}

function saveStyleItem(styleInfo)
{
	var infoString = styleHeader;
	for (var i = 0; i < styleInfo.length; i++)
	{
		infoString += String(styleInfo[i]).length + ":" + styleInfo[i];
	}
	var gmKey = storeInfoToSlot(infoString);
	return gmKey;
}

function saveStyle(event)
{
	event.stopPropagation();
// userStyleText, userLocated, userStyleStyles, userWhole, userCase, userRegExp,
	mondo_meta_style_control.style.display = noneText;
	var elem = document.getElementById("mondo_meta_style_text");
	var userStyleText = elem.value;
	elem = document.getElementById("mondo_meta_style_located");
	var userLocated = elem.value;
	elem = document.getElementById("mondo_meta_style_styles");
	var userStyleStyles = elem.value;
	var checkNode = document.getElementById("mondo_meta_style_wholeword");
	var userWhole = checkNode.checked;
	checkNode = document.getElementById("mondo_meta_style_matchcase");
	var userCase =  checkNode.checked;
	checkNode = document.getElementById("mondo_meta_style_regexp");
	var userRegExp =  checkNode.checked;
	var rightNow = new Date();

	aStyleInfo.push([
		userStyleText,
		userLocated,
		userStyleStyles,
		userWhole,
		userCase,
		userRegExp,
		false,
		rightNow.getTime()]);
	nodeBreaker(flagStyle, aStyleInfo.length - 1);
	var gmKey = saveStyleItem(aStyleInfo[aStyleInfo.length - 1]);
	aStyleInfo[aStyleInfo.length - 1][aStyleInfo[aStyleInfo.length - 1].length] = gmKey;

	boxUp = 0;
}

function cancelStyle(event)
{
	event.stopPropagation();
	boxUp = 0;
	mondo_meta_style_control.style.display = noneText;
}

function saveHighlightItem(highlightInfo)
{
	var infoString = highlightHeader;
	for (var i = 0; i < 11; i++)
	{
		infoString += String(highlightInfo[i]).length + ":" + highlightInfo[i];
	}
	var gmKey = storeInfoToSlot(infoString);
	return gmKey;
}

function d2h(decNum)
{
	var hexDigits="0123456789ABCDEF";
	var hexNum = hexDigits.substr(decNum & 15, 1);
	decNum >>= 4;
	hexNum = hexDigits.substr(decNum & 15, 1) + hexNum;
	return hexNum;
}

function processRGBvalue(rgbString)
{
	var result;
	if (result = rgbString.match(/[ ;.,-]*(\d{1,3})[ ;.,-]+(\d{1,3})[ ;.,-]+(\d{1,3})/))
	{
		// 3 sets of digits, change to #xxxxxx hexadecimal
		var ret = "#";
		ret += d2h(result[1]);
		ret += d2h(result[2]);
		ret += d2h(result[3]);
		return ret;
	}
	else if (result = rgbString.match(/\s*(#([0-9a-fA-F]{6}))/))
	{
		// already #xxxxxx hexadecimal, use it
		return result[1];
	}
	return "";
}

function deleteTransform(
	candidate,
	doAllFlag,
	doValue,
	spanFooterStore,
	boldFooterStore,
	anchorStore,
	textAllNodeStore,
	textContentNodeStore,
	textFooterNodeStore)
{
	if (deactivateDeleteFlag)
	{
		return;
	}
	if (candidate.getAttribute(mmDeleteAttribText))
	{
		// entire message already processed for deleting
		return;
	}

	if (doAllFlag)
	{
		var start = 0;
		var end = aDeleteInfo.length;
	}
	else
	{
		var start = doValue;
		var end = start + 1;
	}

	// peek at the delete conditions to see if we need to check all three types of targets
	// set up only search targets that are needed
	var searchTargetAll = "";
	var searchTargetContent = "";
	var searchTargetFooter = "";
	var useAll, useContent, useFooter;
	for (var loop = start; loop < end; loop++)
	{
		var requestContent = (aDeleteInfo[loop][1].indexOf(contentText) >= 0 ? true: false);
		var requestFooter = (aDeleteInfo[loop][1].indexOf(footerText) >= 0 ? true: false);
		if (requestContent && requestFooter)
		{
			useAll = true;
		}
		else if (requestContent)
		{
			useContent = true;
		}
		else if (requestFooter)
		{
			useFooter = true;
		}
	}
	var textValStore = new Array();
	if (useAll)
	{
		// no destructive popping of array
		for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
		{
			var aNode = textAllNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetAll = textValStore.join('');
		textValStore.length = 0;
	}
	if (useContent)
	{
		for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
		{
			var aNode = textContentNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetContent = textValStore.join('');
		textValStore.length = 0;
	}
	if (useFooter)
	{
		for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
		{
			var aNode = textFooterNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetFooter = textValStore.join('');
	}
	var hrefValueStore = new Array();
	for (var aLoop = 0; aLoop < anchorStore.length; aLoop++)
	{
		var aNode = anchorStore[aLoop];
		hrefValueStore.push(aNode.getAttribute('href'));
	}
	var hrefText = hrefValueStore.join(" ");

	for (var loop = start; loop < end; loop++)
	{
		// set test conditions
		// userHiText, userLocated, userArea, userFg, userBg, userFrgb, userBrgb,
		//  userWhole, userCase, userRegExp
		if (!aDeleteInfo[loop][0])
		{
			continue;
		}

		if (aDeleteInfo[loop][6] === false)
		{
			requestText = escapePattern(aDeleteInfo[loop][0]);
			if (aDeleteInfo[loop][3] === true)
			{
				// wrap pattern in \b for whole word
				requestText = "\\b" + requestText + "\\b";
			}
		}
		else
		{
			// direct RegExp specified
			requestText = aDeleteInfo[loop][0];
		}
		if (aDeleteInfo[loop][4] === false)
		{
			var requestPattern = new RegExp(requestText, "i");		// ignore case
		}
		else
		{
			var requestPattern = new RegExp(requestText);
		}

		// restrict searches for this rule to appropriate content/footer location
		var restrictSearchTargetAll = "";
		var restrictSearchTargetContent = "";
		var restrictSearchTargetFooter = "";
		if (aDeleteInfo[loop][1] === contentText)
		{
			restrictSearchTargetContent = searchTargetContent;
		}
		else if (aDeleteInfo[loop][1] === footerText)
		{
			restrictSearchTargetFooter = searchTargetFooter;
		}
		else
		{
			restrictSearchTargetAll = searchTargetAll;
		}

		var requestLinks = aDeleteInfo[loop][5];
		if (requestLinks)
		{
			if (restrictSearchTargetAll.length)
			{
				restrictSearchTargetAll = searchTargetAll + " " + hrefText;
			}
			if (restrictSearchTargetContent.length)
			{
				restrictSearchTargetContent = searchTargetContent + " " + hrefText;
			}
		}

		// search as appropriate
		if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
			(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
			(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
		{
			// delete filter this post

			var requestHow = aDeleteInfo[loop][2];
			candidate.setAttribute(mmDeleteAttribText, "on");
			switch (requestHow)
			{
				case invisibleText:
					candidate.style.visibility = hiddenText;
					break;
				case fg_bgText:
					var backgroundColor = null;
					if (candidate.style)
					{
						backgroundColor = document.defaultView.getComputedStyle(candidate, null).getPropertyValue("background-color");
					}
					var aNode = candidate;
					while (aNode && (!backgroundColor || backgroundColor === "transparent"))
					{
						aNode = aNode.parentNode;
						if (aNode && aNode.style)
						{
							backgroundColor = document.defaultView.getComputedStyle(aNode, null).getPropertyValue("background-color");
						}
					}
					if (!backgroundColor || backgroundColor === "transparent")
					{
						// hard-code and hope
						var newColor = "#006699";
					}
					else
					{
						var newColor = backgroundColor;
					}
					candidate.style.color = newColor;
					// no destructive popping of anchorStore array
					for (var aLoop = 0; aLoop < anchorStore.length; aLoop++)
					{
						var aNode = anchorStore[aLoop];
						aNode.style.color = newColor;
					}
					for (var aLoop = 0; aLoop < spanFooterStore.length; aLoop++)
					{
						var aNode = spanFooterStore[aLoop];
						aNode.style.color = newColor;
					}
					for (var aLoop = 0; aLoop < boldFooterStore.length; aLoop++)
					{
						var aNode = boldFooterStore[aLoop];
						aNode.style.color = newColor;
					}
					break;
				default:	// remove
					candidate.style.display = noneText;
					var followNode = candidate.nextSibling;
					// remove following BR if present
					while (followNode)
					{
						if (followNode.nodeName === "BR")
						{
							var removeNode = followNode;
							followNode = followNode.nextSibling;
							var parentNode = removeNode.parentNode;
							parentNode.removeChild(removeNode);
						}
						else if (followNode.nodeName != textNodeText)
						{
							break;
						}
						else
						{
							followNode = followNode.nextSibling;
						}
					}
					break;
			}
		}
	}

}

function tagTransform(
	candidate,
	doAllFlag,
	doValue,
	spanFooterStore,
	textAllNodeStore,
	textContentNodeStore,
	textFooterNodeStore)
{
	if (deactivateTagFlag)
	{
		return;
	}
	if (candidate.getAttribute(mmDeleteAttribText))
	{
		return;
	}
	if (doAllFlag)
	{
		var start = 0;
		var end = aTagInfo.length;
	}
	else
	{
		var start = doValue;
		var end = start + 1;
	}

	var tInfo = {
		tagText : 0,
		locatedIn : 1,
		tagTags : 2,
		wholeWord : 3,
		caseSensitive : 4,
		useRegExp : 5
	};
	var searchTargetAll = "";
	var searchTargetContent = "";
	var searchTargetFooter = "";
	var useAll, useContent, useFooter;
	for (var loop = start; loop < end; loop++)
	{
		var requestLocContent = (aTagInfo[loop][tInfo.locatedIn].indexOf(contentText) >= 0 ? true: false);
		var requestLocFooter = (aTagInfo[loop][tInfo.locatedIn].indexOf(footerText) >= 0 ? true: false);
		if (requestLocContent && requestLocFooter)
		{
			useAll = true;
		}
		else if (requestLocContent)
		{
			useContent = true;
		}
		else if (requestLocFooter)
		{
			useFooter = true;
		}
	}
	var textValStore = new Array();
	if (useAll)
	{
		for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
		{
			var aNode = textAllNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetAll = textValStore.join('');
		textValStore.length = 0;
	}
	if (useContent)
	{
		for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
		{
			var aNode = textContentNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetContent = textValStore.join('');
		textValStore.length = 0;
	}
	if (useFooter)
	{
		for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
		{
			var aNode = textFooterNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetFooter = textValStore.join('');
	}

	for (var loop = start; loop < end; loop++)
	{
		if (!aTagInfo[loop][tInfo.tagText])
		{
			continue;
		}
		var restrictSearchTargetAll = "";
		var restrictSearchTargetContent = "";
		var restrictSearchTargetFooter = "";
		if (aTagInfo[loop][tInfo.locatedIn] === contentText)
		{
			restrictSearchTargetContent = searchTargetContent;
		}
		else if (aTagInfo[loop][tInfo.locatedIn] === footerText)
		{
			restrictSearchTargetFooter = searchTargetFooter;
		}
		else
		{
			restrictSearchTargetAll = searchTargetAll;
		}

		if (aTagInfo[loop][tInfo.useRegExp] == false)
		{
			var requestText = escapePattern(aTagInfo[loop][0]);
			if (aTagInfo[loop][tInfo.wholeWord] == true)
			{
				requestText = "\\b" + requestText + "\\b";
			}
		}
		else
		{
			var requestText = aTagInfo[loop][0];
		}
		if (aTagInfo[loop][tInfo.caseSensitive] == false)
		{
			var requestPattern = new RegExp(requestText, "i");
		}
		else
		{
			var requestPattern = new RegExp(requestText);
		}

		if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
			(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
			(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
		{
			// tag this post
			if (textFooterNodeStore.length)
			{
				var leadingNode = textFooterNodeStore[0];
				// look for 'posted by'
				var testNode = spanFooterStore[0];
				while (testNode)
				{
					var childNode = testNode.firstChild;
					var bFound = false;
					while (childNode)
					{
						if (childNode.nodeName === textNodeText && childNode.nodeValue.search('posted by') >= 0)
						{
							leadingNode = childNode;
							bFound = true;
							break;
						}
						childNode = childNode.nextSibling;
					}
					if (bFound)
					{
						break;
					}
					testNode = testNode.nextSibling;
				}

				var newSpanNode = document.createElement(spanText);
				newSpanNode.className = mmTagClassText;
				var backgroundColor = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("background-color");
				if (!backgroundColor || backgroundColor === "transparent")
				{
					var newColor = "#000000";
				}
				else
				{
					var newColor = backgroundColor;
				}
				var foregroundColor = document.defaultView.getComputedStyle(document.body, null).getPropertyValue("color");
				if (!foregroundColor || foregroundColor === "transparent")
				{
					var newBackColor = "#FFFFFF";
				}
				else
				{
					var newBackColor = foregroundColor;
				}
				newSpanNode.style.backgroundColor = newBackColor;
				newSpanNode.style.color = newColor;
				var tNode = document.createTextNode("\u00a0"+aTagInfo[loop][tInfo.tagTags]+"\u00a0");
				newSpanNode.appendChild(tNode);
				leadingNode.parentNode.insertBefore(newSpanNode,leadingNode);
				tNode = document.createTextNode("\u00a0");
				var spacerSpanNode = document.createElement(spanText);
				spacerSpanNode.style.backgroundColor = newColor;
				spacerSpanNode.style.color = newBackColor;
				spacerSpanNode.appendChild(tNode);
				newSpanNode.parentNode.insertBefore(spacerSpanNode,newSpanNode.nextSibling);
			}
		}
	}
}

function highlightTransform(
	candidate,
	doAllFlag,
	doValue,
	spanFooterStore,
	textAllNodeStore,
	textContentNodeStore,
	textFooterNodeStore)
{
	if (deactivateHighlightFlag)
	{
		return;
	}
	if (candidate.getAttribute(mmDeleteAttribText))
	{
		// entire message already processed for deleting
		return;
	}
	if (candidate.getAttribute(mmHighlightAttribText))
	{
		// entire message already processed for highlighting
		return;
	}

	if (doAllFlag)
	{
		var start = 0;
		var end = aHighlightInfo.length;
	}
	else
	{
		var start = doValue;
		var end = start + 1;
	}

	// peek at the highlight conditions to see if we need to check all three types of targets
	// set up only search targets that are needed
	var searchTargetAll = "";
	var searchTargetContent = "";
	var searchTargetFooter = "";
	var useAll, useContent, useFooter;
	for (var loop = start; loop < end; loop++)
	{
		var requestLocContent = (aHighlightInfo[loop][1].indexOf(contentText) >= 0 ? true: false);
		var requestLocFooter = (aHighlightInfo[loop][1].indexOf(footerText) >= 0 ? true: false);
		if (requestLocContent && requestLocFooter)
		{
			useAll = true;
		}
		else if (requestLocContent)
		{
			useContent = true;
		}
		else if (requestLocFooter)
		{
			useFooter = true;
		}
	}
	var textValStore = new Array();
	if (useAll)
	{
		// no destructive popping of array
		for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
		{
			var aNode = textAllNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetAll = textValStore.join('');
		textValStore.length = 0;
	}
	if (useContent)
	{
		for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
		{
			var aNode = textContentNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetContent = textValStore.join('');
		textValStore.length = 0;
	}
	if (useFooter)
	{
		for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
		{
			var aNode = textFooterNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetFooter = textValStore.join('');
	}

	for (var loop = start; loop < end; loop++)
	{
		// set test conditions
		if (!aHighlightInfo[loop][0])
		{
			continue;
		}

		// restrict searches for this rule to appropriate content/footer location
		var restrictSearchTargetAll = "";
		var restrictSearchTargetContent = "";
		var restrictSearchTargetFooter = "";
		if (aHighlightInfo[loop][1] === contentText)
		{
			restrictSearchTargetContent = searchTargetContent;
		}
		else if (aHighlightInfo[loop][1] === footerText)
		{
			restrictSearchTargetFooter = searchTargetFooter;
		}
		else
		{
			restrictSearchTargetAll = searchTargetAll;
		}

		if (aHighlightInfo[loop][9] == false)
		{
			var requestText = escapePattern(aHighlightInfo[loop][0]);
			if (aHighlightInfo[loop][7] == true)
			{
				// wrap pattern in \b for whole word
				requestText = "\\b" + requestText + "\\b";
			}
		}
		else
		{
			// direct RegExp specified
			var requestText = aHighlightInfo[loop][0];
		}
		if (aHighlightInfo[loop][8] == false)
		{
			var requestPattern = new RegExp(requestText, "i");		// ignore case
		}
		else
		{
			var requestPattern = new RegExp(requestText);
		}

		// search as appropriate
		if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
			(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
			(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
		{
			// highlight this post

			var requestHiEntire = (aHighlightInfo[loop][2].indexOf("Entire") >= 0 ? true: false);
			var requestHiFooter = (aHighlightInfo[loop][2].indexOf(footerText) >= 0 ? true: false);
			var requestForeground = null;
			if (aHighlightInfo[loop][3].indexOf(customText) >= 0)
			{
				// get rgb color, if valid
				var result = processRGBvalue(aHighlightInfo[loop][5]);
				if (result.length)
				{
					requestForeground = result;
				}
			}
			else if (aHighlightInfo[loop][3].indexOf(unchangedText) < 0)
			{
				requestForeground = aHighlightInfo[loop][3];
			}
			var requestBackground = null;
			if (aHighlightInfo[loop][4].indexOf(customText) >= 0)
			{
				var result = processRGBvalue(aHighlightInfo[loop][6]);
				if (result.length)
				{
					requestBackground = result;
				}
			}
			else if (aHighlightInfo[loop][4].indexOf(unchangedText) < 0)
			{
				requestBackground = aHighlightInfo[loop][4];
			}

			if (requestHiEntire)
			{
				candidate.setAttribute(mmHighlightAttribText, "on");
				if (requestForeground)
				{
					candidate.style.color = requestForeground;
				}
				if (requestBackground)
				{
					candidate.style.backgroundColor = requestBackground;
				}
			}
			else if (requestHiFooter && spanFooterStore)
			{
				for (var aLoop = 0; aLoop < spanFooterStore.length; aLoop++)
				{
					var aNode = spanFooterStore[aLoop];
					if (aNode.getAttribute(mmHighlightAttribText))
					{
						// message already processed for highlighting
						continue;
					}
					aNode.setAttribute(mmHighlightAttribText, "on");
					if (requestForeground)
					{
						aNode.style.color = requestForeground;
					}
					if (requestBackground)
					{
						aNode.style.backgroundColor = requestBackground;
					}
				}
			}
		}
	}
}

function styleTransform(
	candidate,
	doAllFlag,
	doValue,
	spanFooterStore,
	textAllNodeStore,
	textContentNodeStore,
	textFooterNodeStore)
{
	if (deactivateStyleFlag)
	{
		return;
	}
	if (candidate.getAttribute(mmDeleteAttribText))
	{
		return;
	}
	if (doAllFlag)
	{
		var start = 0;
		var end = aStyleInfo.length;
	}
	else
	{
		var start = doValue;
		var end = start + 1;
	}

	var sInfo = {
		styleText : 0,
		locatedIn : 1,
		styleStyles : 2,
		wholeWord : 3,
		caseSensitive : 4,
		useRegExp : 5,
		styleUsed : 6,
		ruleDate : 7,
		ruleID : 8
	};
	var searchTargetAll = "";
	var searchTargetContent = "";
	var searchTargetFooter = "";
	var useAll, useContent, useFooter;
	for (var loop = start; loop < end; loop++)
	{
		var requestLocContent = (aStyleInfo[loop][sInfo.locatedIn].indexOf(contentText) >= 0 ? true: false);
		var requestLocFooter = (aStyleInfo[loop][sInfo.locatedIn].indexOf(footerText) >= 0 ? true: false);
		if (requestLocContent && requestLocFooter)
		{
			useAll = true;
		}
		else if (requestLocContent)
		{
			useContent = true;
		}
		else if (requestLocFooter)
		{
			useFooter = true;
		}
	}
	var textValStore = new Array();
	if (useAll)
	{
		for (var aLoop = 0; aLoop < textAllNodeStore.length; aLoop++)
		{
			var aNode = textAllNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetAll = textValStore.join('');
		textValStore.length = 0;
	}
	if (useContent)
	{
		for (var aLoop = 0; aLoop < textContentNodeStore.length; aLoop++)
		{
			var aNode = textContentNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetContent = textValStore.join('');
		textValStore.length = 0;
	}
	if (useFooter)
	{
		for (var aLoop = 0; aLoop < textFooterNodeStore.length; aLoop++)
		{
			var aNode = textFooterNodeStore[aLoop];
			if (aNode.nodeValue)
			{
				textValStore.push(aNode.nodeValue);
			}
		}
		searchTargetFooter = textValStore.join('');
	}

	for (var loop = start; loop < end; loop++)
	{
		if (!aStyleInfo[loop][sInfo.styleText])
		{
			continue;
		}
		var restrictSearchTargetAll = "";
		var restrictSearchTargetContent = "";
		var restrictSearchTargetFooter = "";
		if (aStyleInfo[loop][sInfo.locatedIn] === contentText)
		{
			restrictSearchTargetContent = searchTargetContent;
		}
		else if (aStyleInfo[loop][sInfo.locatedIn] === footerText)
		{
			restrictSearchTargetFooter = searchTargetFooter;
		}
		else
		{
			restrictSearchTargetAll = searchTargetAll;
		}

		if (aStyleInfo[loop][sInfo.useRegExp] == false)
		{
			var requestText = escapePattern(aStyleInfo[loop][0]);
			if (aStyleInfo[loop][sInfo.wholeWord] == true)
			{
				requestText = "\\b" + requestText + "\\b";
			}
		}
		else
		{
			var requestText = aStyleInfo[loop][0];
		}
		if (aStyleInfo[loop][sInfo.caseSensitive] == false)
		{
			var requestPattern = new RegExp(requestText, "i");
		}
		else
		{
			var requestPattern = new RegExp(requestText);
		}

		if ((restrictSearchTargetAll.length && requestPattern.test(restrictSearchTargetAll)) ||
			(restrictSearchTargetContent.length && requestPattern.test(restrictSearchTargetContent)) ||
			(restrictSearchTargetFooter.length && requestPattern.test(restrictSearchTargetFooter)))
		{
			// style this post
			if (!aStyleInfo[loop][sInfo.styleUsed])
			{
				// first time style is used, add it
				var userStyle = document.createElement("style");
				userStyle.setAttribute('type', 'text/css');
				var modStyle = aStyleInfo[loop][sInfo.styleStyles];
				modStyle = modStyle.replace(/\b(mmStyledPost)\b/,"$1"+aStyleInfo[loop][sInfo.ruleID]);
				userStyle.innerHTML = modStyle;
				document.getElementsByTagName('head')[0].appendChild(userStyle);
				aStyleInfo[loop][sInfo.styleUsed] = true;
			}
			candidate.setAttribute(mmStyledPostAttribText + aStyleInfo[loop][sInfo.ruleID], "on");
		}
	}
}

function nodeBreaker(flags, singleValue)
{
	var xpath = "//div[@class='copy' or @class='comments' or @class='comments best']";
	var divNodes = document.evaluate(
		xpath,
		document,
		null,
		XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,
		null
	);

	var countTo = divNodes.snapshotLength;
	var spanFooterStore = new Array();
	var boldFooterStore = new Array();
	var anchorStore = new Array();
	var textAllNodeStore = new Array();
	var textFooterNodeStore = new Array();
	var textContentNodeStore = new Array();
	var parentNodeStore = new Array();
	var footerStatusStore = new Array();
	for (var i = 0; i < countTo; i++)
	{
		var candidate = divNodes.snapshotItem(i);
 		if (!candidate)
 		{
	 		break;
 		}
		spanFooterStore.length = 0;
		boldFooterStore.length = 0;
		anchorStore.length = 0;
		textAllNodeStore.length = 0;
		textFooterNodeStore.length = 0;
		textContentNodeStore.length = 0;
		parentNodeStore.length = 0;
		footerStatusStore.length = 0;
		footerStatus = 0;
		currentNode = candidate;
		var looking = true;
		while (looking)
		{
			// track multiple SPAN's since "more inside" is also smallcopy (and therefore a footer for now)
			if (currentNode.nodeName === spanText &&
				currentNode.getAttribute('class') === "smallcopy")
			{
				footerStatus = true;
		 		spanFooterStore.push(currentNode);
		 		// track footer bolds for FG = BG delete filter, since they need explicit color setting
		 		var cNode = currentNode.firstChild;
		 		while (cNode)
		 		{
			 		if (cNode.nodeName === "B")
			 		{
				 		boldFooterStore.push(cNode);
			 		}
			 		cNode = cNode.nextSibling;
		 		}
			}
	 		else if (currentNode.nodeName === "A")
	 		{
 				anchorStore.push(currentNode);
	 		}
			else if (currentNode.nodeName === textNodeText && currentNode.nodeValue)
			{
				textAllNodeStore.push(currentNode);
				if (footerStatus)
				{
					textFooterNodeStore.push(currentNode);
				}
				else
				{
					textContentNodeStore.push(currentNode);
				}
			}
			if (currentNode.childNodes.length)
			{
				// child exists, save state info for this node level
				parentNodeStore.push(currentNode);
				footerStatusStore.push(footerStatus);
				currentNode = currentNode.firstChild;
			}
			else	// next sibling
			{
				while (1)
				{
					if (currentNode == candidate || !currentNode)
					{
						// done
						looking = false;
						break;
					}
					if (currentNode = currentNode.nextSibling)
					{
						// valid node assignment
						break;
					}
					currentNode = parentNodeStore.pop();
					footerStatus = footerStatusStore.pop();
				}
			}
		}
		if (flags & flagMultiple)
		{
			deleteTransform(
				candidate,
				true,
				0,
				spanFooterStore,
				boldFooterStore,
				anchorStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);

			tagTransform(
				candidate,
				true,
				0,
				spanFooterStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);

			highlightTransform(
				candidate,
				true,
				0,
				spanFooterStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);

			styleTransform(
				candidate,
				true,
				0,
				spanFooterStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);

		}
		else if (flags & flagHighlight)
		{
			highlightTransform(
				candidate,
				false,
				singleValue,
				spanFooterStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);
		}
		else if (flags & flagDelete)
		{
			deleteTransform(
				candidate,
				false,
				singleValue,
				spanFooterStore,
				boldFooterStore,
				anchorStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);
		}
		else if (flags & flagTag)
		{
			tagTransform(
				candidate,
				false,
				singleValue,
				spanFooterStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);
		}
		else if (flags && flagStyle)
		{
			styleTransform(
				candidate,
				false,
				singleValue,
				spanFooterStore,
				textAllNodeStore,
				textContentNodeStore,
				textFooterNodeStore);
		}
	}
}

function saveHighlight(event)
{
	event.stopPropagation();
	mondo_meta_highlight_control.style.display = noneText;
	var elem = document.getElementById("mondo_meta_highlight_text");
	var userHiText = elem.value;
	elem = document.getElementById("mondo_meta_highlight_located");
	var userLocated = elem.value;
	elem = document.getElementById("mondo_meta_highlight_area");
	var userArea = elem.value;
	elem = document.getElementById("mondo_meta_highlight_fgcolor");
	var userfgColor = elem.value;
	elem = document.getElementById("mondo_meta_highlight_bgcolor");
	var userbgColor = elem.value;
	elem = document.getElementById("mondo_meta_highlight_fgRGB");
	var userfgRGB = elem.value;
	elem = document.getElementById("mondo_meta_highlight_bgRGB");
	var userbgRGB = elem.value;
	var checkNode = document.getElementById("mondo_meta_highlight_wholeword");
	var userWhole = checkNode.checked;
	checkNode = document.getElementById("mondo_meta_highlight_matchcase");
	var userCase =  checkNode.checked;
	checkNode = document.getElementById("mondo_meta_highlight_regexp");
	var userRegExp =  checkNode.checked;
	var rightNow = new Date();

	aHighlightInfo.push([
		userHiText,
		userLocated, userArea,
		userfgColor, userbgColor,
		userfgRGB, userbgRGB,
		userWhole, userCase, userRegExp,
		rightNow.getTime()]);
	nodeBreaker(flagHighlight, aHighlightInfo.length - 1);
	var gmKey = saveHighlightItem(aHighlightInfo[aHighlightInfo.length - 1]);
	aHighlightInfo[aHighlightInfo.length - 1][11] = gmKey;

	boxUp = 0;
}

function cancelHighlight(event)
{
	event.stopPropagation();
	boxUp = 0;
	mondo_meta_highlight_control.style.display = noneText;
}

function changeFgHighlight(event)
{
	event.stopPropagation();
	var sNode = document.getElementById( "mondo_meta_highlight_fgcolor");
	var iNode = document.getElementById( "mondo_meta_highlight_fgRGB");
	if (sNode.value === customText)
	{
		iNode.disabled = false;
		iNode.style.backgroundColor = whiteText;
		iNode.focus();
	}
	else
	{
		iNode.disabled = true;
		iNode.style.backgroundColor = "gray";
	}
}

function changeBgHighlight(event)
{
	event.stopPropagation();
	var sNode = document.getElementById( "mondo_meta_highlight_bgcolor");
	var iNode = document.getElementById( "mondo_meta_highlight_bgRGB");
	if (sNode.value === customText)
	{
		iNode.disabled = false;
		iNode.style.backgroundColor = whiteText;
		iNode.focus();
	}
	else
	{
		iNode.disabled = true;
		iNode.style.backgroundColor = "gray";
	}
}

// whichType == 1 for delete, 2 for tag, 3 for highlight, 4 for style
function showRuleInfo(ruleNumber, whichType)
{
	var rNode = document.getElementById( "mondo_meta_rulehead");
	var tNode = rNode.firstChild;
	if (!ruleNumber)
	{
		tNode.nodeValue = "Saved Rule 0 of 0";
		var aNode = document.getElementById( "mondo_meta_ruletext");
		aNode.style.visibility = hiddenText;
		aNode = document.getElementById( "mondo_meta_mantext");
		aNode.style.visibility = hiddenText;
	}
	else
	{
		switch (whichType)
		{
			case 1:
				var trueRuleNumber = ruleNumber;
				break;
			case 2:
				var trueRuleNumber = aDeleteInfo.length + ruleNumber;
				break;
			case 3:
				var trueRuleNumber = aTagInfo.length + aDeleteInfo.length + ruleNumber;
				break;
			case 4:
				var trueRuleNumber = aHighlightInfo.length + aTagInfo.length + aDeleteInfo.length + ruleNumber;
				break;
		}
		var ruleHead = "Saved Rule " + trueRuleNumber + " of " + (aDeleteInfo.length + aHighlightInfo.length + aTagInfo.length + aStyleInfo.length);
		tNode.nodeValue = ruleHead;
		var aNode = document.getElementById( "mondo_meta_mantext");
		tNode = aNode.firstChild;
		switch (whichType)
		{
			case 1:
				tNode.nodeValue = "Delete Text:";
				break;
			case 2:
				tNode.nodeValue = "Tag Text:";
				break;
			case 3:
				tNode.nodeValue = "Highlight Text:";
				break;
			case 4:
				tNode.nodeValue = "Style Text:";
				break;
		}
		aNode.style.fontWeight = "bold";
		aNode.style.visibility = visibleText;
		aNode = document.getElementById( "mondo_meta_ruletext");
		switch (whichType)
		{
			case 1:
				aNode.value = aDeleteInfo[ruleNumber - 1][0];
				break;
			case 2:
				aNode.value = aTagInfo[ruleNumber - 1][0];
				break;
			case 3:
				aNode.value = aHighlightInfo[ruleNumber - 1][0];
				break;
			case 4:
				aNode.value = aStyleInfo[ruleNumber - 1][0];
				break;
		}
		aNode.style.visibility = visibleText;
	}
	currentRuleNumber = ruleNumber;
	currentRuleType = whichType;
}

// currentRuleType == 1 for delete, 2 for tag, 3 for highlight, 4 for style
function prevManage(event)
{
	event.stopPropagation();
	if (!currentRuleNumber || !currentRuleType)
	{
		return;
	}
	if (currentRuleNumber > 1)
	{
		showRuleInfo(currentRuleNumber - 1, currentRuleType);
		return;
	}

	if (currentRuleType == 1)	// delete
	{
		if (aStyleInfo.length)
		{
			showRuleInfo(aStyleInfo.length, 4);
		}
		else if (aHighlightInfo.length)
		{
			showRuleInfo(aHighlightInfo.length, 3);
		}
		else if (aTagInfo.length)
		{
			showRuleInfo(aTagInfo.length, 2);
		}
		else
		{
			showRuleInfo(aDeleteInfo.length, 1);
		}
	}
	else if (currentRuleType == 2)	// tag
	{
		if (aDeleteInfo.length)
		{
			showRuleInfo(aDeleteInfo.length, 1);
		}
		else if (aStyleInfo.length)
		{
			showRuleInfo(aStyleInfo.length, 4);
		}
		else if (aHighlightInfo.length)
		{
			showRuleInfo(aHighlightInfo.length, 3);
		}
		else
		{
			showRuleInfo(aTagInfo.length, 2);
		}
	}
	else if (currentRuleType == 3)	// highlight
	{
		if (aTagInfo.length)
		{
			showRuleInfo(aTagInfo.length, 2);
		}
		else if (aDeleteInfo.length)
		{
			showRuleInfo(aDeleteInfo.length, 1);
		}
		else if (aStyleInfo.length)
		{
			showRuleInfo(aStyleInfo.length, 4);
		}
		else
		{
			showRuleInfo(aHighlightInfo.length, 3);
		}
	}
	else if (currentRuleType == 4)	// style
	{
		if (aHighlightInfo.length)
		{
			showRuleInfo(aHighlightInfo.length, 3);
		}
		else if (aTagInfo.length)
		{
			showRuleInfo(aTagInfo.length, 2);
		}
		else if (aDeleteInfo.length)
		{
			showRuleInfo(aDeleteInfo.length, 1);
		}
		else
		{
			showRuleInfo(aStyleInfo.length, 4);
		}
	}
}

// currentRuleType == 1 for delete, 2 for tag, 3 for highlight, 4 for style
function nextManage(event)
{
	event.stopPropagation();
	if (!currentRuleNumber || !currentRuleType)
	{
		return;
	}
	if (currentRuleType == 1)	// delete
	{
		if (currentRuleNumber < aDeleteInfo.length)
		{
			showRuleInfo(currentRuleNumber + 1, 1);
		}
		else
		{
			if (aTagInfo.length)
			{
				showRuleInfo(1, 2);
			}
			else if (aHighlightInfo.length)
			{
				showRuleInfo(1, 3);
			}
			else if (aStyleInfo.length)
			{
				showRuleInfo(1, 4);
			}
			else
			{
				showRuleInfo(1, 1);
			}
		}
	}
	else if (currentRuleType == 2)	// tag
	{
		if (currentRuleNumber < aTagInfo.length)
		{
			showRuleInfo(currentRuleNumber + 1, 2);
		}
		else
		{
			if (aHighlightInfo.length)
			{
				showRuleInfo(1, 3);
			}
			else if (aStyleInfo.length)
			{
				showRuleInfo(1, 4);
			}
			else if (aDeleteInfo.length)
			{
				showRuleInfo(1, 1);
			}
			else
			{
				showRuleInfo(1, 2);
			}
		}
	}
	else if (currentRuleType == 3)	// highlight
	{
		if (currentRuleNumber < aHighlightInfo.length)
		{
			showRuleInfo(currentRuleNumber + 1, 3);
		}
		else
		{
			if (aStyleInfo.length)
			{
				showRuleInfo(1, 4);
			}
			else if (aDeleteInfo.length)
			{
				showRuleInfo(1, 1);
			}
			else if (aTagInfo.length)
			{
				showRuleInfo(1, 2);
			}
			else
			{
				showRuleInfo(1, 3);
			}
		}
	}
	else if (currentRuleType == 4)	// style
	{
		if (currentRuleNumber < aStyleInfo.length)
		{
			showRuleInfo(currentRuleNumber + 1, 4);
		}
		else
		{
			if (aDeleteInfo.length)
			{
				showRuleInfo(1, 1);
			}
			else if (aTagInfo.length)
			{
				showRuleInfo(1, 2);
			}
			else if (aHighlightInfo.length)
			{
				showRuleInfo(1, 3);
			}
			else
			{
				showRuleInfo(1, 4);
			}
		}
	}
}

function deleteManage(event)
{
	event.stopPropagation();
	if (!currentRuleNumber || !currentRuleType)
	{
		return;
	}

	if (currentRuleType == 1)
	{
		freeSlot(aDeleteInfo[currentRuleNumber - 1][9]);	// rule ID
		aDeleteInfo.splice(currentRuleNumber - 1, 1);
	}
	else if (currentRuleType == 2)
	{
		freeSlot(aTagInfo[currentRuleNumber - 1][7]);
		aTagInfo.splice(currentRuleNumber - 1, 1);
	}
	else if (currentRuleType == 3)
	{
		freeSlot(aHighlightInfo[currentRuleNumber - 1][11]);
		aHighlightInfo.splice(currentRuleNumber - 1, 1);
	}
	else if (currentRuleType == 4)
	{
		freeSlot(aStyleInfo[currentRuleNumber - 1][8]);
		aStyleInfo.splice(currentRuleNumber - 1, 1);
	}

	if (currentRuleNumber > 1)
	{
		currentRuleNumber--;
	}
	if (!aDeleteInfo.length && !aTagInfo.length && !aHighlightInfo.length && !aStyleInfo.length)
	{
		showRuleInfo(0, 0);
		return;
	}
	while (1)
	{
		if (currentRuleType == 1 && !aDeleteInfo.length)
		{
			currentRuleNumber = 1;
			currentRuleType++;
		}
		else if (currentRuleType == 2 && !aTagInfo.length)
		{
			currentRuleNumber = 1;
			currentRuleType++;
		}
		else if (currentRuleType == 3 && !aHighlightInfo.length)
		{
			currentRuleNumber = 1;
			currentRuleType++;
		}
		else if (currentRuleType == 4 && !aStyleInfo.length)
		{
			currentRuleNumber = 1;
			currentRuleType = 1;
		}
		else
		{
			break;
		}
	}
	showRuleInfo(currentRuleNumber, currentRuleType);
}

function saveManageStatus()
{
	var gmKey = systemStatusText;
	// NB: system values are in order: delete,highlight,tag,style
	var infoString = String(deactivateDeleteFlag).length + ":" + deactivateDeleteFlag;
	infoString += String(deactivateHighlightFlag).length + ":" + deactivateHighlightFlag;
	infoString += String(deactivateTagFlag).length + ":" + deactivateTagFlag;
	infoString += String(deactivateStyleFlag).length + ":" + deactivateStyleFlag;
	var gmValue = systemHeader + infoString;
	GM_setValue(gmKey, gmValue);
}

function closeManage(event)
{
	event.stopPropagation();
	var checkNode = document.getElementById("mondo_meta_manage_deactdel");
	deactivateDeleteFlag = checkNode.checked;
	checkNode = document.getElementById("mondo_meta_manage_deacthi");
	deactivateHighlightFlag = checkNode.checked;
	checkNode = document.getElementById("mondo_meta_manage_deacttag");
	deactivateTagFlag = checkNode.checked;
	checkNode = document.getElementById("mondo_meta_manage_deactsty");
	deactivateStyleFlag = checkNode.checked;
	saveManageStatus();

	boxUp = 0;
	showRuleInfo(0, 0);
	mondo_meta_manage_control.style.display = noneText;
}

function processManage()
{
	mondo_meta_manage_control.style.display = "";
	var checkNode = document.getElementById("mondo_meta_manage_deactdel");
	checkNode.checked = deactivateDeleteFlag;
	checkNode = document.getElementById("mondo_meta_manage_deacthi");
	checkNode.checked = deactivateHighlightFlag;
	checkNode = document.getElementById("mondo_meta_manage_deacttag");
	checkNode.checked = deactivateTagFlag;
	checkNode = document.getElementById("mondo_meta_manage_deactsty");
	checkNode.checked = deactivateStyleFlag;
	if (aDeleteInfo.length)
	{
		showRuleInfo(1, 1);
	}
	else if (aTagInfo.length)
	{
		showRuleInfo(1, 2);
	}
	else if (aHighlightInfo.length)
	{
		showRuleInfo(1, 3);
	}
	else if (aStyleInfo.length)
	{
		showRuleInfo(1, 4);
	}
	else
	{
		showRuleInfo(0, 0);
	}
}

function do_a_mondo(event)
{
	event.stopPropagation();
	var which = event.target.selectedIndex;
	var choice =  event.target.options[which].value;
	if (choice === expandText || choice === compactText)
	{
		expandLinks();
		// don't count on the selection, count on the display status
		if (expandedLinksFlag)
		{
			event.target.options[which].text = expandTextChoice[1];
			event.target.options[which].value = compactText;
		}
		else
		{
			event.target.options[which].text = expandTextChoice[0];
			event.target.options[which].value = expandText;
		}
	}
	else if (choice === deleteFilterText && !boxUp)
	{
		boxUp = 1;
		mondo_meta_delete_control.style.display = "";
		var elem = document.getElementById("mondo_meta_delete_text");
		elem.focus();
	}
	else if  (choice === highlightText && !boxUp)
	{
		boxUp = 1;
		mondo_meta_highlight_control.style.display = "";
		var elem = document.getElementById("mondo_meta_highlight_text");
		elem.focus();
	}
	else if  (choice === tagText && !boxUp)
	{
		boxUp = 1;
		mondo_meta_tag_control.style.display = "";
		var elem = document.getElementById("mondo_meta_tag_text");
		elem.focus();
	}
	else if  (choice === styleText && !boxUp)
	{
		boxUp = 1;
		mondo_meta_style_control.style.display = "";
		var elem = document.getElementById("mondo_meta_style_text");
		elem.focus();
	}
	else if  (choice === manageText & !boxUp)
	{
		boxUp = 1;
		processManage();
	}

	// mondo image specific
	else if  (choice === imagesText & !boxUp)
	{
		boxUp = 1;
		showParamBox();
	}

	event.target.selectedIndex = 0;
}

function processRule(rule, ruleID)
{
	if (rule.substr(0, 4).toUpperCase() != "USED")
	{
		freeRules.push(ruleID);
	}
	else
	{
		var bBad = false;
		var pos = usedRuleHeader.length;
		if (rule.substr(pos, deleteHeader.length) === deleteHeader)
		{
			pos += deleteHeader.length;
			// DelText, Located, How, Whole, Case, Links, RegExp, Duration, Date
			var storeDelText, storeLocated, storeHow;
			var storeWhole, storeCase, storeLinks, storeRegExp;
			var storeDuration, storeDate;
			for (var j = 0; !bBad && j < 9; j++)
			{
				var len = parseInt(rule.substr(pos));
				if (isNaN(len))
				{
					bBad = true;
					break;
				}
				pos = rule.indexOf(":", pos);
				if (pos == -1)
				{
					bBad = true;
					break;
				}
				pos++;
				var result = rule.substr(pos, len);
				pos += len;
				switch (j)
				{
					case 0:
						storeDelText = result;
						break;
					case 1:
						storeLocated = result;
						break;
					case 2:
						storeHow = result;
						break;
					case 3:
						storeWhole = (result === trueText ? true : false);
						break;
					case 4:
						storeCase = (result === trueText ? true : false);
						break;
					case 5:
						storeLinks = (result === trueText ? true : false);
						break;
					case 6:
						storeRegExp = (result === trueText ? true : false);
						break;
					case 7:
						storeDuration = result;
						break;
					case 8:
						storeDate = result;
						break;
				}
			}
			if (!bBad)
			{
				var rightNow = new Date();
				if (storeDate + parseInt(storeDuration) <= rightNow.getTime())
				{
					freeSlot(ruleID);
				}
				else
				{

					aDeleteInfo.push([
						storeDelText,
						storeLocated,
						storeHow,
						storeWhole,
						storeCase,
						storeLinks,
						storeRegExp,
						storeDuration,
						storeDate,
						ruleID]);
				}
			}
		}

		else if (rule.substr(pos, highlightHeader.length) === highlightHeader)
		{
			pos += highlightHeader.length;
			// HiText, Located, Area,
			// fgColor, userbgColor, userfgRGB, userbgRGB,
			// Whole, Case, RegExp, Date
			var storeHiText, storeLocated, storeArea;
			var storefgColor, storebgColor, storefgRGB, storebgRGB;
			var storeWhole, storeCase, storeRegExp, storeDate
			for (var j = 0; !bBad && j < 11; j++)
			{
				var len = parseInt(rule.substr(pos));
				if (isNaN(len))
				{
					bBad = true;
					break;
				}
				pos = rule.indexOf(":", pos);
				if (pos == -1)
				{
					bBad = true;
					break;
				}
				pos++;
				var result = rule.substr(pos, len);
				pos += len;
				switch (j)
				{
					case 0:
						storeHiText = result;
						break;
					case 1:
						storeLocated = result;
						break;
					case 2:
						storeArea = result;
						break;
					case 3:
						storefgColor = result;
						break;
					case 4:
						storebgColor = result;
						break;
					case 5:
						storefgRGB = result;
						break;
					case 6:
						storebgRGB = result;
						break;
					case 7:
						storeWhole = (result === trueText ? true : false);
						break;
					case 8:
						storeCase = (result === trueText ? true : false);
						break;
					case 9:
						storeRegExp = (result === trueText ? true : false);
						break;
					case 10:
						storeDate = result;
						break;
				}
			}
			if (!bBad)
			{
				aHighlightInfo.push([
					storeHiText,
					storeLocated,
					storeArea,
					storefgColor,
					storebgColor,
					storefgRGB,
					storebgRGB,
					storeWhole,
					storeCase,
					storeRegExp,
					storeDate,
					ruleID]);
			}
		}

		else if (rule.substr(pos, tagHeader.length) === tagHeader)
		{
			// userTagText, userLocated, userTagTags, userWhole, userCase, userRegExp,
			pos += tagHeader.length;
			var storeTagText, storeLocated, storeTagTags;
			var storeWhole, storeCase, storeRegExp, storeDate
			for (var j = 0; !bBad && j < 7; j++)
			{
				var len = parseInt(rule.substr(pos));
				if (isNaN(len))
				{
					bBad = true;
					break;
				}
				pos = rule.indexOf(":", pos);
				if (pos == -1)
				{
					bBad = true;
					break;
				}
				pos++;
				var result = rule.substr(pos, len);
				pos += len;
				switch (j)
				{
					case 0:
						storeTagText = result;
						break;
					case 1:
						storeLocated = result;
						break;
					case 2:
						storeTagTags = result;
						break;
					case 3:
						storeWhole = (result === trueText ? true : false);
						break;
					case 4:
						storeCase = (result === trueText ? true : false);
						break;
					case 5:
						storeRegExp = (result === trueText ? true : false);
						break;
					case 6:
						storeDate = result;
						break;
				}
			}
			if (!bBad)
			{
				aTagInfo.push([
					storeTagText,
					storeLocated,
					storeTagTags,
					storeWhole,
					storeCase,
					storeRegExp,
					storeDate,
					ruleID]);
			}
		}

		else if (rule.substr(pos, styleHeader.length) === styleHeader)
		{
			// userStyleText, userLocated, userStyleStyles, userWhole, userCase, userRegExp,
			pos += styleHeader.length;
			var storeStyleText, storeLocated, storeStyleStyles;
			var storeWhole, storeCase, storeRegExp, storeDate
			for (var j = 0; !bBad && j < 7; j++)
			{
				var len = parseInt(rule.substr(pos));
				if (isNaN(len))
				{
					bBad = true;
					break;
				}
				pos = rule.indexOf(":", pos);
				if (pos == -1)
				{
					bBad = true;
					break;
				}
				pos++;
				var result = rule.substr(pos, len);
				pos += len;
				switch (j)
				{
					case 0:
						storeStyleText = result;
						break;
					case 1:
						storeLocated = result;
						break;
					case 2:
						storeStyleStyles = result;
						break;
					case 3:
						storeWhole = (result === trueText ? true : false);
						break;
					case 4:
						storeCase = (result === trueText ? true : false);
						break;
					case 5:
						storeRegExp = (result === trueText ? true : false);
						break;
					case 6:
						storeDate = result;
						break;
				}
			}
			if (!bBad)
			{
				aStyleInfo.push([
					storeStyleText,
					storeLocated,
					storeStyleStyles,
					storeWhole,
					storeCase,
					storeRegExp,
					false,
					storeDate,
					ruleID]);
			}
		}

		if (bBad)
		{
			// couldn't parse it, kill the rule
			freeSlot(ruleID);
		}
	}
}

function processSystemStatus()
{
	var settingsExist = ((statusValues = GM_getValue(systemStatusText, "x")) != "x");
	if (!settingsExist)
	{
		return;
	}
	// system values are in order: delete,highlight,tag,style
	if (statusValues.substr(0, systemHeader.length) === systemHeader)
	{
		var pos = systemHeader.length;
		for (var j = 0; j < 4; j++)
		{
			var len = parseInt(statusValues.substr(pos));
			if (isNaN(len))
			{
				break;
			}
			pos = statusValues.indexOf(":", pos);
			if (pos == -1)
			{
				break;
			}
			pos++;
			var result = statusValues.substr(pos, len);
			pos += len;
			switch (j)
			{
				case 0:
					deactivateDeleteFlag = (result === trueText ? true : false);
					break;
				case 1:
					deactivateHighlightFlag = (result === trueText ? true : false);
					break;
				case 2:
					deactivateTagFlag = (result === trueText ? true : false);
					break;
				case 3:
					deactivateStyleFlag = (result === trueText ? true : false);
					break;
				default:
			}
		}
	}
}

// load existing filter/highlight info settings and process them
function loadPermanentInfo()
{
	processSystemStatus();
	var count = 0;
	var rule;
	var ruleID;
	freeRules.length = aDeleteInfo.length = aHighlightInfo.length = 0;
	aTagInfo.length = aStyleInfo.length = 0;
	while ((rule = GM_getValue(ruleID = ("Rule"+(++count)), "x")) != "x")
	{
		processRule(rule, ruleID);
		storedRuleCount++;	// increments even on invalid rule
	}
	nodeBreaker(flagMultiple, 0);
}

function init()
{
	mondo_meta_control = document.getElementById( "mondo_meta_control")
	if (mondo_meta_control)
	{
		return;
	}
	GM_setValue("Version", mondoCaboodleVersion);
	loadPermanentInfo();

	mondo_meta_control = document.createElement("select");
	mondo_meta_control.style.position = "fixed";
	mondo_meta_control.style.bottom = "5px";
	mondo_meta_control.style.left = "5px";
	mondo_meta_control.style.fontSize = "12px";
	mondo_meta_control.style.color = darkBlueText;
	mondo_meta_control.style.backgroundColor = whiteText;

	var opt_count = 0;
	var optmmo = document.createElement(optionText);
	optmmo.text = "Mondo Caboodle Options";
	optmmo.value = defaultText;
	optmmo.defaultselected = true;
	optmmo.selected = true;
	optmmo.style.color = darkBlueText;
	optmmo.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = optmmo;

	var optel = document.createElement(optionText);
	optel.text = expandTextChoice[0];
	optel.value = expandText;
	optel.style.color = darkBlueText;
	optel.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = optel;
/*
	var optsep = document.createElement(optionText);
	optsep.text = separatorText;
	optsep.value = separatorText;
	optsep.style.color = darkBlueText;
	optsep.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = optsep;
*/
	var optfd = document.createElement(optionText);
	optfd.text = deleteFilterText;
	optfd.value = deleteFilterText;
	optfd.style.color = darkBlueText;
	optfd.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = optfd;

	var opthi = document.createElement(optionText);
	opthi.text = highlightText;
	opthi.value = highlightText;
	opthi.style.color = darkBlueText;
	opthi.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = opthi;

	var optsty = document.createElement(optionText);
	optsty.text = styleText;
	optsty.value = styleText;
	optsty.style.color = darkBlueText;
	optsty.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = optsty;

	var opttag = document.createElement(optionText);
	opttag.text = tagText;
	opttag.value = tagText;
	opttag.style.color = darkBlueText;
	opttag.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = opttag;
/*
	var optsep = document.createElement(optionText);
	optsep.text = separatorText;
	optsep.value = separatorText;
	optsep.style.color = darkBlueText;
	optsep.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = optsep;
*/
	var optman = document.createElement(optionText);
	optman.text = manageText;
	optman.value = manageText;
	optman.style.color = darkBlueText;
	optman.style.backgroundColor = whiteText;
	mondo_meta_control.options[opt_count++] = optman;

	// mondo image addition
	var optimg = document.createElement(optionText);
	optimg.text = imagesText;
	optimg.value = imagesText;
	optimg.style.color = "darkblue";
	optimg.style.backgroundColor = "white";
	mondo_meta_control.options[opt_count++] = optimg;

	mondo_meta_control.length = opt_count;
	mondo_meta_control.addEventListener('change', do_a_mondo, false);
	document.getElementsByTagName('body')[0].appendChild(mondo_meta_control);

	var addHeader =
		'td.mondo_meta_basicstyle INPUT,td.mondo_meta_basicstyle SELECT,td.mondo_meta_basicstyle DIV,td.mondo_meta_basicstyle SPAN' +
		'{ font: 12px Verdana, Arial, Helvetica, sans-serif; }' +
		'td.mondo_meta_basicstyle INPUT,td.mondo_meta_basicstyle SELECT' +
		'{ background-color: white }' +
		'td.mondo_meta_basicstyle SPAN { color: darkblue }' +
		'.mondo_meta_title { font-weight: bold !important; font-size: 18px !important; padding-bottom: 8px; margin-left: 140px; }' +
		'.mondo_meta_minititle { font-weight: bold !important; font-size: 14px !important; padding-bottom: 8px; margin-left: 20px; }' +
		'.mondo_meta_label { font-weight: bold; text-align: right; float: left; width: 140px; }' +
		'.mondo_meta_userinput { float: left; width: 230px; }' +
		'.mondo_meta_checks { font-weight: bold; float: left;}' +
		'.mondo_meta_rgb { width: 90px; }' +
		'.mondo_meta_duration { width: 40px; }' +
		'.mondo_meta_smallindent, .mondo_meta_mantext { margin-left: 20px; }' +
		'.mondo_meta_manage { width: 320px; float: left; }' +
		'.mondo_meta_mantext { text-align: right; float: left; }' +
		'button.mondo_meta { width: 60px; position: absolute; bottom: 10px; }' +
		'button.mondo_meta2 { width: 70px; position: absolute; bottom: 10px; }';
	var test_style = document.createElement("style");
	test_style.setAttribute('type', 'text/css');
	test_style.innerHTML = addHeader;
	document.getElementsByTagName('head')[0].appendChild(test_style);

	mondo_meta_highlight_control = document.createElement("td");
	mondo_meta_highlight_control.className = "mondo_meta_basicstyle";
	mondo_meta_highlight_control.style.lineHeight = "26px";
	mondo_meta_highlight_control.style.color = darkBlueText;
	mondo_meta_highlight_control.style.position = "fixed";
	mondo_meta_highlight_control.style.bottom = "40px";
	mondo_meta_highlight_control.style.left = "5px";
	mondo_meta_highlight_control.style.backgroundColor = "#FFCFCF";
	mondo_meta_highlight_control.style.borderColor = "black";
	mondo_meta_highlight_control.style.borderWidth = "1px";
	mondo_meta_highlight_control.style.borderStyle = "solid";
	mondo_meta_highlight_control.style.opacity = ".94";
	mondo_meta_highlight_control.style.display = noneText;

	var highlightHtml =
		'<div class="mondo_meta_title">Mondo Meta Highlight</div>' +
		'<div>' +
		'<span class="mondo_meta_label">Highlight text:&nbsp;</span>' +
		'<input id="mondo_meta_highlight_text" class="mondo_meta_userinput" type="text">' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_highlight_wholeword" type="checkbox">Whole word only</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Located in:&nbsp;</span>' +
		'<span class="mondo_meta_userinput">' +
		'<select id="mondo_meta_highlight_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
		'</span>' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_highlight_matchcase" type="checkbox">Match case</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Area highlighted:&nbsp;</span>' +
		'<span class="mondo_meta_userinput">' +
		'<select id="mondo_meta_highlight_area">' +
		'<option>Footer only</option>' +
		'<option>Entire post</option>' +
		'</select>' +
		'</span>' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_highlight_regexp" type="checkbox">Regular expression</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Foreground color:&nbsp;</span>' +
		'<span style="float: left">' +
		'<select id="mondo_meta_highlight_fgcolor">' +
		'<option>aqua</option>' +
		'<option>black</option>' +
		'<option selected>blue</option>' +
		'<option>cyan</option>' +
		'<option>gray</option>' +
		'<option>green</option>' +
		'<option>lime</option>' +
		'<option>magenta</option>' +
		'<option>maroon</option>' +
		'<option>navy</option>' +
		'<option>olive</option>' +
		'<option>purple</option>' +
		'<option>red</option>' +
		'<option>teal</option>' +
		'<option>white</option>' +
		'<option>yellow</option>' +
		'<option>Unchanged</option>' +
		'<option>Custom</option>' +
		'</select>' +
		'&nbsp;<b>RGB:</b>' +
		'<input id="mondo_meta_highlight_fgRGB" class="mondo_meta_rgb" disabled type="text" style="background-color: gray;">' +
		'</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Background color:&nbsp;</span>' +
		'<span style="float: left">' +
		'<select id="mondo_meta_highlight_bgcolor">' +
		'<option>aqua</option>' +
		'<option>black</option>' +
		'<option>blue</option>' +
		'<option>cyan</option>' +
		'<option>gray</option>' +
		'<option>green</option>' +
		'<option>lime</option>' +
		'<option>magenta</option>' +
		'<option>maroon</option>' +
		'<option>navy</option>' +
		'<option>olive</option>' +
		'<option>purple</option>' +
		'<option>red</option>' +
		'<option>teal</option>' +
		'<option>white</option>' +
		'<option selected>yellow</option>' +
		'<option>Unchanged</option>' +
		'<option>Custom</option>' +
		'</select>' +
		'&nbsp;<b>RGB:</b>' +
		'<input id="mondo_meta_highlight_bgRGB" class="mondo_meta_rgb" disabled type="text" style="background-color: gray;">' +
		'</span>' +
		'</div><br><br><br>';

	mondo_meta_highlight_control.innerHTML = highlightHtml;
	var saveNode = document.createElement(buttonText);
	saveNode.setAttribute("class", "mondo_meta");
	saveNode.style.marginLeft = "140px";
	saveNode.appendChild(document.createTextNode("Save"));
	var cancelNode = document.createElement(buttonText);
	cancelNode.setAttribute("class", "mondo_meta");
	cancelNode.style.marginLeft = "220px";
	cancelNode.appendChild(document.createTextNode("Cancel"));
	mondo_meta_highlight_control.appendChild(saveNode);
	mondo_meta_highlight_control.appendChild(cancelNode);
	document.getElementsByTagName('body')[0].appendChild(mondo_meta_highlight_control);

	var sNode = document.getElementById( "mondo_meta_highlight_fgcolor");
	sNode.addEventListener('change', changeFgHighlight, true);
	sNode = document.getElementById( "mondo_meta_highlight_bgcolor");
	sNode.addEventListener('change', changeBgHighlight, true);
	saveNode.addEventListener(clickText, saveHighlight, true);
	cancelNode.addEventListener(clickText, cancelHighlight, true);

	mondo_meta_delete_control = document.createElement("td");
	mondo_meta_delete_control.className = "mondo_meta_basicstyle";
	mondo_meta_delete_control.style.lineHeight = "26px";
	mondo_meta_delete_control.style.color = darkBlueText;
	mondo_meta_delete_control.style.position = "fixed";
	mondo_meta_delete_control.style.bottom = "40px";
	mondo_meta_delete_control.style.left = "5px";
	mondo_meta_delete_control.style.backgroundColor = "#FFCFCF";
	mondo_meta_delete_control.style.borderColor = "black";
	mondo_meta_delete_control.style.borderWidth = "1px";
	mondo_meta_delete_control.style.borderStyle = "solid";
	mondo_meta_delete_control.style.opacity = ".94";
	mondo_meta_delete_control.style.display = noneText;

	var deleteHtml =
		'<div class="mondo_meta_title">Mondo Meta Delete-Filter</div>' +
		'<div>' +
		'<span class="mondo_meta_label">Delete if text:&nbsp;</span>' +
		'<input id="mondo_meta_delete_text" class="mondo_meta_userinput" type="text">' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_delete_wholeword" type="checkbox">Whole word only</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Located in:&nbsp;</span>' +
		'<span class="mondo_meta_userinput">' +
		'<select id="mondo_meta_delete_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
		'</span>' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_delete_matchcase" type="checkbox">Match case</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">How:&nbsp;</span>' +
		'<span class="mondo_meta_userinput">' +
		'<select id="mondo_meta_delete_how">' +
		'<option>'+removeText+'</option>' +
		'<option>'+invisibleText+'</option>' +
		'<option>'+fg_bgText+'</option>' +
		'</select>' +
		'</span>' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_delete_matchlinks" type="checkbox">Match links</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Duration:&nbsp;</span>' +
		'<span class="mondo_meta_userinput">' +
		'<input id="mondo_meta_delete_duration" class="mondo_meta_duration" type="text" value="90">' +
		'&nbsp;<b>day(s)</b>' +
		'</span>' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_delete_regexp" type="checkbox">Regular expression</span>' +
		'</div><br><br><br>';

	mondo_meta_delete_control.innerHTML = deleteHtml;
	var saveNode = document.createElement(buttonText);
	saveNode.setAttribute("class", "mondo_meta");
	saveNode.style.marginLeft = "140px";
	saveNode.appendChild(document.createTextNode("Save"));
	var cancelNode = document.createElement(buttonText);
	cancelNode.setAttribute("class", "mondo_meta");
	cancelNode.style.marginLeft = "220px";
	cancelNode.appendChild(document.createTextNode("Cancel"));
	mondo_meta_delete_control.appendChild(saveNode);
	mondo_meta_delete_control.appendChild(cancelNode);
	document.getElementsByTagName('body')[0].appendChild(mondo_meta_delete_control);

	saveNode.addEventListener(clickText, saveDelete, true);
	cancelNode.addEventListener(clickText, cancelDelete, true);

	mondo_meta_tag_control = document.createElement("td");
	mondo_meta_tag_control.className = "mondo_meta_basicstyle";
	mondo_meta_tag_control.style.lineHeight = "26px";
	mondo_meta_tag_control.style.color = darkBlueText;
	mondo_meta_tag_control.style.position = "fixed";
	mondo_meta_tag_control.style.bottom = "40px";
	mondo_meta_tag_control.style.left = "5px";
	mondo_meta_tag_control.style.backgroundColor = "#FFCFCF";
	mondo_meta_tag_control.style.borderColor = "black";
	mondo_meta_tag_control.style.borderWidth = "1px";
	mondo_meta_tag_control.style.borderStyle = "solid";
	mondo_meta_tag_control.style.opacity = ".94";
	mondo_meta_tag_control.style.display = noneText;

	var tagHtml =
		'<div class="mondo_meta_title">Mondo Meta Tag</div>' +
		'<div>' +
		'<span class="mondo_meta_label">Tag text:&nbsp;</span>' +
		'<input id="mondo_meta_tag_text" class="mondo_meta_userinput" type="text">' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_tag_wholeword" type="checkbox">Whole word only</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Located in:&nbsp;</span>' +
		'<span class="mondo_meta_userinput">' +
		'<select id="mondo_meta_tag_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
		'</span>' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_tag_matchcase" type="checkbox">Match case</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Use Tags:&nbsp;</span>' +
		'<input id="mondo_meta_tag_tags" class="mondo_meta_userinput" type="text">' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_tag_regexp" type="checkbox">Regular expression</span>' +
		'</div><br><br><br>';

	mondo_meta_tag_control.innerHTML = tagHtml;
	var saveNode = document.createElement(buttonText);
	saveNode.setAttribute("class", "mondo_meta");
	saveNode.style.marginLeft = "140px";
	saveNode.appendChild(document.createTextNode("Save"));
	var cancelNode = document.createElement(buttonText);
	cancelNode.setAttribute("class", "mondo_meta");
	cancelNode.style.marginLeft = "220px";
	cancelNode.appendChild(document.createTextNode("Cancel"));
	mondo_meta_tag_control.appendChild(saveNode);
	mondo_meta_tag_control.appendChild(cancelNode);
	document.getElementsByTagName('body')[0].appendChild(mondo_meta_tag_control);

	saveNode.addEventListener(clickText, saveTag, true);
	cancelNode.addEventListener(clickText, cancelTag, true);

	mondo_meta_style_control = document.createElement("td");
	mondo_meta_style_control.className = "mondo_meta_basicstyle";
	mondo_meta_style_control.style.lineHeight = "26px";
	mondo_meta_style_control.style.color = darkBlueText;
	mondo_meta_style_control.style.position = "fixed";
	mondo_meta_style_control.style.bottom = "40px";
	mondo_meta_style_control.style.left = "5px";
	mondo_meta_style_control.style.backgroundColor = "#FFCFCF";
	mondo_meta_style_control.style.borderColor = "black";
	mondo_meta_style_control.style.borderWidth = "1px";
	mondo_meta_style_control.style.borderStyle = "solid";
	mondo_meta_style_control.style.opacity = ".94";
	mondo_meta_style_control.style.display = noneText;

	var styleHtml =
		'<div class="mondo_meta_title">Mondo Meta Style</div>' +
		'<div>' +
		'<span class="mondo_meta_label">Style text:&nbsp;</span>' +
		'<input id="mondo_meta_style_text" class="mondo_meta_userinput" type="text">' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_style_wholeword" type="checkbox">Whole word only</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Located in:&nbsp;</span>' +
		'<span class="mondo_meta_userinput">' +
		'<select id="mondo_meta_style_located"><option>'+contentText+'</option><option>'+footerText+'</option><option>'+contentFooterText+'</option></select>' +
		'</span>' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_style_matchcase" type="checkbox">Match case</span>' +
		'</div><br><div>' +
		'<span class="mondo_meta_label">Use Style:&nbsp;</span>' +
		'<input id="mondo_meta_style_styles" class="mondo_meta_userinput" type="text">' +
		'<span class="mondo_meta_checks"><input id="mondo_meta_style_regexp" type="checkbox">Regular expression</span>' +
		'</div><br><br><br>';

	mondo_meta_style_control.innerHTML = styleHtml;
	var saveNode = document.createElement(buttonText);
	saveNode.setAttribute("class", "mondo_meta");
	saveNode.style.marginLeft = "140px";
	saveNode.appendChild(document.createTextNode("Save"));
	var cancelNode = document.createElement(buttonText);
	cancelNode.setAttribute("class", "mondo_meta");
	cancelNode.style.marginLeft = "220px";
	cancelNode.appendChild(document.createTextNode("Cancel"));
	mondo_meta_style_control.appendChild(saveNode);
	mondo_meta_style_control.appendChild(cancelNode);
	document.getElementsByTagName('body')[0].appendChild(mondo_meta_style_control);

	saveNode.addEventListener(clickText, saveStyle, true);
	cancelNode.addEventListener(clickText, cancelStyle, true);

	mondo_meta_manage_control = document.createElement("td");
	mondo_meta_manage_control.className = "mondo_meta_basicstyle";
	mondo_meta_manage_control.style.lineHeight = "24px";
	mondo_meta_manage_control.style.color = darkBlueText;
	mondo_meta_manage_control.style.position = "fixed";
	mondo_meta_manage_control.style.bottom = "40px";
	mondo_meta_manage_control.style.left = "5px";
	mondo_meta_manage_control.style.backgroundColor = "#FFCFCF";
	mondo_meta_manage_control.style.borderColor = "black";
	mondo_meta_manage_control.style.borderWidth = "1px";
	mondo_meta_manage_control.style.borderStyle = "solid";
	mondo_meta_manage_control.style.opacity = ".94";
	mondo_meta_manage_control.style.display = noneText;

	var manageHtml =
		'<div class="mondo_meta_title">Manage Mondo Meta</div>' +
		'<div id="mondo_meta_rulehead" class="mondo_meta_minititle">Saved Rule</div>' +
		'<div><span class="mondo_meta_manage">' +
		'&nbsp;</span>' +
		'<input id="mondo_meta_manage_deactdel" type="checkbox">' +
		'<span>Deactivate All Filters</span></div>' +
		'<div><span class="mondo_meta_manage">' +
		'&nbsp;</span>' +
		'<input id="mondo_meta_manage_deacttag" type="checkbox">' +
		'<span>Deactivate All Tags</span></div>' +
		'<div><span class="mondo_meta_manage">' +
		'<span id="mondo_meta_mantext" class="mondo_meta_mantext">Highlight Text:</span></span>' +
		'<input id="mondo_meta_manage_deacthi" type="checkbox">' +
		'<span>Deactivate All Highlights</span></div>' +
		'<div><span class="mondo_meta_manage">' +
		'<input id="mondo_meta_ruletext" class="mondo_meta_userinput mondo_meta_smallindent" type="text"></span>' +
		'<input id="mondo_meta_manage_deactsty" type="checkbox">' +
		'<span>Deactivate All Styles</span></div><br>' +
		'<span class="mondo_meta_smallindent"><b>Web pages must be refreshed to show changes.</b></span><br><br><br>';

	mondo_meta_manage_control.innerHTML = manageHtml;
	var prevNode = document.createElement(buttonText);
	prevNode.setAttribute("class", "mondo_meta2");
	prevNode.style.marginLeft = "20px";
	prevNode.appendChild(document.createTextNode("Previous"));
	mondo_meta_manage_control.appendChild(prevNode);
	var nextNode = document.createElement(buttonText);
	nextNode.setAttribute("class", "mondo_meta2");
	nextNode.style.marginLeft = "100px";
	nextNode.appendChild(document.createTextNode("Next"));
	mondo_meta_manage_control.appendChild(nextNode);
	var deleteNode = document.createElement(buttonText);
	deleteNode.setAttribute("class", "mondo_meta2");
	deleteNode.style.marginLeft = "220px";
	deleteNode.appendChild(document.createTextNode("Delete"));
	mondo_meta_manage_control.appendChild(deleteNode);
	var closeNode = document.createElement(buttonText);
	closeNode.setAttribute("class", "mondo_meta2");
	closeNode.style.marginLeft = "400px";
	closeNode.appendChild(document.createTextNode("Close"));
	mondo_meta_manage_control.appendChild(closeNode);
	document.getElementsByTagName('body')[0].appendChild(mondo_meta_manage_control);
	prevNode.addEventListener(clickText, prevManage, true);
	nextNode.addEventListener(clickText, nextManage, true);
	deleteNode.addEventListener(clickText, deleteManage, true);
	closeNode.addEventListener(clickText, closeManage, true);

}

// ***********************************************
// Mondo Image code
// ***********************************************
// save custom image settings
function saveInfoToStore()
{
	GM_setValue("allowedExtensions", allowedExtensions.join(","));
	GM_setValue("limitSites", limitSites ? trueText : falseText);
	GM_setValue("allowedSites", allowedSites.join(","));
	GM_setValue("limitUsers", limitUsers ? trueText : falseText);
	GM_setValue("allowedUsers", allowedUsers.join(","));
	GM_setValue("limitText", limitText ? trueText : falseText);
	GM_setValue("allowedText", allowedText.join(","));
	GM_setValue("masterSwitchSet", masterSwitchSet ? trueText : falseText);

	GM_setValue("limitMaxWidth", limitMaxWidth);
	GM_setValue("limitMaxHeight", limitMaxHeight);
	GM_setValue("excludeSites", excludeSites ? trueText : falseText);
	GM_setValue("notAllowedSites", notAllowedSites.join(","));
	GM_setValue("excludeUsers", excludeUsers ? trueText : falseText);
	GM_setValue("notAllowedUsers", notAllowedUsers.join(","));
	GM_setValue("flagRestricted", flagRestricted ? trueText : falseText);
}

// load existing image settings and process them
function loadStoredInfo()
{
	var miParam = GM_getValue("limitSites", xText);
	if (miParam != xText)
	{
		limitSites = (miParam === trueText ? true : false);
	}
	miParam = GM_getValue("allowedSites", xText);
	if (miParam != xText)
	{
		allowedSites = miParam.split(",");
	}
	miParam = GM_getValue("allowedExtensions", xText);
	if (miParam != xText)
	{
		allowedExtensions = miParam.split(",");
	}
	miParam = GM_getValue("limitUsers", xText);
	if (miParam != xText)
	{
		limitUsers = (miParam === trueText ? true : false);
	}
	miParam = GM_getValue("allowedUsers", xText);
	if (miParam != xText)
	{
		allowedUsers = miParam.split(",");
	}
	miParam = GM_getValue("limitText", xText);
	if (miParam != xText)
	{
		limitText = (miParam === trueText ? true : false);
	}
	miParam = GM_getValue("allowedText", xText);
	if (miParam != xText)
	{
		allowedText = miParam.split(",");
	}
	miParam = GM_getValue("masterSwitchSet", xText);
	if (miParam != xText)
	{
		masterSwitchSet = (miParam === trueText ? true : false);
	}

	miParam = GM_getValue("limitMaxWidth", xText);
	if (miParam != xText)
	{
		limitMaxWidth = miParam;
	}
	miParam = GM_getValue("limitMaxHeight", xText);
	if (miParam != xText)
	{
		limitMaxHeight = miParam;
	}
	var miParam = GM_getValue("excludeSites", xText);
	if (miParam != xText)
	{
		excludeSites = (miParam === trueText ? true : false);
	}
	miParam = GM_getValue("notAllowedSites", xText);
	if (miParam != xText)
	{
		notAllowedSites = miParam.split(",");
	}
	var miParam = GM_getValue("excludeUsers", xText);
	if (miParam != xText)
	{
		excludeUsers = (miParam === trueText ? true : false);
	}
	miParam = GM_getValue("notAllowedUsers", xText);
	if (miParam != xText)
	{
		notAllowedUsers = miParam.split(",");
	}
	miParam = GM_getValue("flagRestricted", xText);
	if (miParam != xText)
	{
		flagRestricted = (miParam === trueText ? true : false);
	}
}

function showActiveStates()
{
	var sNode = document.getElementById("mondo_image_extensionlist");
	sNode.style.backgroundColor = (sNode.disabled ? lightgrayColor : whiteColor);
	var checkNode = document.getElementById("mondo_image_sitefilter");
	sNode = document.getElementById("mondo_image_sitelist");
	checkNode.style.backgroundColor = (checkNode.disabled ? lightgrayColor : whiteColor);
	sNode.style.backgroundColor = (sNode.disabled ? lightgrayColor : whiteColor);
	checkNode = document.getElementById("mondo_image_userfilter");
	sNode = document.getElementById("mondo_image_userlist");
	checkNode.style.backgroundColor = (checkNode.disabled ? lightgrayColor : whiteColor);
	sNode.style.backgroundColor = (sNode.disabled ? lightgrayColor : whiteColor);
	checkNode = document.getElementById("mondo_image_textfilter");
	sNode = document.getElementById("mondo_image_textlist");
	checkNode.style.backgroundColor = (checkNode.disabled ? lightgrayColor : whiteColor);
	sNode.style.backgroundColor = (sNode.disabled ? lightgrayColor : whiteColor);
	checkNode = document.getElementById("mondo_image_stopsitefilter");
	sNode = document.getElementById("mondo_image_stopsitelist");
	checkNode.style.backgroundColor = (checkNode.disabled ? lightgrayColor : whiteColor);
	sNode.style.backgroundColor = (sNode.disabled ? lightgrayColor : whiteColor);
	checkNode = document.getElementById("mondo_image_stopuserfilter");
	sNode = document.getElementById("mondo_image_stopuserlist");
	checkNode.style.backgroundColor = (checkNode.disabled ? lightgrayColor : whiteColor);
	sNode.style.backgroundColor = (sNode.disabled ? lightgrayColor : whiteColor);
}

// input field enabled or disabled according to controlling checkbox
function setInputStatusByCheckBox(checkBox, inputBox)
{
	var checkNode = document.getElementById(checkBox);
	var sNode = document.getElementById(inputBox);
	if (checkNode.checked == true)
	{
		sNode.disabled = false;
	}
	else
	{
		sNode.disabled = true;
	}
}

function setSiteListStatus(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	setInputStatusByCheckBox("mondo_image_sitefilter", "mondo_image_sitelist");
	showActiveStates();
}

function setUserListStatus(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	setInputStatusByCheckBox("mondo_image_userfilter", "mondo_image_userlist");
	showActiveStates();
}

function setTextListStatus(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	setInputStatusByCheckBox("mondo_image_textfilter", "mondo_image_textlist");
	showActiveStates();
}

function setStopSiteListStatus(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	setInputStatusByCheckBox("mondo_image_stopsitefilter", "mondo_image_stopsitelist");
	showActiveStates();
}

function setStopUserListStatus(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	setInputStatusByCheckBox("mondo_image_stopuserfilter", "mondo_image_stopuserlist");
	showActiveStates();
}

function disableEverything()
{
	var sNode = document.getElementById("mondo_image_extensionlist");
	sNode.disabled = true;
	var checkNode = document.getElementById("mondo_image_sitefilter");
	checkNode.disabled = true;
	sNode = document.getElementById("mondo_image_sitelist");
	sNode.disabled = true;
	checkNode = document.getElementById("mondo_image_userfilter");
	checkNode.disabled = true;
	sNode = document.getElementById("mondo_image_userlist");
	sNode.disabled = true;
	checkNode = document.getElementById("mondo_image_textfilter");
	checkNode.disabled = true;
	sNode = document.getElementById("mondo_image_textlist");
	sNode.disabled = true;

	checkNode = document.getElementById("mondo_image_stopsitefilter");
	checkNode.disabled = true;
	sNode = document.getElementById("mondo_image_stopsitelist");
	sNode.disabled = true;
	checkNode = document.getElementById("mondo_image_stopuserfilter");
	checkNode.disabled = true;
	sNode = document.getElementById("mondo_image_stopuserlist");
	sNode.disabled = true;

	showActiveStates();
}

function enableControls()
{
	var sNode = document.getElementById("mondo_image_extensionlist");
	sNode.disabled = false;
	var checkNode = document.getElementById("mondo_image_sitefilter");
	checkNode.disabled = false;
	checkNode = document.getElementById("mondo_image_userfilter");
	checkNode.disabled = false;
	checkNode = document.getElementById("mondo_image_textfilter");
	checkNode.disabled = false;
	checkNode = document.getElementById("mondo_image_stopsitefilter");
	checkNode.disabled = false;
	checkNode = document.getElementById("mondo_image_stopuserfilter");
	checkNode.disabled = false;
	setInputStatusByCheckBox("mondo_image_sitefilter", "mondo_image_sitelist");
	setInputStatusByCheckBox("mondo_image_userfilter", "mondo_image_userlist");
	setInputStatusByCheckBox("mondo_image_textfilter", "mondo_image_textlist");
	setInputStatusByCheckBox("mondo_image_stopsitefilter", "mondo_image_stopsitelist");
	setInputStatusByCheckBox("mondo_image_stopuserfilter", "mondo_image_stopuserlist");
	showActiveStates();
}

function updateMasterSwitch(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	var checkNode = document.getElementById("mondo_image_masterswitch");
	if (checkNode.checked == true)
	{
		// always force restricted image placeholder reset
		checkNode = document.getElementById("mondo_image_flagRestricted");
		checkNode.checked = false;
		disableEverything();
	}
	else
	{
		enableControls();
	}
}

function massageInput(sInput)
{
	if (!sInput.length)
	{
		return [ "" ];
	}
	sInput = sInput.replace(/;/g, ",");	// semicolons to commas
	while (sInput.match(/(,,)|(,\s+)|(\s+,)/) ||
		sInput.match(/(^\s+)|(\s+$)|(^,)|(,$)/))
	{
		sInput = sInput.replace(/(,,)|(,\s+)|(\s+,)/g, ",");
		sInput = sInput.replace(/(^\s+)|(\s+$)|(^,)|(,$)/g, "");
	}
	if (!sInput.length)
	{
		return [ "" ];
	}
	var aHold = sInput.split(",");
	return aHold;
}

function resetToDefaults(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	// force master switch reset
	var checkNode = document.getElementById("mondo_image_masterswitch");
	checkNode.checked = false;
	// force restricted image placeholder reset
	var checkNode = document.getElementById("mondo_image_flagRestricted");
	checkNode.checked = false;
	
	var sNode = document.getElementById("mondo_image_extensionlist");
	sNode.value = aDefaultExtensions.join(",");
	sNode.disabled = false;
	checkNode = document.getElementById("mondo_image_sitefilter");
	checkNode.disabled = false;
	checkNode.checked = true;
	sNode = document.getElementById("mondo_image_sitelist");
	sNode.value = aDefaultSites.join(",");
	sNode.disabled = false;
	checkNode = document.getElementById("mondo_image_userfilter");
	checkNode.disabled = false;
	checkNode.checked = false;
	sNode = document.getElementById("mondo_image_userlist");
	sNode.value = "";
	sNode.disabled = true;
	checkNode = document.getElementById("mondo_image_textfilter");
	checkNode.disabled = false;
	checkNode.checked = false;
	sNode = document.getElementById("mondo_image_textlist");
	sNode.value = "";
	sNode.disabled = true;

	checkNode = document.getElementById("mondo_image_stopsitefilter");
	checkNode.disabled = false;
	checkNode.checked = false;
	sNode = document.getElementById("mondo_image_stopsitelist");
	sNode.value = "";
	sNode.disabled = true;
	checkNode = document.getElementById("mondo_image_stopuserfilter");
	checkNode.disabled = false;
	checkNode.checked = false;
	sNode = document.getElementById("mondo_image_stopuserlist");
	sNode.value = "";
	sNode.disabled = true;
	sNode = document.getElementById("mondo_image_maxHeight");
	sNode.value = defaultLimitMaxHeight;
	sNode = document.getElementById("mondo_image_maxWidth");
	sNode.value = defaultLimitMaxWidth;

	showActiveStates();
}

function gatherInfo()
{
	var sNode = document.getElementById("mondo_image_extensionlist");
	allowedExtensions = massageInput(sNode.value);
	var checkNode = document.getElementById("mondo_image_sitefilter");
	limitSites = checkNode.checked;
	sNode = document.getElementById("mondo_image_sitelist");
	allowedSites = massageInput(sNode.value);
	checkNode = document.getElementById("mondo_image_userfilter");
	limitUsers = checkNode.checked;
	sNode = document.getElementById("mondo_image_userlist");
	allowedUsers = massageInput(sNode.value);
	checkNode = document.getElementById("mondo_image_textfilter");
	limitText = checkNode.checked;
	sNode = document.getElementById("mondo_image_textlist");
	allowedText = massageInput(sNode.value);
	checkNode = document.getElementById("mondo_image_masterswitch");
	masterSwitchSet = checkNode.checked;
	sNode = document.getElementById("mondo_image_maxHeight");
	limitMaxHeight = sNode.value;
	sNode = document.getElementById("mondo_image_maxWidth");
	limitMaxWidth = sNode.value;
	checkNode = document.getElementById("mondo_image_stopsitefilter");
	excludeSites = checkNode.checked;
	sNode = document.getElementById("mondo_image_stopsitelist");
	notAllowedSites = massageInput(sNode.value);
	checkNode = document.getElementById("mondo_image_stopuserfilter");
	excludeUsers = checkNode.checked;
	sNode = document.getElementById("mondo_image_stopuserlist");
	notAllowedUsers = massageInput(sNode.value);
	checkNode = document.getElementById("mondo_image_flagRestricted");
	flagRestricted = checkNode.checked;
}

function saveUserParams(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	gatherInfo();
	saveInfoToStore();
	boxUp = 0;
//	mondo_image_paramBox.style.width = "0px";
//	mondo_image_paramBox.style.height = "0px";
//	mondo_image_paramBox.style.visibility = "hidden";
	mondo_image_paramBox = mondo_image_paramBox.parentNode.removeChild(mondo_image_paramBox);
}

function cancelParamBox(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	showCurrentParams();	// reset to entry status
	boxUp = 0;
//	mondo_image_paramBox.style.width = "0px";
//	mondo_image_paramBox.style.height = "0px";
//	mondo_image_paramBox.style.visibility = "hidden";
	mondo_image_paramBox = mondo_image_paramBox.parentNode.removeChild(mondo_image_paramBox);
}

function showCurrentParams()
{
	var sNode = document.getElementById("mondo_image_extensionlist");
	sNode.value = allowedExtensions.join(",");
	var checkNode = document.getElementById("mondo_image_sitefilter");
	checkNode.checked = limitSites;
	sNode = document.getElementById("mondo_image_sitelist");
	sNode.value = allowedSites.join(",");
	checkNode = document.getElementById("mondo_image_userfilter");
	checkNode.checked = limitUsers;
	sNode = document.getElementById("mondo_image_userlist");
	sNode.value = allowedUsers.join(",");
	checkNode = document.getElementById("mondo_image_textfilter");
	checkNode.checked = limitText;
	sNode = document.getElementById("mondo_image_textlist");
	sNode.value = allowedText.join(",");
	sNode = document.getElementById("mondo_image_maxHeight");
	sNode.value = limitMaxHeight;
	sNode = document.getElementById("mondo_image_maxWidth");
	sNode.value = limitMaxWidth;

	checkNode = document.getElementById("mondo_image_stopsitefilter");
	checkNode.checked = excludeSites;
	sNode = document.getElementById("mondo_image_stopsitelist");
	sNode.value = notAllowedSites.join(",");
	checkNode = document.getElementById("mondo_image_stopuserfilter");
	checkNode.checked = excludeUsers;
	sNode = document.getElementById("mondo_image_stopuserlist");
	sNode.value = notAllowedUsers.join(",");
	checkNode = document.getElementById("mondo_image_flagRestricted");
	checkNode.checked = flagRestricted;

	checkNode = document.getElementById("mondo_image_masterswitch");
	checkNode.checked = masterSwitchSet;
	if (masterSwitchSet)
	{
		disableEverything();
	}
	else
	{
		enableControls();
	}
}

function simpleAdvancedSwitch(event)
{
	if (event != null)
	{
		event.stopPropagation();
	}
	var simpleNode = document.getElementById("mondo_image_simple");
	var advancedNode = document.getElementById("mondo_image_advanced");
	var buttonNode = document.getElementById("simpleAdvancedButton");
	var cNode = buttonNode.firstChild;
	if (cNode.nodeValue === "Advanced")
	{
		cNode.nodeValue = "Simple";
		simpleNode.style.width = "0px;"
		simpleNode.style.height = "0px;"
		simpleNode.style.visibility = "hidden";
		advancedNode.style.width = "auto";
		advancedNode.style.height = "auto";
		advancedNode.style.visibility = "visible";
	}
	else
	{
		cNode.nodeValue = "Advanced";
		advancedNode.style.width = "0px;"
		advancedNode.style.height = "0px;"
		advancedNode.style.visibility = "hidden";
		simpleNode.style.width = "auto";
		simpleNode.style.height = "auto";
		simpleNode.style.visibility = "visible";
	}
}

function buildParamBox()
{
	var addHeader =
		'td.mondo_image_basicstyle { margin-left: 120px; }' +
		'td.mondo_image_basicstyle INPUT,td.mondo_image_basicstyle DIV,td.mondo_image_basicstyle SPAN' +
		'{ font: 12px Verdana, Arial, Helvetica, sans-serif; }' +
		'td.mondo_image_basicstyle INPUT' +
		'{ background-color: white }' +
		'td.mondo_image_basicstyle SPAN { color: darkblue }' +
		'.mondo_image_title { font-weight: bold !important; font-size: 18px !important; padding-bottom: 8px; margin-left: 30px; }' +
		'.mondo_image_userinput { margin-left: 30px; margin-right: 16px; width: 400px; }' +
		'.mondo_image_limitinput { width: 70px; }' +
		'.mondo_image_checks { margin-left: 5px; }' +
		'.mondo_image_checktext { line-height: 24px !important; }' +
		'button.mondo_image { width: 80px; position: absolute; bottom: 10px; }';
	var test_style = document.createElement("style");
	test_style.setAttribute('type', 'text/css');
	test_style.innerHTML = addHeader;
	document.getElementsByTagName('head')[0].appendChild(test_style);

	mondo_image_paramBox = document.createElement("td");
	mondo_image_paramBox.className = "mondo_image_basicstyle";
	mondo_image_paramBox.style.lineHeight = "26px";
	mondo_image_paramBox.style.color = "darkblue";
	mondo_image_paramBox.style.position = "fixed";
	mondo_image_paramBox.style.bottom = "40px";
	mondo_image_paramBox.style.left = "5px";
	mondo_image_paramBox.style.backgroundColor = "#FFCFCF";
	mondo_image_paramBox.style.borderColor = "black";
	mondo_image_paramBox.style.borderWidth = "1px";
	mondo_image_paramBox.style.borderStyle = "solid";
	mondo_image_paramBox.style.opacity = ".94";

	var paramBoxHtml =
		'<div class="mondo_image_title">Mondo Image</div>' +
		'<div id="mondo_image_simple">' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"></span>Only expand images with these extensions:</div>' +
		'<div><input id="mondo_image_extensionlist" class="mondo_image_userinput" type="text"></div>' +
		'<br>' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"><input id="mondo_image_sitefilter" type="checkbox"></span>Only expand images from these sites:</div>' +
		'<div><input id="mondo_image_sitelist" class="mondo_image_userinput" type="text"></div>' +
		'<br>' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"><input id="mondo_image_userfilter" type="checkbox"></span>Only expand images in messages from these users:</div>' +
		'<div><input id="mondo_image_userlist" class="mondo_image_userinput" type="text"></div>' +
		'<br>' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"><input id="mondo_image_textfilter" type="checkbox"></span>Only expand images in messages containing this text:&nbsp;&nbsp</div>' +
		'<div><input id="mondo_image_textlist" class="mondo_image_userinput" type="text"></div>' +
		'<br>' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"><input id="mondo_image_masterswitch" type="checkbox"></span>Turn off image expansion - <b>Master Override</b></div>' +
		'</div>' +
		'<div id ="mondo_image_advanced" style="visibility: hidden; width:0px; height:0px;">' +
		'<div><span class="mondo_image_userinput">Maximum image size&nbsp;&nbsp;&nbsp;Height:&nbsp;' +
		'<input id="mondo_image_maxHeight" class="mondo_image_limitinput" type="text">' +
		'&nbsp;&nbsp;Width:&nbsp;<input id="mondo_image_maxWidth" class="mondo_image_limitinput" type="text"></span></div>' +
		'<br>' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"><input id="mondo_image_stopsitefilter" type="checkbox"></span>Never expand images from these sites:</div>' +
		'<div><input id="mondo_image_stopsitelist" class="mondo_image_userinput" type="text"></div>' +
		'<br>' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"><input id="mondo_image_stopuserfilter" type="checkbox"></span>Never expand images from these users:</div>' +
		'<div><input id="mondo_image_stopuserlist" class="mondo_image_userinput" type="text"></div>' +
		'<br>' +
		'<div class="mondo_image_checktext"><span class="mondo_image_checks"><input id="mondo_image_flagRestricted" type="checkbox"></span>Show restricted images placeholder with inline image link.</b></div>' +
		'</div>' +
		'</div>' +
		'<br><br>';
	mondo_image_paramBox.innerHTML = paramBoxHtml;

	var resetNode = document.createElement(buttonText);
	resetNode.setAttribute("class", "mondo_image");
	resetNode.style.marginLeft = "30px";
	resetNode.appendChild(document.createTextNode("Reset"));
	var simpleAdvancedNode = document.createElement(buttonText);
	simpleAdvancedNode.setAttribute("class", "mondo_image");
	simpleAdvancedNode.setAttribute("id", "simpleAdvancedButton");
	simpleAdvancedNode.style.marginLeft = "