WME URCom

This script is for replying to user requests the goal is to speed up and simplify the process. Thanks to Chat Jumper and URO+!

Install this script?
Author's suggested script

You may also like WME Send to Slack.

Install this script
// ==UserScript==
// @name           WME URCom
// @description    This script is for replying to user requests the goal is to speed up and simplify the process. Thanks to Chat Jumper and URO+!
// @namespace      https://gitlab.com/WMEScripts
// @grant          none
// @grant          GM_info
// @version        2024.03.22.01
// @match          https://editor-beta.waze.com/*editor*
// @match          https://beta.waze.com/*editor*
// @match          https://www.waze.com/*editor*
// @author         tunisiano187 based on Rick Zabel '2014, maintained by GyllieGyllie
// @license        MIT/BSD/X11
// @compatible     chrome firefox
// @require         https://greasyfork.org/scripts/24851-wazewrap/code/WazeWrap.js
// @supportURL      mailto:incoming+WMEScripts/URComments-French@incoming.gitlab.com
// @contributionURL https://ko-fi.com/tunisiano
// @icon			data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAcCAYAAACUJBTQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAATaSURBVEhLhVZbbJRFFD4ze+l2W1t7oxfqYgRNG6uiNqAmJqjYUCWx0fBgCApKfNAoaKKJicilb8bXPoBoCfES00R4UBMTQknUxJqixZQIbjQUtrgtbaHb7i57+Wc85/wzv9t/m/Ltnp1zzsx3vrnt/itgBejz28IpuPakVqoPtO7WAK1SQKNSMCME/CuFGNVSnqyBptPi3qG8oZVhWRGttwXm/0ju0lofxKht6TCUKqddFULsr72/ZVCIIcfkPJSNzpzb1J5XxZMo8LDtRR9dDChGH3AZNk9AAVcb4GxFINQXfeBMgiMDU8bFjXOPPwRF9Z3SqoViIrOAaf05gsYXT8D4EmQStHz29u4ff+MkwhPJjD26Ol+AUQXaFcAXkSxs7M+XoqQvGQlFu6PrT09SIOmDziCX1yeUwhXQGIVDteLWi/G0y/K0Ov8Y12/JFTInqC5GKI24/svGV3DIp8ThhLc+t07wti4IVnWCDDdBMR2H4sLvoAsz3Gd2jeHn48perXtk5DOhR18LzRXG/sER7ZZFY9ADGWqE6NoPIFz3GJMstHMTspcH4Gbya4rQTFUfH88tURdaf5e48fPGHkc7P9CMqMP7kFGoffArCERWU2JZZK8cRbHD7JfxaR2YkwHokUoVn6MZaAf3k4xmg+/omjdWFCBE2ndCoHIdc/x8wPPReE6qoPskOhvcwzPGB6wg3NQLxdQ4LIzvcSsiVG4aUmO7sGCWYyGCEG58mg66jF8itEHiZ6u9FaRMBBFuw/OoARlpQ7EtXJAggrUQXrUV9yBiMngpqju9W2X51FKOY61bUQRW0Qx4uXY27s3G21QPFc297BNEoAIibS/QgZoMQKDmPuTg96OUjyas76gmqR0n5S3XzMJJJ0AX06bMypDBatyyzUv4JOiuioUXJCjAnwG7PExip1BFvDlfmjK3RiS2Yykf67MotVgft0uPkDJ3kLoRzMQHIH/tJ6pxSwhcjZ/PqyHTakRKJU+5h+buqdsSoQALZ1+HxfMHMVfkYsshO/EFpH7dXc5Hn4Sl0qeEHt4Umc1OJTDXwN8eAgYW5FXdsxeCNR0oeIjFtZOD6q59fG6L4wfcgQQfH8PZhsrmds7Oft+5Tzn6kC1dcnkYxCnl++fCMfp+vpTiw4Zn/uznu1oPd36ETZxYdPXce44Ubum8TI7P7v9+75rSWOPbflSMm7r2lw3E1W/u7ggGxTASmilNsyGehRebWbsflm587kNfiCkZCD/RuHX8AmXcbx2m256P/zV3XfTg+Gnzc4DmHibFClfB997LI8v0sW/6EFOpeWczClykgGBFGB0vX7xweTrfi6QEkeh2WCH2uajZJsx7YqbFiSUmpwtb1r30tydA4CcXghZKJo98Oz9bFQ0c74yFoqEAdCE5RE8Ifq5bIXzzU4N9jrPZnDp8dDi9/cX9k/TIxSSDWypMoBWRT6Ke9e9ort/+VOXeqqh4C+OlIDoyFjLq46EzuYH3jyXnMEN/h0qNRuEvmwsrQi0ZiVhfxgdje2oq5QH7L8XUh7lF/W7n7olP0MX9YqPC1idbIkKtNStIQjYHl46tebuyAvqJhkcP6bx8Z+3OS0eoD2ELerM3OQL5jFIBKh40Fi6xiivHY+8lP79jZmIw9qavL4RG4+1W24kiAP4DWJsUPMbPec8AAAAASUVORK5CYII=

// ==/UserScript==
const ScriptName = GM_info.script.name;
const URCommentVersion = GM_info.script.version;//var URCommentVersion = "1.5.4"; //branched from 0.9.3
const URCommentUpdateMessage = "yes"; // yes alert the user, no has a silent update.

/* Changelog
1.9.2 - Sizing Signature field
1.9.3 - Details about the Signature and the refresh need
1.9.4 - Relocate Signature settings
1.9.5 - Auto email errors
1.9.6 - Pictures in pills
1.9.7 - Pills corrections
1.9.8 - Title and pills updates
1.9.9 - Credits et corrections
1.9.10 - Bug closure text correction
1.9.11 - Design and some corrections
1.9.12 - icons before comments in the comments tab
1.9.13 - Don't complete comments, disable textarea and hide send button id the UR is locked (Out of editing area) or closed
1.9.14 - Adding Francais Belgique à la liste
2018.07.18.01 - New versionning numbers to ease the checks for last update
2018.08.04.01 - Adding the NL version
2018.08.08.01 - Signature even if no predefined answer found
2018.08.12.01 - Local version update
2018.08.15.01 - Adding the ability to add Titles in the comments part
2018.08.15.02 - Translator's name
2018.08.15.03 - Removing the open database option for now
2018.08.15.04 - Bad comment break the script
2018.08.15.05 - Title spaces
2018.08.15.06 - Test text moved
2018.08.16.01-03 - Design changes
2018.08.16.04 - Bug correction
2018.08.17.01 - Handling the ending dot on comments title that breaks the autocomplete
2018.08.18.01-03 - Change URCom logo + Design
2018.08.21.01
2018.09.02.01 - undefined mask
2019.05.19.01 - Adapt timeout to avoid useless messages
2019.08.15.01 - Adapt to the new WME version
2019.11.24.01 - Yellow Background if message from the user
2020.01.18.01 - Support of unknown reports
2020.01.18.02 - remove alert
2020.01.13.01 - Solving signature's return problem
2020.02.15.01 - Error version number
2020.04.12.01 - Add user's message in the (..) answer
2020.08.07.01 - Remove the line that hide the textarea
2023.06.04.01 - New design based on current WME styling
2023.06.16.01 - Major code overhaul & bug fixing
2023.06.16.02 - Fix migration logic being broken
2023.06.18.01 - Filter cleanup, small fixes, new features
2023.07.03.01 - Add feature to create custom responses
2023.08.03.01 - Fixes after new WME Update
2023.08.03.02 - Fixes after WME update rollback
2023.08.15.01 - Change how custom list data is stored to fix all browser support
2023.08.16.01 - Small fix to changes from yesterday
2023.08.21.01 - Small fix in migration logic being broken if you use script first time
2024.03.22.01 - Fix auto response no longer working
*/

//here is my todo; remove ur count, instruction link in new window

let URCommentVersionUpdateNotes = "UR Comments has been updated to " + URCommentVersion + "<br />";
URCommentVersionUpdateNotes = URCommentVersionUpdateNotes + "<br />" + "- Fix issue where script no longer opened the sidebar & auto replied to URs after the last WME update";
URCommentVersionUpdateNotes = URCommentVersionUpdateNotes + "<br /><br />" + "Known issue:";
URCommentVersionUpdateNotes = URCommentVersionUpdateNotes + "<br />" + "UR Pills showing amount days & comments no longer works due to how WME now renders the UR Icons. We are trying to find a fix but it may not be possible to fix this.";

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////
////// Define items that need to be at the root level so they can be used inside functions
//////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

let migrate = false;
const options = loadOptions();

// If we need to migrate, do the migration now
if (migrate) {
	migrateOptions();
}

// Now validate the options are ok
validateOptions(options);

// Use this for counting how many times we waited for waze to finish a task..
// currently used to write to the console so the code is easier to debug
// in the future we might do actions if we waited to long
let PauseCount = 1;

let DB;

// These are the names of the comments lists built into the script and will show up in the comment list drop down
const BoilerPlateCreatorsArray = [
	"URComDefault",
	"Custom",
	"Luxembourg",
//  "FRNL_Belgique", // Bilingue FR/NL maintainer Acidoxy
	"Francais_Belgique", //maintained tiniebongoetc https://greasyfork.org/fr/scripts/370207-wme-urcom-francais-belgique
	"Nederlands", //maintainer WimVandierendonck
];

// Get the SelectedBoilerPlateCreator
let SelectedBoilerPlateCreator = options.BoilerPlateCreators;

// If the comment list hasn't been chosen default to the URComDefault's list
if (SelectedBoilerPlateCreator === "" || SelectedBoilerPlateCreator === null || SelectedBoilerPlateCreator === "rickzabel") {
    SelectedBoilerPlateCreator = "URComDefault";
    options.BoilerPlateCreators = SelectedBoilerPlateCreator;
    saveOptions(options);
}

let CustomLists = [];
let CustomListText = [];
let InitReady = false;

let ShowTextEditFields = false;
let ShowTextOptionButtons = true;
let TextEditIndex = undefined;
let DeleteTextMode = false;

// Array that holds the comments
let URCommentsArray = [];

// These are the holders for the position in the comments list that the reminder and close messages are at
let ReminderPosition = "";
let CloseNotIdentifiedPosition = "";

const def_names = []; // Default waze message array
const URC_Text = []; // URC text
const URC_URL = []; // URC URL
const URC_Text_tooltip = []; // URC tool-tip text
const URC_USER_PROMPT = []; // URC Alerts, Confirmations, and orange box messages
let TranslatorsName = "";

// Waze swaps out the close button on the UR window after you click send. we use this to grab the close and compare to the new one
let CloseButtonHolder = "";
// Since we are scanning for open UR I need to keep track of the current urID so the comments can be overridden
let UrCommentLasturID = "";

// This is used to hold the info about the previous tab, before we auto switched tabs
let PreviousTab = null;
let PreviousTabPosition = null;

// Used to track if we are switching languages
let ChangeLanguage = false;

// Return to zoom instead of zoom 0
let ReturnToCurrentZoom = "";

//var UrCommentsIcon = 'data:image/png;base64,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';
const UrCommentsIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAcCAYAAACUJBTQAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAATaSURBVEhLhVZbbJRFFD4ze+l2W1t7oxfqYgRNG6uiNqAmJqjYUCWx0fBgCApKfNAoaKKJicilb8bXPoBoCfES00R4UBMTQknUxJqixZQIbjQUtrgtbaHb7i57+Wc85/wzv9t/m/Ltnp1zzsx3vrnt/itgBejz28IpuPakVqoPtO7WAK1SQKNSMCME/CuFGNVSnqyBptPi3qG8oZVhWRGttwXm/0ju0lofxKht6TCUKqddFULsr72/ZVCIIcfkPJSNzpzb1J5XxZMo8LDtRR9dDChGH3AZNk9AAVcb4GxFINQXfeBMgiMDU8bFjXOPPwRF9Z3SqoViIrOAaf05gsYXT8D4EmQStHz29u4ff+MkwhPJjD26Ol+AUQXaFcAXkSxs7M+XoqQvGQlFu6PrT09SIOmDziCX1yeUwhXQGIVDteLWi/G0y/K0Ov8Y12/JFTInqC5GKI24/svGV3DIp8ThhLc+t07wti4IVnWCDDdBMR2H4sLvoAsz3Gd2jeHn48perXtk5DOhR18LzRXG/sER7ZZFY9ADGWqE6NoPIFz3GJMstHMTspcH4Gbya4rQTFUfH88tURdaf5e48fPGHkc7P9CMqMP7kFGoffArCERWU2JZZK8cRbHD7JfxaR2YkwHokUoVn6MZaAf3k4xmg+/omjdWFCBE2ndCoHIdc/x8wPPReE6qoPskOhvcwzPGB6wg3NQLxdQ4LIzvcSsiVG4aUmO7sGCWYyGCEG58mg66jF8itEHiZ6u9FaRMBBFuw/OoARlpQ7EtXJAggrUQXrUV9yBiMngpqju9W2X51FKOY61bUQRW0Qx4uXY27s3G21QPFc297BNEoAIibS/QgZoMQKDmPuTg96OUjyas76gmqR0n5S3XzMJJJ0AX06bMypDBatyyzUv4JOiuioUXJCjAnwG7PExip1BFvDlfmjK3RiS2Yykf67MotVgft0uPkDJ3kLoRzMQHIH/tJ6pxSwhcjZ/PqyHTakRKJU+5h+buqdsSoQALZ1+HxfMHMVfkYsshO/EFpH7dXc5Hn4Sl0qeEHt4Umc1OJTDXwN8eAgYW5FXdsxeCNR0oeIjFtZOD6q59fG6L4wfcgQQfH8PZhsrmds7Oft+5Tzn6kC1dcnkYxCnl++fCMfp+vpTiw4Zn/uznu1oPd36ETZxYdPXce44Ubum8TI7P7v9+75rSWOPbflSMm7r2lw3E1W/u7ggGxTASmilNsyGehRebWbsflm587kNfiCkZCD/RuHX8AmXcbx2m256P/zV3XfTg+Gnzc4DmHibFClfB997LI8v0sW/6EFOpeWczClykgGBFGB0vX7xweTrfi6QEkeh2WCH2uajZJsx7YqbFiSUmpwtb1r30tydA4CcXghZKJo98Oz9bFQ0c74yFoqEAdCE5RE8Ifq5bIXzzU4N9jrPZnDp8dDi9/cX9k/TIxSSDWypMoBWRT6Ke9e9ort/+VOXeqqh4C+OlIDoyFjLq46EzuYH3jyXnMEN/h0qNRuEvmwsrQi0ZiVhfxgdje2oq5QH7L8XUh7lF/W7n7olP0MX9YqPC1idbIkKtNStIQjYHl46tebuyAvqJhkcP6bx8Z+3OS0eoD2ELerM3OQL5jFIBKh40Fi6xiivHY+8lP79jZmIw9qavL4RG4+1W24kiAP4DWJsUPMbPec8AAAAASUVORK5CYII=';
const UrCommentsTextPic = '<img alt="" style="margin-bottom: 1px; height: 12px;" src="data:image/png;base64,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\" />'; // Picture of the number of comments
const UrCommentsTimePic = '<img alt="" style=\"margin-bottom: 1px; height: 12px;" src=\"data:image/png;base64,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\" />'; // Delay picture
const URC_img_waze_editor = '<img alt="" style="height: 15px; margin-right: 5px;" src="data:image/png;base64,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" />';
const MagnifyingIcon = '<img alt="" style="margin-bottom: 1px; height: 12px;" src="data:image/png;base64,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" />';
const RefreshIcon = '<img alt="" style="margin-bottom: 1px; height: 12px;" src="data:image/png;base64,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\n" />';

// Keep references to our html elements
let scriptContentPane;

let nConfirm;

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////
////// bootstrap
//////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Now we use this to load the arrays, but we wait till the me tab & loads, this gives the custom comments file a chance to also load
async function URComments_bootstrap() {

	await initDatabase();

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// these is the array used to store the ur comments
	// comment arrays should follow the format
	// "Title",     * is what will show up in the ur comment tab
	// "comment",   * is the comment that will be sent to the user currently
	// "URStatus"   * this is action to take when the option "Auto Click Open, Solved, Not Identified" is on.
	//					after clicking send it will click one of those choices. usage is. "Open", or "Solved",or "NotIdentified",
	/////////////////////////////////////////////////////////////////////////////////////////////////////////////

	if (options.BoilerPlateCreators === "URComDefault") {

		URCommentsArray = [
			"No further communication",
			"No further information was received and the request is being closed. As you travel, please feel welcome to report any map issues you encounter. Thanks!",
			"Solved", //t0cableguy 12/8/14 //rickzabel 12/8/14 , karlcr9911 12/8/14

			"Fixed",
			"Thanks to your report we have found and fixed a problem with the map. The fix should reach mobile devices within a few days. On rare occasions it can take closer to a week.", //GizmoGuy 4/13/15
			"Solved",

			"Address Adjustments",
			"Thanks! The address has been adjusted. This should reach mobile devices within a few days. On rare occasions it can take closer to a week.", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"Solved",

			"Address in correct spot",
			"The live map is currently showing your address in the correct spot. Please remove any instance of this address from your history and favorites by tapping the 'i' within the blue circle and then 'remove from history'. Then search for the address. If you don't remove the old results from your navigation or favorites, you will continue to be routed to the old coordinates. Please submit another report if this does not resolve your issue. Thanks!",
			"Solved", //karlcr9911 rickzabel 4/3/2015

			"The road has been closed",
			"Volunteer responding - Thank you for your report. The road has been closed.", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"Solved", //requested by SkiDooGuy //changed to NotIdentified by karlcr9911 4/3/2015 //7/22/2015 changed to Solved by karlcr9911

			"Fixed Speed Limit",
			"The missing/incorrect speed limit you reported has been updated. Thank you!",
			"Solved", //karlcr9911 rickzabel

			"Address fishing",
			"Waze does not tell us your starting or ending destinations. Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel i use this one after i sent a message with Volunteer responding 1
			"Open",

			"Errors with no text",
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you please let us know what went wrong with the route Waze gave you? Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel 12/8/14
			"Open",

			"Reminder message", //do not change (rickzabel)
			"Just a reminder: We have not received a response on your report. If we don't hear back from you soon, we will infer everything is okay and close the report. Thanks!", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"Open",

			"No reply close message",
			"The problem was unclear and volunteers didn't receive a response, so we are closing this report. As you travel, please feel welcome to report any map issues you encounter. Thanks!", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"NotIdentified",

			"Speed Limit Already Set",
			"Volunteer responding; The speed limit here is already set correctly. In the future, please submit speed limit requests near the point where the speed limit changes. If the speed limit change is temporary due to construction, please advise and provide additional details. If you would like to see speed limits at all times while using the app, please go to Settings > Speedometer > Show speed limit.  Thank you!",
			"NotIdentified", //rickzabel karlcr9911 8/31/2016

			"App Bug",
			"Unfortunately, In this situation, there is nothing wrong with the map that we can adjust to prevent issues with the app. Please report this to https://support.google.com/waze/answer/6276841",
			"NotIdentified", //twintiggrz, t0cableguy, rickzabel 12/27/2015

			"Bad GPS",
			"Volunteer responding - It appears that your device was having GPS trouble. GPS signals do not travel through vehicles or tall buildings. Please make sure your device is somewhere with a clear view of the sky.", //rickzabel 12/18/2014
			"NotIdentified",

			"Valid Route",
			"Volunteer responding - We reviewed the issue and did not find any map errors. It looks like Waze provided you with a valid route. Try the Waze suggested route a few times, as it may turn out to actually be faster. If not you'll be teaching Waze that that route is slower, and the faster route will become preferred.", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"NotIdentified",

			"Valid Left turns",
			"Volunteer responding - If you wait and complete the left turn, it may actually be faster than the alternative. If it’s not faster, your wait time will contribute to Waze’s database, thus helping to discourage the routing server from suggesting left turns at that intersection. We also suggest if you do not feel comfortable making such left turns, you can always go another route and let Waze recalculate.", //karlcr9911 4/4/15 //rickzabel 4/5/15
			"NotIdentified",

			"Valid Left turns 2",
			"Volunteer responding – We cannot disable legal turns only because they are difficult. If you wait and complete the left turn, it may actually be faster than the alternative. If it’s not faster, your wait time will contribute to Waze’s database, thus helping to discourage the routing server from suggesting left turns at that intersection. We also suggest if you do not feel comfortable making such left turns, you can always go another route and let Waze recalculate.", //karlcr9911 4/4/15 //rickzabel 4/5/15
			"NotIdentified",

			"Valid but Difficult Route",
			"Volunteer responding – We cannot disable legal routes only because they are difficult. If you wait and complete the route, it may actually be faster than the alternative. If it’s not faster, your wait time will contribute to Waze’s database, thus helping to discourage the routing server from suggesting the route. We also suggest if you do not feel comfortable, you can always go another route and let Waze recalculate.", //karlcr9911 4/4/15 //rickzabel 4/5/15
			"NotIdentified",

			"Missing place",
			"Volunteer responding - Thank you for reporting a missing place.  Anytime you find a a place that is missing from the waze app you can add it from the app by tapping the Pin icon > Place. After taking a picture of the place please add as many details as you can. Thanks!",
			"NotIdentified",

			"California double yellow",
			"Volunteer responding, In California it is perfectly legal to make a left turn across one double yellow line. Turning across two double yellow lines, spaced apart 2 feet or more, is considered a barrier, and is illegal to cross. Thanks!", //rz 2/26/15 //karlcr9911 4/4/15
			"NotIdentified",

			"Detours / Odd-Routing",
			"Volunteer responding - We can't find anything on the map to explain the route Waze gave you. Waze will route complex detours to save a few seconds. We are very sorry to say that map editors cannot be helpful in this situation. Thanks!", //rickzabel 4/18/20115
			"NotIdentified",

			"Overall Waze complaint",
			"Volunteer responding - You can help make Waze better by reporting problems as you find them. Please include as many details as possible? Thanks!",
			"NotIdentified", //rickzabel Pesach 12/22/14

			"Report to local municipality",
			"Volunteer responding - We are only able to help with map issues. This should be reported to the local municipality. Please feel welcome to report any map issues you encounter. Thanks!", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"NotIdentified",

			"No user transponder (avoid tolls)",
			"Volunteer responding -  While Waze attempts to route you to your destination efficiently, it does not know if you have a toll transponder. To avoid tolls, there is an option under Settings > Navigation or after clicking GO tap Routes and select one without the toll icon. Thanks!", //rickzabel 11/24/2016
			"NotIdentified",

			"No user transponder",
			"Volunteer responding - While Waze attempts to route you to your destination efficiently, it does not know if you have a toll transponder.  We are very sorry to say that the volunteer map editors cannot be much help here. As you travel, please feel welcome to report any map issues you encounter. Thanks!", //rickzabel karlcr9911 4/18/2015
			"NotIdentified",

			"Not Using HOV",
			"Waze does not have the ability to know you meet the HOV criteria. Driving into the HOV lane should force Waze to recalculate your route. Afterwards you should be allowed to stay in the HOV lane. Thanks!", //rickzabel 12/14/14
			"NotIdentified",

			"U-turns",
			"Volunteer responding - Currently Waze will not tell you to make a \"U-turn\". It will route you in several left/right turns to effectively create a U-turn. This is a programming issue that cannot be changed by the volunteer map editors. We understand that Waze is working on a fix. Thanks!", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"NotIdentified",

			"Traffic - Stale Information",
			"Map editors are unable to remove traffic jams. You can help clear traffic reports by tapping \"not there\" when prompted or by traveling through the intersection at normal speed.", // rickzabel 7/22/2015 //t0cableguy 7/22/2015
			"NotIdentified",

			"Traffic - Jams",
			"To report a traffic jams please use the Waze app by clicking the pin in the lower right and then clicking Traffic Jam. Traffic Jam reports can help route you and other Wazers around traffic problems in real-time. Thanks!", // reworded - rickzabel 12/7/2014, karlcr9911 12/8/14
			"NotIdentified",

			"Signal Avoidance Bug",
			"There are no issues with the intersection’s turn restrictions. Waze's developers are working on a fix for this issue. We do not have an ETA. Please feel free to use the turn until the issue is resolved. Thanks!", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"NotIdentified",

			"Already included restrictions",
			"This restriction is already included in the map, Waze should not route through this illegal turn. If Waze ever gives you a route through a restricted turn, please send another Map Issue report at that time. Thanks!",
			"NotIdentified", //rickzabel Pesach 12/27/14

			"1000 mile limit",
			"The search and navigation capabilities of Waze are limited to 1000 miles. When driving further than that distance you will need to select a destination less than 1000 miles as your temporary destination.", //karlcr9911 4/5/15 //rickzabel 4/5/15
			"NotIdentified",

			"Temporary road blockage",
			"Volunteer responding - If the road is completely blocked, use the Report > Closure feature for you and others to be rerouted around it. Otherwise please use Report > Traffic. At a minimum Waze is learning that that route is slower, and a faster route will become preferred.", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"NotIdentified",

			"Temporary Road Closure",
			"Volunteer responding - For closures that last only a few days, the volunteer map editors cannot be much help. It takes at least that long for our edits to make it to the live map! When you encounter road closures in the future, please use the Report > Closure feature built into the Waze app. Thanks!",
			"NotIdentified",

			"Temporary Road Closure",
			"Do you know how long the road is going to be closed? For closures that last only a few days, the volunteer map editors cannot be much help. It takes at least that long for our edits to make it to the live map! When you encounter short-term road closures in the future, please use the Report > Closure feature built into the Waze app. If this is a long-term closure please respond and let us know as much as you can. Thanks!", // reworded - rickzabel 12/7/2014, karlcr9911 12/8/14
			"Open",

			"Closure clean-up",
			"Due to daily changing closures we are closing out the old requests to concentrate on the newest ones. For closures that last only a few days, the volunteer map editors cannot be much help. It takes at least that long for our edits to make it to the live map! When you encounter short-term road closures in the future, please use the Report > Closure feature built into the Waze app. Thanks!", //rickzabel 12/28/14
			"NotIdentified",

			"Thanks for the reply",
			"Thank you for the reply! This request will be closed. As you travel, please feel welcome to report any map issues you encounter.",
			"NotIdentified", //rickzabel 12/27/14

			"No further communication",
			"No further information was received and the request is being closed. As you travel, please feel welcome to report any map issues you encounter. Thanks!", //t0cableguy 12/8/14 //rickzabel 12/8/14 , karlcr9911 12/8/14
			"NotIdentified", // same comment different action based off UR status rickzabel 12/7/14, karlcr9911 12/7/14 // one sentence? rickzabel 12/7/14 t0cableguy 12/8/14

			"water non-editable",
			"This particular water feature is not editable by the volunteer editors, feel free to report this to support at https://support.google.com/waze/",
			"NotIdentified",

			"Clear TTS Cache",
			"Please clear your Text-to-Speech cache. In the navigate search box type cc@tts in the search field and press search. You will get a message that the TTS file has been cleared. Your TTS cache will be re-populated as you use routing.. Thanks!", //GizmoGuy411  t0cableguy rickzabel 2015-04-04
			"NotIdentified", //t0cableguy This should be a last chance option for fixing the issue.04-04-2015  //rickzabel 04-04-2015

			"<br>",
			"",
			"",

			"Problem appears corrected",
			"Just a reminder: The problem appears to be corrected. Please let us know if you are continuing to have the issue. If we do not hear from you in a few days we will close this report. Thanks!",
			"Open", //karlcr9911 12/7/14 t0cableguy 12/8/14 //rickzabel 12/8/14

			"Clears comment & sets UR status to Open",
			"",
			"Open",

			"Include Users Description",
			"Volunteer responding - You reported \"$URD\" and Waze did not send us enough information to fix your request. Would you please let us know what went wrong with the route Waze gave you? Would you tell us your destination as you entered it into Waze? Thanks!",
			"Open",

			// selected segments requires the use of https://greasyfork.org/en/scripts/9232-wme-panel-swap
			"Include selected segments names",
			"Volunteer responding - You reported a problem near $SELSEGS, Waze did not send us enough information to fix your request. Would you please let us know what went wrong with the route Waze gave you? Would you tell us your destination as you entered it into Waze? Thanks!",
			"Open",

			"Wrong Street Name",
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you please let us know which street name you think is wrong and what it should be? Thanks",
			"Open", //rickzabel Pesach 12/22/14

			"<br>",
			"",
			"",

			// Default URs  6 through 22 are all the different types of UR that a user can submit do not change them thanks
			"Incorrect turn", //6
			"Volunteer responding - Would you please let us know what turn you are having a problem with? Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel 12/9/14
			"Open",

			"Incorrect address", //7
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you tell us your destination as you entered it into Waze? What is the problem you are having with this address? Thanks!", //rickzabel 12/8/14
			"Open",

			"Incorrect route", //8
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you please let us know what went wrong with the route Waze gave you? Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel 12/9/14
			"Open",

			"Missing roundabout", //9
			"Volunteer responding - Would you tell us as much as possible about the roundabout you believe is missing? Thanks!",
			"Open",

			"General error", //10
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you please let us know what went wrong? Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel 12/9/14
			"Open",

			"Turn not allowed", //11
			"Volunteer responding - Would you please let us know which turn was or should not be allowed and why? Please specify the street names at the intersection. Thanks!", //rickzabel 2/26/15
			"Open",

			"Incorrect junction", //12
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you please let us know what went wrong with the route Waze gave you? Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel 12/9/14
			"Open",

			"Missing bridge overpass", //13
			"Volunteer responding - Would you please let us know what overpass you believe is missing? When moving at highway speeds, Waze deliberately chooses not to display some nearby features to avoid cluttering the screen. Would you tell us as much as possible about the missing overpass. Thanks!", //rickzabel 12/9/14
			"Open",

			"Wrong driving direction", //14
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you please let us know what went wrong with the route Waze gave you? Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel 12/9/14
			"Open",

			"Missing Exit", //15
			"Volunteer responding - Waze did not send us enough information to fix your request. Would you please let us know as much as possible about the missing exit? Thanks!", //rickzabel 12/9/14
			"Open",

			"Missing Road", //16
			"Volunteer responding - Would you tell us as much as possible about the road you believe is missing? Thanks!", //rickzabel 12/9/14
			"Open",


			"Missing Landmark", //18
			"Volunteer responding - Would you tell us as much as possible about the landmark you believe is missing? Thanks!",
			"Open",

			/*
			"Blocked Road", //19
			"Volunteer responding -",
			"Open",

			"Missing Street Name", //21
			"Volunteer responding -",
			"Open",

			"Incorrect Street Prefix or Suffix", ///22
			"Volunteer responding -",
			"Open",
			*/

			"Speed Limit", //23
			"Waze did not send us enough information to fix your request. Would you please tell us as much as possible about the issue regarding the speed limit? In the future please submit requests near the point where the speed limit changes. If the speed limit change is temporary due to construction, please advise and provide additional details. If you would like to see speed limits at all times while using the app, please go to Settings > Speedometer > Show speed limit. Thanks!",
			"Open", //rickzabel

			"<br>",
			"",
			"",
			// End of Default URs

			"User Followed Waze's route",
			"Volunteer responding - It appears that you followed the route Waze suggested. Would you please let us know what went wrong with the route Waze gave you? Would you tell us your destination as you entered it into Waze? Thanks!", //reworded rickzabel 12/7/2014
			"Open",

			"Alley Interference",
			"Volunteer responding - Waze does not let the us know where you were going, although it was probably adjacent to the alley. Would you tell us your destination as you entered it into Waze? Thanks!", //rickzabel 12/9/14
			"Open",

			"Road Closed",
			"Volunteer responding - Would you please let us know the following; What road is closed?; between which intersections is this road closed; Do you know how long this road is scheduled to be closed? Thanks!", //rickzabel 12/9/14
			"Open",

			"Area Entrances",
			"We have had problems with Google pins being placed in the center of large landmarks. Delete your previous search and do a new search for the location. Go to the bottom of the auto fill list to see more results and make sure you pick the Waze search engine.",
			"Open",

			"48 Hour Reply",
			//"Please allow 48 hours for changes to be reflected in the live map.",
			"We made some changes to the map, please allow up to 48 hours for the changes to be reflected on the live map.", //rickzabel 12/7/14 //t0cableguy 12/8/14, karlcr9911 12/8/14
			"Open",

			"Clear Saved Locations",
			"To get an updated result, remove the location from your navigation history and then search for the location again.", //t0cableguy 12/8/14, karlcr9911 12/8/14
			"Open",

			"Address - Incorrect Position",
			"Can you tell us the address or if you can revisit visit the location, please show us the correct position by using the Report > Places feature. Before you save move as close as possible to the entrance. Please do not submit pictures containing faces, license plates, or personal details. Thanks!", //rickzabel t0cableguy 04-04-2015
			"Open",

			"Address - Missing from Map",
			"Volunteer responding - Would you let us know the address that is missing? The available resources do not have the address available for your location. You can use the Report > Places feature in Waze to mark the location. Before you save move close as possible to the entrance. Do not submit pictures containing faces, license plates, or personal details. Thanks!", //rickzabel 4/5/2015 //t0cableguy 4/5/2015
			"Open",

			"Address - Bad Results",
			"Search results in Waze are retrieved from numerous sources. After tapping search, Scroll to the bottom and you will see options for other search engines. Please try a different option as another search engine might have the address you are looking for", //rickzabel 12/9/14
			"Open",

			"House Number Adjustment",
			"I've forced Waze to re-register the house number for your destination. I believe this should correct your issue. Please allow up to 48 hours for changes to be reflected in the live map. If you have the location in your saved searches or favorites, please remove them and re-add the destination. Please let me know if you continue to experience this problem by submitting another error report. Thanks!", //rickzabel 12/7/14 //karlcr9911 12/8/14
			"Open",

			"Missing Bridges or Roads",
			"The roads for this area are thoroughly mapped and the volunteer editors cannot find anything missing from the map. When you are moving, Waze deliberately chooses not to display some nearby features to avoid cluttering the screen. If you are certain a feature is missing from the map, please reply and tell us as much as possible about it. Thanks!", //rickzabel karlcr9911 4/18/2015
			"Open",

			"Manual Refresh",
			"Please try doing these options. Tap the Search Icon > Settings gear icon > Display & Map > Data Transfer > Refresh map of my area. Secondly, you can try clearing Waze's app cache in your phone’s app manager. The final option is to reset the app by going to the navigation screen and type ##@resetapp in search field and hit search.", // rickzabel 11/24/16
			"Open",

			"Pave Road",
			"Volunteer responding - You can pave the road from the app by tapping the Pin icon > Map Issue > Pave Road tab. After leaving the paved road, tap Start paving. Once done, tap the Steamroller > Stop paving. You can provide information about the new road such as its name by tapping on the Pin icon > Map Issue > Missing Road. Thanks!", //karlcr9911 4/5/15 //rickzabel 4/5/15 removed single quotes
			"Open",

			"Unlock request",
			"I have started the process to get this issue fixed. Thanks for your report!", //GizmoGuy, t0cableguy, rickzabel 1/14/2015
			"Open"
		];

		// Auto insertion config:
		// The position in the list that the reminder message is at. (counting titles, comments, and ur status)
		ReminderPosition = 24;

		// The position of the close as Not Identified message that you have in the list (the first comment is the list is 0)
		CloseNotIdentifiedPosition = 27;

		// Waze's default URs number to name conversion array
		// Thanks to SuperMedic

		def_names[6] = "Incorrect turn";
		def_names[7] = "Incorrect address";
		def_names[8] = "Incorrect route";
		def_names[9] = "Missing roundabout";
		def_names[10] = "General error";
		def_names[11] = "Turn not allowed";
		def_names[12] = "Incorrect junction";
		def_names[13] = "Missing bridge overpass";
		def_names[14] = "Wrong driving direction";
		def_names[15] = "Missing Exit";
		def_names[16] = "Missing Road";
		def_names[18] = "Missing Landmark";
		def_names[19] = "Blocked Road";
		def_names[21] = "Missing Street Name";
		def_names[22] = "Incorrect Street Prefix or Suffix";
		def_names[23] = "Speed Limit";  //speed limit ur type is number 23

		// Zoom out links
		URC_Text[0] = "Zoom Out 0 & Close UR";
		URC_Text_tooltip[0] = "Zooms all the way out and closes the UR window";

		URC_Text[1] = "Zoom Out 2 & Close UR";
		URC_Text_tooltip[1] = "Zooms out to level 2 and closes the UR window (this is where I found most of the toolbox highlighting works)";

		URC_Text[2] = "Zoom Out 3 & Close UR";
		URC_Text_tooltip[2] = "Zooms out to level 3 and closes the UR window (this is where I found most of the toolbox highlighting works)";

		URC_Text_tooltip[3] = "Reload the map";

		URC_Text[4] = "UR count : ";
		URC_Text_tooltip[4] = "Number of URs Shown on screen";

		// Tab names
		URC_Text[5] = "Comments";
		URC_Text[6] = "UR Filtering";
		URC_Text[7] = "Settings";

		//UR Filtering Tab
		URC_Text[8] = "Click here for Instructions";
		URC_Text_tooltip[8] = "Instructions for UR filtering";
		URC_URL[8] = "https://docs.google.com/presentation/d/1zwdKAejRbnkUll5YBfFNrlI2I3Owmb5XDIbRAf47TVU/";

		URC_Text[9] = "Enable URComments UR filtering";
		URC_Text_tooltip[9] = "Enable or disable URComments filtering";

		URC_Text[10] = "Enable UR pill counts";
		URC_Text_tooltip[10] = "Enable or disable the pill with UR counts";

		URC_Text[12] = "Hide Waiting";
		URC_Text_tooltip[12] = "Only show URs that need work (hide in-between states)";

		URC_Text[13] = "Only show my URs";
		//URC_Text_tooltip[13] = "Hide UR where there are zero comments from the logged in editor";
		URC_Text_tooltip[13] = "Hide URs where you have no comments";

		URC_Text[14] = "Show others URs past reminder + close";
		URC_Text_tooltip[14] = "Show URs that other commented on that have gone past the reminder and close day settings added together";

		URC_Text[15] = "Hide URs Reminder needed";
		URC_Text_tooltip[15] = "Hide URs where reminders are needed";

		URC_Text[16] = "Hide URs user replies";
		URC_Text_tooltip[16] = "Hide UR with user replies";

		URC_Text[17] = "Hide URs close needed";
		URC_Text_tooltip[17] = "Hide URs that need closing";

		URC_Text[18] = "Hide URs no comments";
		URC_Text_tooltip[18] = "Hide URs that have zero comments";

		URC_Text[19] = "hide 0 comments without descriptions";
		URC_Text_tooltip[19] = "Hide URs that do not have descriptions or comments";

		URC_Text[20] = "hide 0 comments with descriptions";
		URC_Text_tooltip[20] = "Hide URs that have descriptions and zero comments";

		URC_Text[21] = "Hide Closed URs";
		URC_Text_tooltip[21] = "Hide closed URs";

		URC_Text[22] = "[URO+] Hide Tagged URs";
		URC_Text_tooltip[22] = "Hide URs that are tagged with URO+ style tags ex. [NOTE]";

		URC_Text[23] = "Reminder days: ";
		//URC_Text_tooltip[23] = "";

		URC_Text[24] = "Close days: ";
		//URC_Text_tooltip[] = "";

		//settings tab
		URC_Text[25] = "Auto set new UR comment";
		URC_Text_tooltip[25] = "Auto set the UR comment on new URs that do not already have comments";

		URC_Text[26] = "Auto set reminder UR comment";
		URC_Text_tooltip[26] = "Auto set the UR reminder comment for URs that are older than reminder days setting and have only one comment";

		URC_Text[27] = "Auto zoom in on new UR";
		URC_Text_tooltip[27] = "Auto zoom in when opening URs with no comments and when sending UR reminders";

		URC_Text[28] = "Auto center on UR";
		URC_Text_tooltip[28] = "Auto Center the map at the current map zoom when UR has comments and the zoom is less than 3";

		URC_Text[29] = "Auto click open, solved, not identified";
		URC_Text_tooltip[29] = "Suppress the message about recent pending questions to the reporter and then depending on the choice set for that comment Clicks Open, Solved, Not Identified";

		URC_Text[30] = "Auto save after a solved or not identified comment";
		URC_Text_tooltip[30] = "If Auto Click Open, Solved, Not Identified is also checked, this option will click the save button after clicking on a UR-Comment and then the send button";

		URC_Text[31] = "Auto close comment window";
		URC_Text_tooltip[31] = "For the user requests that do not require saving this will close the user request after clicking on a UR-Comment and then the send button";

		URC_Text[32] = "Auto reload map after comment";
		URC_Text_tooltip[32] = "Reloads the map after clicking on a UR-Comment and then send button. This does not apply to any messages that needs to be saved, since saving automatically reloads the map. Currently this is not needed but I am leaving it in encase Waze makes changes";

		URC_Text[33] = "Auto zoom out after comment";
		URC_Text_tooltip[33] = "After clicking on a UR-Comment in the list and clicking send on the UR the map zoom will be set back to your previous zoom";

		URC_Text[34] = "Auto switch to the UrComments tab";
		URC_Text_tooltip[34] = "Auto switch to the URComments tab when opening a UR, when the UR window is closed you will be switched to your previous tab";

		URC_Text[35] = "Close message - double click link (auto send)";
		URC_Text_tooltip[35] = "Add an extra link to the close comment when double clicked will auto send the comment to the UR windows and click send, and then will launch all of the other options that are enabled";

		URC_Text[36] = "All comments - double click link (auto send)";
		URC_Text_tooltip[36] = "Add an extra link to each comment in the list that when double clicked will auto send the comment to the UR windows and click send, and then will launch all of the other options that are enabled";

		URC_Text[37] = "Comment List";
		URC_Text_tooltip[37] = "This shows the selected comment list. There is support for a custom list. If you would like your comment list built into this script or have suggestions on the Comments team’s list, please contact me at rickzabel @waze or @gmail";

		URC_Text[38] = "Disable done / next buttons";
		URC_Text_tooltip[38] = "Disable the done / next buttons at the bottom of the new UR window";

		URC_Text[39] = "Unfollow UR after send";
		URC_Text_tooltip[39] = "Unfollow UR after sending comment";

		URC_Text[40] = "Auto send reminders";
		URC_Text_tooltip[40] = "Auto send reminders to my UR as they are on screen";

		URC_Text[41] = "Replace tag name with editor name";
		URC_Text_tooltip[41] = "When a UR has the logged in editors name in the description or any of the comments of the UR (not the name Waze automatically adds when commenting) replace the tag type with the editors name";

		URC_Text[42] = "(Double Click)"; //double click to close links
		URC_Text_tooltip[42] = "Double click here to auto send - ";

		URC_Text[43] = "[URO+] Dont show tag name on pill";
		URC_Text_tooltip[43] = "Dont show tag name on pill where there is a URO+ tag";

		URC_Text[44] = "Your signature";
		URC_Text_tooltip[44] = "Here you can set your signature, after making a change, please refresh your page to update the texts";

		URC_Text[45] = "c"; // Comment initial
		URC_Text_tooltip[45] = "Comments";

		URC_Text[46] = "d"; // Day initial
		URC_Text_tooltip[46] = "Days";

		URC_Text[47] = "Credits";
		URC_Text_tooltip[47] = "Credits/Contacts";

		URC_Text[48] = "Developper";
		URC_Text_tooltip[48] = "Developper's nickname";

		URC_Text[49] = "Translations & Comments";
		URC_Text_tooltip[49] = "Translator's nickname";

		URC_Text[50] = "Include the PS";
		URC_Text_tooltip[50] = "Include the PS in the text";

		URC_Text[51] = "Post scriptum";
		URC_Text_tooltip[51] = "Post scriptum";

		URC_Text[52] = "These options are still in test";

		URC_Text[53] = "Maintainer";
		URC_Text_tooltip[53] = "Script maintained by";

		URC_Text[54] = "Greeting";
		URC_Text_tooltip[54] = "Set a custom greeting, this will be put before the configured response";

		URC_Text[55] = "Hide AndroidAuto description";
		URC_Text_tooltip[55] = "Hides the 'Reported from AAOS' description";

		URC_Text[56] = "+ Create New";

		URC_Text[57] = "Response List";
		URC_Text_tooltip[57] = "Use a custom created response list";

		URC_Text[58] = "Responses";

		URC_Text[59] = "Edit custom response";
		URC_Text[60] = "Add custom response";

		URC_Text[61] = "Title";
		URC_Text_tooltip[61] = "Enter the title of the option, for auto fill this should match ur type";

		URC_Text[62] = "Response";
		URC_Text_tooltip[62] = "Enter the message to reply to the UR";

		URC_Text[63] = "UR Status";
		URC_Text_tooltip[63] = "Select the status to apply when clicking this option";

		URC_Text[64] = "Signature";
		URC_Text_tooltip[64] = "Add your signature to the response";

		URC_Text[65] = "Save";
		URC_Text[66] = "Cancel";

		URC_Text[67] = "Custom List Options";
		URC_Text[68] = "Add text option";
		URC_Text[69] = "Edit a text option";
		URC_Text[70] = "Edit name of the list";
		URC_Text[71] = "DANGER ZONE";
		URC_Text[72] = "Delete this list";
		URC_Text[73] = "Cancel delete";
		URC_Text[74] = "Delete a text option";

		URC_USER_PROMPT[0] = "URCom - You either have a older version of the custom comments file or a syntax error either will keep the custom list from loading. Missing: ";

		URC_USER_PROMPT[1] = "URCom - You are missing the following items from your custom comment list: ";

		URC_USER_PROMPT[2] = "List can not be found. You can find the list and instructions at https://wiki.waze.com/wiki/User:Rickzabel/UrComments/";

		URC_USER_PROMPT[3] = "URComments you can not set close days to zero";

		URC_USER_PROMPT[4] = "URCom - To use the double click links you must have the Auto click open, solved, not identified option enabled";

		URC_USER_PROMPT[5] = "URCom - Aborting FilterURs2 because both filtering, counts, and auto reminders are disabled";

		URC_USER_PROMPT[6] = "URCom - Loading UR data has timed out, retrying."; //this message is shown across the top of the map in a orange box, length must be kept short

		URC_USER_PROMPT[7] = "URCom - Adding reminder message to UR: "; //this message is shown across the top of the map in a orange box, length must be kept short

		URC_USER_PROMPT[8] = "URComment's UR Filtering has been disabled because URO+\'s UR filters are active."; //this message is shown across the top of the map in a orange box, length must be kept short

		URC_USER_PROMPT[9] = "UrComments has detected that you have unsaved edits!\n\nWith the Auto Save option enabled and with unsaved edits you cannot send comments that would require the script to save. Please save your edits and then re-click the comment you wish to send.";

		URC_USER_PROMPT[10] = "URCom - Can not find the comment box! In order for this script to work you need to have a UR open."; //this message is shown across the top of the map in a orange box, length must be kept short

		URC_USER_PROMPT[11] = "URCom - This will send reminders at the reminder days setting. This only happens when they are visible on your screen. NOTE: when using this feature you should not leave any UR open unless you had a question that needed an answer from the wazer as this script will send those reminders."; //conformation message/ question

		URC_USER_PROMPT[12] = "URCom - Your configured custom list doesn't exist anymore!";

		URC_USER_PROMPT[13] = "This name already exists!";

		URC_USER_PROMPT[14] = "Successfully added new list";

		URC_USER_PROMPT[15] = "Failed to add new list!";

		URC_USER_PROMPT[16] = "Enter new name for the list";

		URC_USER_PROMPT[16] = "Successfully updated name";

		URC_USER_PROMPT[17] = "Failed to update list!";

		URC_USER_PROMPT[18] = "Not all required fields are set!";

		URC_USER_PROMPT[19] = "Failed to save custom text!";

		URC_USER_PROMPT[20] = "Are you sure you want to delete this list?";

		URC_USER_PROMPT[21] = "Failed to delete list!";

		URC_USER_PROMPT[22] = "Click the text option to delete";

		URC_USER_PROMPT[23] = "Failed to delete item!";

		URC_USER_PROMPT[24] = "Click the text option to edit";

		TranslatorsName = "@tunisiano187";

		// End URComDefault's list
	} else {

		// Custom other languages lists from external list
		try {

			// Custom list
			URCommentsArray = eval("window.Urcomments" + options.BoilerPlateCreators + "Array2");

			// The position in the list that the reminder message is at. (starting at 0 counting titles, comments, and ur status)
			ReminderPosition = eval("window.Urcomments" + options.BoilerPlateCreators + "ReminderPosistion");

			// The position of the close as Not Identified message (starting at 0 counting titles, comments, and ur status)
			// Yes the name is spelled wrong, but we need to leave that since external scripts for translations set it like that
			CloseNotIdentifiedPosition = eval("window.Urcomments" + options.BoilerPlateCreators + "CloseNotIdentifiedPosistion");

			// Copy the waze default titles into the active?
			// Waze's default URs number to name conversion array
			// Thanks to SuperMedic

			def_names[6] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[6]"); //"Incorrect turn";
			def_names[7] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[7]"); //"Incorrect address";
			def_names[8] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[8]"); //"Incorrect route";
			def_names[9] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[9]"); //"Missing roundabout";
			def_names[10] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[10]"); //"General error";
			def_names[11] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[11]"); //"Turn not allowed";
			def_names[12] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[12]"); //"Incorrect junction";
			def_names[13] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[13]"); //"Missing bridge overpass";
			def_names[14] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[14]"); //"Wrong driving direction";
			def_names[15] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[15]"); //"Missing Exit";
			def_names[16] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[16]"); //"Missing Road";
			def_names[18] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[18]"); //"Missing Landmark";
			def_names[19] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[19]"); //"Blocked Road";
			def_names[21] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[21]"); //"Missing Street Name";
			def_names[22] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[22]"); //"Incorrect Street Prefix or Suffix";
			def_names[23] = eval("window.Urcomments" + options.BoilerPlateCreators + "def_names[23]"); //"Speed limits";

			URC_Text[0] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[0]");
			URC_Text_tooltip[0] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[0]");

			URC_Text[1] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[1]");
			URC_Text_tooltip[1] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[1]");

			URC_Text[2] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[2]");
			URC_Text_tooltip[2] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[2]");

			URC_Text[3] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[3]");
			URC_Text_tooltip[3] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[3]");

			URC_Text[4] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[4]");
			URC_Text_tooltip[4] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[4]");

			URC_Text[5] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[5]");
			URC_Text_tooltip[5] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[5]");

			URC_Text[6] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[6]");
			URC_Text_tooltip[6] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[6]");

			URC_Text[7] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[7]");
			URC_Text_tooltip[7] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[7]");

			URC_Text[8] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[8]");
			URC_Text_tooltip[8] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[8]");
			URC_URL[8] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_URL[8]");

			URC_Text[9] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[9]");
			URC_Text_tooltip[9] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[9]");

			URC_Text[10] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[10]");
			URC_Text_tooltip[10] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[10]");

			URC_Text[11] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[11]");
			URC_Text_tooltip[11] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[11]");

			URC_Text[12] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[12]");
			URC_Text_tooltip[12] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[12]");

			URC_Text[13] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[13]");
			URC_Text_tooltip[13] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[13]");

			URC_Text[14] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[14]");
			URC_Text_tooltip[14] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[14]");

			URC_Text[15] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[15]");
			URC_Text_tooltip[15] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[15]");

			URC_Text[16] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[16]");
			URC_Text_tooltip[16] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[16]");

			URC_Text[17] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[17]");
			URC_Text_tooltip[17] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[17]");

			URC_Text[18] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[18]");
			URC_Text_tooltip[18] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[18]");

			URC_Text[19] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[19]");
			URC_Text_tooltip[19] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[19]");

			URC_Text[20] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[20]");
			URC_Text_tooltip[20] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[20]");

			URC_Text[21] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[21]");
			URC_Text_tooltip[21] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[21]");

			URC_Text[22] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[22]");
			URC_Text_tooltip[22] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[22]");

			URC_Text[23] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[23]");
			URC_Text_tooltip[23] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[23]");

			URC_Text[24] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[24]");
			URC_Text_tooltip[24] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[24]");

			URC_Text[25] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[25]");
			URC_Text_tooltip[25] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[25]");

			URC_Text[26] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[26]");
			URC_Text_tooltip[26] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[26]");

			URC_Text[27] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[27]");
			URC_Text_tooltip[27] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[27]");

			URC_Text[28] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[28]");
			URC_Text_tooltip[28] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[28]");

			URC_Text[29] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[29]");
			URC_Text_tooltip[29] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[29]");

			URC_Text[30] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[30]");
			URC_Text_tooltip[30] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[30]");

			URC_Text[31] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[31]");
			URC_Text_tooltip[31] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[31]");

			URC_Text[32] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[32]");
			URC_Text_tooltip[32] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[32]");

			URC_Text[33] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[33]");
			URC_Text_tooltip[33] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[33]");

			URC_Text[34] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[34]");
			URC_Text_tooltip[34] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[34]");

			URC_Text[35] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[35]");
			URC_Text_tooltip[35] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[35]");

			URC_Text[36] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[36]");
			URC_Text_tooltip[36] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[36]");

			URC_Text[37] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[37]");
			URC_Text_tooltip[37] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[37]");

			URC_Text[38] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[38]");
			URC_Text_tooltip[38] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[38]");

			URC_Text[39] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[39]");
			URC_Text_tooltip[39] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[39]");

			URC_Text[40] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[40]");
			URC_Text_tooltip[40] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[40]");

			URC_Text[41] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[41]");
			URC_Text_tooltip[41] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[41]");

			URC_Text[42] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[42]");
			URC_Text_tooltip[42] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[42]");

			URC_Text[43] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[43]");
			URC_Text_tooltip[43] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[43]");

			URC_Text[44] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[44]");
			URC_Text_tooltip[44] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[44]");

			URC_Text[45] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[45]");
			URC_Text_tooltip[45] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[45]");

			URC_Text[46] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[46]");
			URC_Text_tooltip[46] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[46]");

			URC_Text[47] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[47]");
			URC_Text_tooltip[47] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[47]");

			URC_Text[48] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[48]");
			URC_Text_tooltip[48] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[48]");

			URC_Text[49] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[49]");
			URC_Text_tooltip[49] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[49]");

			URC_Text[50] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[50]");
			URC_Text_tooltip[50] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[50]");

			URC_Text[51] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[51]");
			URC_Text_tooltip[51] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[51]");

			URC_Text[52] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[52]");

			URC_Text[53] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[53]");
			URC_Text_tooltip[53] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[53]");

			URC_Text[54] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[54]");
			URC_Text_tooltip[54] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[54]");

			URC_Text[55] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[55]");
			URC_Text_tooltip[55] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[55]");

			URC_Text[56] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[56]");

			URC_Text[57] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[57]");
			URC_Text_tooltip[57] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[57]");

			URC_Text[58] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[58]");

			URC_Text[59] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[59]");
			URC_Text[60] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[60]");

			URC_Text[61] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[61]");
			URC_Text_tooltip[61] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[61]");

			URC_Text[62] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[62]");
			URC_Text_tooltip[62] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[62]");

			URC_Text[63] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[63]");
			URC_Text_tooltip[63] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[63]");

			URC_Text[64] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[64]");
			URC_Text_tooltip[64] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text_tooltip[64]");

			URC_Text[65] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[65]");
			URC_Text[66] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[66]");

			URC_Text[67] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[67]");
			URC_Text[68] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[68]");
			URC_Text[69] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[69]");
			URC_Text[70] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[70]");
			URC_Text[71] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[71]");
			URC_Text[72] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[72]");
			URC_Text[73] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[73]");
			URC_Text[74] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_Text[74]");

			URC_USER_PROMPT[0] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[0]");
			URC_USER_PROMPT[1] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[1]");
			URC_USER_PROMPT[2] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[2]");
			URC_USER_PROMPT[3] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[3]");
			URC_USER_PROMPT[4] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[4]");
			URC_USER_PROMPT[5] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[5]");
			URC_USER_PROMPT[6] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[6]");
			URC_USER_PROMPT[7] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[7]");
			URC_USER_PROMPT[8] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[8]");
			URC_USER_PROMPT[9] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[9]");
			URC_USER_PROMPT[10] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[10]");
			URC_USER_PROMPT[11] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[11]");
			URC_USER_PROMPT[12] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[12]");
			URC_USER_PROMPT[13] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[13]");
			URC_USER_PROMPT[14] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[14]");
			URC_USER_PROMPT[15] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[15]");
			URC_USER_PROMPT[16] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[16]");
			URC_USER_PROMPT[17] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[17]");
			URC_USER_PROMPT[18] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[18]");
			URC_USER_PROMPT[19] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[19]");
			URC_USER_PROMPT[20] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[20]");
			URC_USER_PROMPT[21] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[21]");
			URC_USER_PROMPT[22] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[22]");
			URC_USER_PROMPT[23] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[23]");
			URC_USER_PROMPT[24] = eval("window.Urcomments" + options.BoilerPlateCreators + "URC_USER_PROMPT[24]");

			TranslatorsName = eval("window.Urcomments" + options.BoilerPlateCreators + "TranslatorsName");

		} catch (err) {
			alert("URC: All of the text in URC is now configurable within the custom comments file. Your comments file " + options.BoilerPlateCreators + " is outdated, has errors, or your language file is not installed please back up your comments. Then force update the comments file from greasyfork and paste your comments back into the custom comments file. Since there is an error the comments team's list will be chosen.");
			parent.location='mailto:incoming+WMEScripts/URComments-French@incoming.gitlab.com?subject=BEFR%20error&body=' + options.BoilerPlateCreators + " err : " + err;

			options.BoilerPlateCreators = 'URComDefault';
			saveOptions(options);

			refreshUI();
			return false;
		}
	}

	const request = DB
		.transaction("custom_lists")
		.objectStore("custom_lists")
		.getAll();

	request.onsuccess = (event) => {
		if (event.target.result) {

			const results = [...event.target.result];

			results.sort((a, b) => {
				return a.order - b.order
			});

			CustomLists = [];
			CustomLists.push("Default");

			results.forEach(list => {
				CustomLists.push(list.name);
			})

			CustomLists.push(URC_Text[56]);

			loadCustomText(() => {
				InitReady = true;
			});

		}
	};

	startCode();
	displayChangelog();
}

function loadCustomText(callback) {

	if (options.CustomTextList && options.CustomTextList !== "Default") {

		CustomListText = [];

		// Verify it still exists
		if (CustomLists.indexOf(options.CustomTextList) === -1) {

			alert(URC_USER_PROMPT[12]);
			options.CustomTextList = "";
			saveOptions(options);

		} else {

			console.log("[URCom] Loading custom text: " + options.CustomTextList);

			const request = DB
				.transaction("custom_lists")
				.objectStore("custom_lists")
				.get(options.CustomTextList);

			request.onsuccess = (event) => {

				if (event.target.result) {

					const results = [...event.target.result.responses];

					for (let i = 0; i < results.length; i++) {
						const result = results[i];

						CustomListText.push({
							sorting: result.sorting,
							name: result.name,
							text: result.text,
							status: result.status,
							signature: result.signature
						});
					}

					CustomListText.sort((a, b) => {
						return a.sorting - b.sorting
					});

				}

				callback();

			};

		}
	} else {
		callback();
	}

}

function displayChangelog() {

	if (!WazeWrap.Interface) {
		setTimeout(displayChangelog, 1000);
		return;
	}

	if (URCommentUpdateMessage === "yes") {
		// Alert the user in URComment version updates
		if (localStorage.getItem('URComVersion') === URCommentVersion) {
			console.log("[URCom] Version - " + URCommentVersion);
		} else {
			WazeWrap.Interface.ShowScriptUpdate(ScriptName, URCommentVersion, URCommentVersionUpdateNotes + "<br />", "https://gitlab.com/WMEScripts/URComments-French");

			const updateName = "#wmeurcom" + URCommentVersion.replaceAll(".", "");
			$(updateName + " .WWSUFooter a").text("Gitlab")

			localStorage.setItem('URComVersion', URCommentVersion);
		}
	}

}

function refreshUI() {
	// Clear the html from the tabs
	$("#sidepanel-Comments").html('');

	// Reload the content
	ChangeLanguage = true;
	URComments_bootstrap();
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////
////// init
//////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function applyCss() {
	// CSS
	// Expand the UR textarea so we can verfiy what comment we clicked on. special thanks to SeekingSerenity
	let g = '.ur-comment-list .comment-list { bottom: 200px !important; } .ur-comment-list .new-comment-form textarea { height: 140px !important; } .ur-comment-list .new-comment-form { height: 200px !important; }';

	const wazeHeight = $('.view-area').height();
	if (wazeHeight > 500) {
		// beta-editor comment textarea
		g = g + ' .new-comment-form .new-comment-text { height: 140px !important; }';
	}

	// css for items in my tab that are in a label (uro presets)
	g = g + '#sidepanel-Comments label { cursor:pointer; margin:0px 0px 0px; vertical-align: middle;font-size: 10px;}';

	// css for checkboxes
	g = g + ' #sidepanel-Comments .URCommentsCheckbox { text-decoration:none; cursor:pointer; color: #000000; margin:0px 0px 0px; vertical-align: middle; font-size: 12px;}';

	// css for our comments,
	g = g + ' #sidepanel-Comments .URComments { text-decoration:none; cursor:pointer; color: #000000; font-size: 12px;}'; // margin-top: 5px;

	// css for our uro presets,
	g = g + ' #sidepanel-Comments .URCommentsPresets { text-decoration:none; cursor:pointer; color: #000000; font-size: 10px;}';

	// css for our nav tabs,
	g = g + ' #comments-tab22 ul { font-size: 12px; padding: 0px;}';

	// css for our nav tabs links,
	g = g + ' #comments-tab22 a { padding: 3px !important ; margin-right: 0px !important;}';

	// keep the padding on our nav tabs
	g = g + ' #comments-tab22 nav-tabs { padding: 0px !important;}';

	// css for non selected UR opacity
	g = g + " .olMap.problem-selected .map-problem:not(.selected) { opacity: .5 !important;}";

	// css to fix the beta editors UR window
	g = g + ' .problem-edit .section .title { line-height: 15px !important;  }';

	g = g + ' .problem-edit .header { line-height: 15px !important; padding: 0px 15px!important; }';
	g = g + ' .problem-edit .section .content { padding: 5px !important;}';

	// css to undo some of the changes from maximizer
	if ($("#sidebar").width() < 300) {
		//g = g + '#sidebar { max-width: 290px !important;}';
		g = g + ' .show-sidebar .row-fluid .fluid-fixed {margin-left: 290px !important;}';
	}

	// move description up a div
	g = g + ' .problem-edit .description { background-color: white; overflow-x: hidden;  overflow-y: auto;  max-height: 80px; border-bottom: 2px solid #e9e9e9;}';

	// Make some spacing between checkboxes in settings
	g = g + '  .urcom-option { margin-top: 10px; }';

	// Our button style
	g = g + '  .urcom-button { margin: 5px 0; border: 1px solid rgba(27, 31, 35, 0.15); border-radius: 6px; box-shadow: rgba(27, 31, 35, 0.04) 0 1px 0, rgba(255, 255, 255, 0.25) 0 1px 0 inset; background-color: #FAFBFC; cursor: pointer; font-size: 14px; font-weight: 500; line-height: 20px; list-style: none; padding: 3px 10px; position: relative; transition: background-color 0.2s cubic-bezier(0.3, 0, 0.5, 1); }'

	// Append our css to the head
	$("head").append($('<style id="URCOM-CSS" type="text/css">' + g + '</style>'));
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
////
//// Option Methods
////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function addCommentTexts(container) {

	if (!ShowTextEditFields) {

		// Custom Text
		addDropdownSettings(container, URC_Text_tooltip[57], URC_Text[57], 'CustomTextList', CustomLists, changeCustomTextList);

		const header = $('<h5 style="margin-top: 20px;">' + URC_Text[58] + '</h5>');
		container.append(header);
	}

	// Start generating the comment list and mouse click handlers

	if (options.CustomTextList && options.CustomTextList !== "Default") {

		if (ShowTextEditFields) {

			let headerText;

			if (TextEditIndex !== undefined && TextEditIndex !== -1) {
				headerText = URC_Text[59];
			} else {
				headerText = URC_Text[61];
			}

			// Add options to setup custom text
			const header = $('<h5 style="margin-top: 20px;">' + headerText + '</h5>');
			container.append(header);

			const titleInput = $('<wz-text-input id="customTextTitle"></wz-text-input>');
			const titleWrapper = $('<div class="urcom-option"><span Title="' + URC_Text_tooltip[61] + '">' + URC_Text[61] + '</span></div>').append(titleInput);

			container.append(titleWrapper);

			const textInput = $('<wz-textarea id="customTextText" style="height: 130px; width: 270px;"></wz-textarea>');
			const textWrapper = $('<div class="urcom-option"><span Title="' + URC_Text_tooltip[62] + '">' + URC_Text[62] + '</span></div>').append(textInput);

			container.append(textWrapper);

			const selectWrapper = $('<div class="urcom-option" title="' + URC_Text_tooltip[63] + '"></div>');
			selectWrapper.append('<span>' + URC_Text[63] + '</span>');
			selectWrapper.append('<br />');

			const select = $('<select name="customTextStatus" id="customTextStatus" style="width: 100%;"></select>');
			select.append('<option value="open">open</option>');
			select.append('<option value="open">closed</option>');
			select.append('<option value="open">notidentified</option>');
			selectWrapper.append(select);
			container.append(selectWrapper);

			const signature = $('<wz-checkbox id="customTextSignature" Title="' + URC_Text_tooltip[64] + '" name="types" disabled="false" checked="true">' + URC_Text[64] + '</wz-checkbox>');
			const signatureWrapper = $('<div class="urcom-option"></div>').append(signature);

			container.append(signatureWrapper);

			const saveButton = $('<wz-button size="sm" style="width: 100%; margin-top: 10px;">' + URC_Text[65] + '</wz-button>');
			saveButton.on('click', saveCustomText);
			container.append(saveButton);

			const cancelButton = $('<wz-button size="sm" style="width: 100%; margin-top: 10px;">' + URC_Text[66] + '</wz-button>');
			cancelButton.on('click', cancelTextEdit);
			container.append(cancelButton);

		} else {

			// Go over the array and generate comment divs
			for (let i = 0; i < CustomListText.length; i++) {
				const text = CustomListText[i];
				let reply = text.text;

				if (text.signature) {
					reply += '$SIGNATURE';
				}

				addComments(container, i, text.name, text.status, reply);

			}

			if (ShowTextOptionButtons) {
				const options = $('<h5 style="margin-top: 20px;">' + URC_Text[67] + '</h5>');
				container.append(options);

				const addItem = $('<div style="width: 100%; margin-top: 20px; color: green" class="urcom-button">' + URC_Text[68] + '</div>');
				addItem.on('click', addNewItem);
				container.append(addItem);

				const editButton = $('<div style="width: 100%; margin-top: 10px; color: orange" class="urcom-button">' + URC_Text[69] + '</div>');
				editButton.on('click', editItem);
				container.append(editButton);

				const editList = $('<div style="width: 100%; margin-top: 10px; color: orange" class="urcom-button">' + URC_Text[70] + '</div>');
				editList.on('click', renameList);
				container.append(editList);

				const dangerZone = $('<h5 style="margin-top: 20px; color:darkred">' + URC_Text[71] + '</h5>');
				container.append(dangerZone);

				const deleteButton = $('<div style="width: 100%; margin-top: 10px; color: orangered" class="urcom-button">' + URC_Text[72] + '</div>');
				deleteButton.on('click', deleteCustomList);
				container.append(deleteButton);

				let text;

				if (DeleteTextMode) {
					text = URC_Text[73];
				} else {
					text = URC_Text[74];
				}

				const deleteTextButton = $('<div style="width: 100%; margin-top: 10px; color: orangered" class="urcom-button">' + text + '</div>');
				deleteTextButton.on('click', deleteTextItem);
				container.append(deleteTextButton);
			}

		}

	} else {

		// CurrentIndex is used to keep count of total arrays pairs which is used on the div's id tags
		let CurrentIndex = 1;

		// Go over the array and generate comment divs
		// We jump per 3 since each comment has 3 fields
		for (let i = 0; i < URCommentsArray.length; i = i + 3) {

			addComments(container, CurrentIndex, URCommentsArray[i], URCommentsArray[i + 2].toLowerCase(), URCommentsArray[i + 1])

			// inc the CurrentIndex
			CurrentIndex++;

		}

	}

	// Add 2 br to the end of the list for lower resolution monitors
	container.append('<br /><br />');
}

function addComments(container, CurrentIndex, title, URStatus, text) {

	// Setup the comment color var
	let textColor;

	if (URStatus === "open") {
		// Black
		textColor = "#000000";
	} else if (URStatus === "solved") {
		// Green
		textColor = "#008F00";
	} else if (URStatus === "notidentified") {
		// Orange
		textColor = "#E68A00";
	} else {
		// Red - not defined and that is a problem
		textColor = "#CC0000";
	}

	// Escaping titles and comments with escapeHtml(comment) so we can display items with special char as html;
	let comment = escapeHtml(text);
	let addClicks = false;

	// normal comment link
	let commentWrapper;
	let clickText;
	let doubleClickText;

	if (title !== "<br>" && comment !== "#Title") {

		// This is a real button
		commentWrapper = $('<div id="URComments-comment' + CurrentIndex + '" style="margin: 5px 0; border: 1px solid rgba(27, 31, 35, 0.15); border-radius: 6px; box-shadow: rgba(27, 31, 35, 0.04) 0 1px 0, rgba(255, 255, 255, 0.25) 0 1px 0 inset; background-color: #FAFBFC; cursor: pointer; font-size: 14px; font-weight: 500; line-height: 20px; list-style: none; padding: 3px 10px; position: relative; transition: background-color 0.2s cubic-bezier(0.3, 0, 0.5, 1);">');

		if (DeleteTextMode) {
			commentWrapper.css("border-color", "darkred");
			commentWrapper.css("background-color", "orangered");
		} else if (TextEditIndex === -1) {
			commentWrapper.css("background-color", "yellow");
		}

		addClicks = true;

	} else {

		// These are titles/empty lines
		commentWrapper = $('<div id="URComments-comment' + CurrentIndex + '"></div>')

	}

	if (comment === "#Title") {

		const titleHeader = $('<h5 style="color:' + textColor + '; text-decoration: underline; margin-top:15px;" title="title: ' + title + ' Action: ' + URStatus + '; comment: ' + comment + ' ">' + title + '</h5>');
		commentWrapper.append(titleHeader);

	} else {

		clickText = $('<a class="URComments" style="color:' + textColor + '" title="title: ' + title + ' Action: ' + URStatus + '; comment: ' + comment + ' ">' + title + '</a>');
		commentWrapper.append(clickText);

		if (title !== "<br>") {
			if (title === URCommentsArray[CloseNotIdentifiedPosition] && options.DBLClk7DCAutoSend || options.DBLClkAll) {

				doubleClickText = $('<a id="URComments-commentDBLCLK' + CurrentIndex + '" class="URComments" style="color:' + textColor + '" title="' + URC_Text_tooltip[42] + title + '"> ' + URC_Text[42] + '</a>');
				commentWrapper.append('<br />').append(doubleClickText);

			}
		}

	}

	// Add comment to list
	container.append(commentWrapper);

	if (addClicks) {

		if (DeleteTextMode) {

			commentWrapper.on('click', executeDeleteTextItem(CurrentIndex));

		} else if (TextEditIndex === -1) {

			commentWrapper.on('click', selectEditItem(CurrentIndex));

		} else if (!TextEditIndex) {

			// Set urID to zero so we don't freak out the functions expecting a UR ID
			let urID = 0;

			// Create the click function for each comment
			commentWrapper.on('click', autoZoomIN(title, text, URStatus, urID));

			// Create the double click function for each comment
			if (doubleClickText) {

				// Use this to click send automatically
				doubleClickText.on('dblclick', autoZoomIN(title, text, URStatus, urID, "AutoSendComment"));

			}

		}

	}

}

function addOptions(container) {

	// Language select
	addDropdownSettings(container, URC_Text_tooltip[37], URC_Text[37], 'BoilerPlateCreators', BoilerPlateCreatorsArray, BoilerPlateCreatorsFunction);

	const settings = $('<h4 style="margin-top: 20px;">' + URC_Text[7] + '</h4>');
	container.append(settings);

	// Auto Reply
	addBooleanSettings(container, URC_Text_tooltip[25], URC_Text[25], 'AutoSetNewComment');

	// Automated Reminder / Closure
	addBooleanSettings(container, URC_Text_tooltip[26], URC_Text[26], 'UrCommentAutoSet4dayComment');

	// Zoom in on open
	addBooleanSettings(container, URC_Text_tooltip[27], URC_Text[27], 'NewZoomIn');

	// Center on open
	addBooleanSettings(container, URC_Text_tooltip[28], URC_Text[28], 'WithCommentRecenter');

	// Auto Change State
	addBooleanSettingsCallback(container, URC_Text_tooltip[29], URC_Text[29], 'AutoClickURStatus', (event) => {
		toggleBoolean(event);

		if (!options.AutoClickURStatus && options.SaveAfterComment) {
			options.SaveAfterComment = false;
		}

		if (options.DBLClk7DCAutoSend || options.DBLClkAll) {
			alert(URC_USER_PROMPT[4]); //"URComments to use the double click links you must have the autoset UR status option enabled"

			options.AutoClickURStatus = true;
		}

		saveOptions(options);
		refreshUI();
	});

	// Auto Save On Close
	addBooleanSettingsCallback(container, URC_Text_tooltip[30], URC_Text[30], 'SaveAfterComment', (event) => {
		toggleBoolean(event);

		if (options.SaveAfterComment && !options.AutoClickURStatus) {

			// This is required!
			options.AutoClickURStatus = true;
			saveOptions(options);

			refreshUI();
		}
	});

	// Auto Close UR Screen
	addBooleanSettings(container, URC_Text_tooltip[31], URC_Text[31], 'UrCommentAutoCloseComment');

	// Zoom after close
	addBooleanSettings(container, URC_Text_tooltip[33], URC_Text[33], 'ZoomOutAfterComment');

	// Switch to comment tab auto
	addBooleanSettings(container, URC_Text_tooltip[34], URC_Text[34], 'AutoSwitchToURCommentsTab');

	// Double clicking the 7 day close comment will auto send the 7 day close comment
	addBooleanSettingsCallback(container, URC_Text_tooltip[35], URC_Text[35], 'DBLClk7DCAutoSend', (event) => {
		toggleBoolean(event);

		if (options.DBLClk7DCAutoSend) {

			// This is required!
			options.AutoClickURStatus = true;
			saveOptions(options);

			refreshUI();

		}
	});

	// Double clicking comments will auto send comments
	addBooleanSettingsCallback(container, URC_Text_tooltip[36], URC_Text[36], 'DBLClkAll', (event) => {
		toggleBoolean(event);

		if (options.DBLClkAll) {

			// This is required!
			options.AutoClickURStatus = true;
			saveOptions(options);

			refreshUI();
		}

	});

	// Disable Next Button
	addBooleanSettings(container, URC_Text_tooltip[38], URC_Text[38], 'UrCommentDisableURDoneBtn');

	// Do not follow conversation
	addBooleanSettings(container, URC_Text_tooltip[39], URC_Text[39], 'URCommentURUnfollow');

	// Auto send reminders for UR on screen
	addBooleanSettingsCallback(container, URC_Text_tooltip[40], URC_Text[40], 'URCommentsAutoSendMyReminders', (event) => {

		if (event.target.checked) {

			// "URComments This will send reminders at the reminder days setting. This only happens when they are in your visible area. NOTE: when using this feature you should not leave any UR open unless you had a question that needed an answer from the wazer as this script will send those reminders. "
			const r = confirm(URC_USER_PROMPT[11]);

			// this is where we reuse the r var this makes the nested ifs much more simple
			if (r === true) {
				FilterURs();
				toggleBoolean(event);
			} else {
				event.preventDefault();
				event.target.checked = false;
			}

		} else {
			toggleBoolean(event);
		}

	});

	// Enable or disable ur pill counts
	addBooleanSettingsCallback(container, URC_Text_tooltip[10], URC_Text[10], 'URCommentsPillEnabled', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Replace tag with editor name
	addBooleanSettingsCallback(container, URC_Text_tooltip[41], URC_Text[41], 'URCommentsReplaceTagWithEditorName', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Don't show tagged text
	addBooleanSettingsCallback(container, URC_Text_tooltip[43], URC_Text[43], 'URCommentsDontShowTaggedText', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide the AA description
	addBooleanSettings(container, URC_Text_tooltip[55], URC_Text[55], 'HideAADescription');

	// Days used to filter UR (reminder days / close days)
	addTextNumberSettings(container, URC_Text_tooltip[23], URC_Text[23], "ReminderDays");
	addTextNumberSettings(container, URC_Text_tooltip[24], URC_Text[24], "CloseDays");

	// Greeting
	addTextAreaSettings(container, URC_Text_tooltip[54], URC_Text[54], 'Greeting');

	// Signature
	addTextAreaSettings(container, URC_Text_tooltip[44], URC_Text[44], 'Signature');

	// Include PS
	//addBooleanSettings(container, URC_Text_tooltip[50], URC_Text[50], 'URComShowPS');

	// PS
	//addTextAreaSettings(container, "", "", 'URCommentsPS');

	const contactLabel = $('<div class="urcom-option"><span Title="' + URC_Text_tooltip[47] + '" style="padding-bottom: 10px; line-height: 15px; font-weight: bold;"><br>' + URC_Text[47] + ' :</span></div>');
	container.append(contactLabel);

	const developer = $('<div class="urcom-option"><span Title="' + URC_Text_tooltip[48] + '" style="line-height: 15px;">' + URC_img_waze_editor + URC_Text[48] + ': <a href="mailto:incoming+WMEScripts/WME-language-forcer@incoming.gitlab.com" target="_blank">@tunisiano187</a></span></div>'); // Dev
	container.append(developer);

	const maintainer = $('<div class="urcom-option"><span Title="' + URC_Text_tooltip[53] + '" style="line-height: 15px;">' + URC_img_waze_editor + URC_Text[53] + ': @GyllieGyllie</span></div>'); // Maintainer
	container.append(maintainer);

	const translator = $('<div class="urcom-option"><span Title="' + URC_Text_tooltip[49] + '" style="line-height: 15px;">' + URC_img_waze_editor + URC_Text[49] + ': ' + TranslatorsName + '</span></div>'); // Translator
	container.append(translator);
}

function addFilters(container) {

	const instructionLabel = $('<a target="_blank" Title="' + URC_Text_tooltip[8] + '" href="' + URC_URL[8] + '">' + URC_Text[8] + '</a><br><br>');
	container.append(instructionLabel);

	// Enable or disable urc filtering URCommentsFilterEnabled
	addBooleanSettingsCallback(container, URC_Text_tooltip[9], URC_Text[9], 'URCommentsFilterEnabled', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide UR that are not "mine"
	addBooleanSettingsCallback(container, URC_Text_tooltip[13], URC_Text[13], 'URCommentsHideNotMyUR', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Show UR that have gone past the close day setting
	addBooleanSettingsCallback(container, URC_Text_tooltip[14], URC_Text[14], 'URCommentsShowPastClose', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide inbetween ur
	addBooleanSettingsCallback(container, URC_Text_tooltip[12], URC_Text[12], 'URCommentsHideInbetween', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide reminders
	addBooleanSettingsCallback(container, URC_Text_tooltip[15], URC_Text[15], 'URCommentsHideReminderNeeded', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide replies
	addBooleanSettingsCallback(container, URC_Text_tooltip[16], URC_Text[16], 'URCommentsHideReplies', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide older than 7 day
	addBooleanSettingsCallback(container, URC_Text_tooltip[17], URC_Text[17], 'URCommentsHideCloseNeeded', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide initial (zero comments)
	addBooleanSettingsCallback(container, URC_Text_tooltip[18], URC_Text[18], 'URCommentsHideInital', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide UR that do not have descriptions
	addBooleanSettingsCallback(container, URC_Text_tooltip[19], URC_Text[19], 'URCommentsHideWithoutDescript', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide UR that have descriptions
	addBooleanSettingsCallback(container, URC_Text_tooltip[20], URC_Text[20], 'URCommentsHideWithDescript', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

	// Hide notes
	addBooleanSettingsCallback(container, URC_Text_tooltip[22], URC_Text[22], 'URCommentsHideNotes', (event) => {
		toggleBoolean(event);
		FilterURs();
	});

}

// Save what comment list is selected
function BoilerPlateCreatorsFunction(event) {

	const selected = event.target.value;

	if (selected !== "") {
		options.BoilerPlateCreators = selected;
		saveOptions(options);

		refreshUI();
	}

}

// Save what custom comment list is selected
function changeCustomTextList(event) {
	const selected = event.target.value;

	if (selected === URC_Text[56]) {
		addCustomList();
	} else if (selected !== "") {
		options.CustomTextList = selected;
		saveOptions(options);

		loadCustomText(() => {
			refreshUI();
		})
	}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
////
//// Option Logic
////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function getDefaultOptions() {
	return {
		AutoSetNewComment: true,
		UrCommentAutoSet4dayComment: true,
		NewZoomIn: true,
		WithCommentRecenter: true,
		AutoClickURStatus: true,
		SaveAfterComment: true,
		UrCommentAutoCloseComment: true,
		ZoomOutAfterComment: true,
		AutoSwitchToURCommentsTab: true,
		DBLClk7DCAutoSend: false,
		DBLClkAll: false,
		UrCommentDisableURDoneBtn: true,
		URCommentURUnfollow: false,
		URCommentsAutoSendMyReminders: false,
		URCommentsReplaceTagWithEditorName: false,
		URCommentsDontShowTaggedText: false,
		HideAADescription: true,
		Signature: "",
		Greeting: "",
		URComShowPS: false,
		URCommentsPS: "",
		BoilerPlateCreators: "URComDefault",
		URCommentsFilterEnabled: true,
		URCommentsPillEnabled: true,
		URCommentsHideNotMyUR: true,
		URCommentsShowPastClose: true,
		URCommentsHideInbetween: true,
		URCommentsHideReminderNeeded: false,
		URCommentsHideReplies: false,
		URCommentsHideCloseNeeded: false,
		URCommentsHideInital: false,
		URCommentsHideWithoutDescript: false,
		URCommentsHideWithDescript: false,
		URCommentsHideClosed: true,
		URCommentsHideNotes: false,
		ReminderDays: 4,
		CloseDays: 3,
		CustomTextList: '',
	}
}

function loadOptions() {
	let text = localStorage.getItem("URCom-Options");
	let options;

	if (text) {
		options = JSON.parse(text);
	} else {
		options = getDefaultOptions();
		migrate = true;
	}

	return options;
}

function validateOptions(options) {
	const defaultOptions = getDefaultOptions();

	// Add missing options
	for (let key in defaultOptions) {
		if (!(key in options)) {
			options[key] = defaultOptions[key]
		}
	}

	if (options.DBLClkAll) {
		options.AutoClickURStatus = true;
	}

	if (options.DBLClk7DCAutoSend) {
		options.AutoClickURStatus = true;
	}

	if (isNaN(options.ReminderDays) || options.ReminderDays < 0) {
		options.ReminderDays = 0;
	}

	if (isNaN(options.CloseDays) || options.CloseDays < 0) {
		options.CloseDays = 0;
	}

	if (options.CustomTextList === "None") {
		options.CustomTextList = "Default";
	}
}

function saveOptions(options) {
	const optionsJson = JSON.stringify(options);
	localStorage.setItem("URCom-Options", optionsJson);
}

function toggleBoolean(event) {
	options[event.target.id] = event.target.checked;
	saveOptions(options);
}

function changeText(event) {
	options[event.target.id] = event.target.value;
	saveOptions(options);
}

function migrateOptions() {
	migrateTextOption('BoilerPlateCreators', 'BoilerPlateCreators');

	migrateBooleanOptions('AutoSetNewComment', 'AutoSetNewComment');
	migrateBooleanOptions('UrCommentAutoSet4dayComment', 'UrCommentAutoSet4dayComment');
	migrateBooleanOptions('UrCommentAutoCloseComment', 'UrCommentAutoCloseComment');
	migrateBooleanOptions('NewZoomIn', 'NewZoomIn');
	migrateBooleanOptions('WithCommentRecenter', 'WithCommentRecenter');
	migrateBooleanOptions('AutoClickURStatus', 'AutoClickURStatus');
	migrateBooleanOptions('SaveAfterComment', 'SaveAfterComment');
	migrateBooleanOptions('ZoomOutAfterComment', 'ZoomOutAfterComment');
	migrateBooleanOptions('AutoSwitchToURCommentsTab', 'AutoSwitchToURCommentsTab');
	migrateBooleanOptions('DBLClk7DCAutoSend', 'DBLClk7DCAutoSend');
	migrateBooleanOptions('DBLClkAll', 'DBLClkAll');
	migrateBooleanOptions('UrCommentDisableURDoneBtn', 'UrCommentDisableURDoneBtn');
	migrateBooleanOptions('URCommentURUnfollow', 'URCommentURUnfollow');
	migrateBooleanOptions('URCommentsAutoSendMyReminders', 'URCommentsAutoSendMyReminders');
	migrateBooleanOptions('URCommentsReplaceTagWithEditorName', 'URCommentsReplaceTagWithEditorName');
	migrateBooleanOptions('URCommentsDontShowTaggedText', 'URCommentsDontShowTaggedText');
	migrateTextOption('Signature', 'Signature');
	migrateBooleanOptions('URComShowPS', 'URComShowPS');
	migrateTextOption('URCommentsPS', 'URCommentsPS');

	migrateBooleanOptions('URCommentsFilterEnabled', 'URCommentsFilterEnabled');
	migrateBooleanOptions('URCommentsPillEnabled', 'URCommentsPillEnabled');
	migrateBooleanOptions('URCommentsHideNotMyUR', 'URCommentsHideNotMyUR');
	migrateBooleanOptions('URCommentsShowPastClose', 'URCommentsShowPastClose');
	migrateBooleanOptions('URCommentsHideInbetween', 'URCommentsHideInbetween');
	migrateBooleanOptions('URCommentsHideReminderNeeded', 'URCommentsHideReminderNeeded');
	migrateBooleanOptions('URCommentsHideReplies', 'URCommentsHideReplies');
	migrateBooleanOptions('URCommentsHideCloseNeeded', 'URCommentsHideCloseNeeded');
	migrateBooleanOptions('URCommentsHideInital', 'URCommentsHideInital');
	migrateBooleanOptions('URCommentsHideWithoutDescript', 'URCommentsHideWithoutDescript');
	migrateBooleanOptions('URCommentsHideWithDescript', 'URCommentsHideWithDescript');
	migrateBooleanOptions('URCommentsHideClosed', 'URCommentsHideClosed');
	migrateBooleanOptions('URCommentsHideNotes', 'URCommentsHideNotes');
	migrateNumericOption('ReminderDays', 'ReminderDays');
	migrateNumericOption('CloseDays', 'CloseDays');

	saveOptions(options);
}

function migrateBooleanOptions(oldOption, newOption) {
	const value = localStorage.getItem(oldOption);

	if (value !== null && value !== undefined) {
		options[newOption] = value === "yes";
	}
}

function migrateNumericOption(oldOption, newOption) {
	const value = localStorage.getItem(oldOption);

	if (value !== null && value !== undefined) {
		const number = Number(value);

		if (!isNaN(number)) {
			options[newOption] = number;
		}
	}
}

function migrateTextOption(oldOption, newOption) {
	const value = localStorage.getItem(oldOption);

	if (value !== null && value !== undefined) {
		options[newOption] = value;
	}
}

function addDropdownSettings(container, title, label, name, values, callback) {
	const currentValue = options[name];

	const wrapper = $('<div class="urcom-option" title="' + title + '"></div>');
	wrapper.append('<span>' + label + '</span>');
	wrapper.append('<br />');

	const select = $('<select name="' + name + '" id="' + name + '" style="width: 100%;"></select>');

	for (let i = 0; i < values.length; i++) {
		select.append('<option value="' + values[i] + '" ' + (currentValue === values[i] ? 'selected="selected"' : '') + '>' + values[i] + '</option>');
	}

	// Create call back for the select
	select.on('change', callback);
	wrapper.append(select);

	container.append(wrapper);
}

function addBooleanSettings(container, title, label, name) {
	addBooleanSettingsCallback(container, title, label, name, toggleBoolean);
}

function addBooleanSettingsCallback(container, title, label, name, clickHandler) {
	const currentValue = options[name];

	const checkbox = $('<wz-checkbox id="' + name + '" Title="' + title + '" name="types" disabled="false" checked="' + currentValue + '">' + label + '</wz-checkbox>');
	const optionHtml = $('<div class="urcom-option"></div>').append(checkbox);

	container.append(optionHtml);

	checkbox.on('click', clickHandler);
}

function addTextNumberSettings(container, title, label, name) {
	const currentValue = options[name];

	const textInput = $('<wz-text-input type="number" min="0" max="999" id="' + name + '" value="' + currentValue + '"></wz-text-input>');
	const optionHtml = $('<div class="urcom-option"><span Title="' + title + '">' + label + '</span></div>').append(textInput);

	container.append(optionHtml);

	textInput.on('change', changeText);
}

function addTextAreaSettings(container, title, label, name) {
	const currentValue = options[name];

	const textArea = $('<wz-textarea id="' + name + '" style="height: 130px; width: 270px;" value="' + currentValue + '"></wz-textarea>');
	const optionHtml = $('<div class="urcom-option"><span Title="' + title + '">' + label + '</span></div>').append(textArea);

	container.append(optionHtml);

	textArea.on('change', changeText);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
////
//// UR Comment functions
////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function addCustomList() {
	let name = prompt("Enter the name for your list");

	if (!name) {
		refreshUI();
		return;
	}

	// Make sure it doesn't exist
	if (CustomLists.indexOf(name) >= 0) {
		alert(URC_USER_PROMPT[13]);
		return;
	}

	// Insert into the DB
	const objectStore = DB
		.transaction("custom_lists", "readwrite")
		.objectStore("custom_lists");

	objectStore.add({
		name: name,
		order: CustomLists.length - 2,
		responses: []
	});

	CustomLists.splice(CustomLists.length - 1, 1);
	CustomLists.push(name);
	CustomLists.push(URC_Text[56]);

	options.CustomTextList = name;
	saveOptions(options);

	CustomListText = [];

	refreshUI();

	alert(URC_USER_PROMPT[14]);
}

function renameList() {
	let name = prompt(URC_USER_PROMPT[16], options.CustomTextList);

	if (!name) {
		return;
	}

	// Make sure it doesn't exist
	if (CustomLists.indexOf(name) >= 0) {
		alert(URC_USER_PROMPT[13]);
		return;
	}

	const objectStore = DB
		.transaction("custom_lists", "readwrite")
		.objectStore("custom_lists");

	const request = objectStore.get(options.CustomTextList);

	request.onerror = (event) => {
		alert(URC_USER_PROMPT[18]);
	};

	request.onsuccess = (event) => {
		const data = event.target.result;

		data.name = name;

		const requestUpdate = objectStore.add(data);

		requestUpdate.onerror = (event) => {
			alert(URC_USER_PROMPT[18]);
		};

		requestUpdate.onsuccess = (event) => {
			objectStore.delete(options.CustomTextList);

			const index = CustomLists.indexOf(options.CustomTextList);
			CustomLists[index] = name;

			options.CustomTextList = name;
			saveOptions(options);

			refreshUI();

			alert(URC_USER_PROMPT[17]);

		}
	}
}

function cancelTextEdit() {
	ShowTextEditFields = false;
	TextEditIndex = undefined;

	refreshUI();
}

function saveCustomText() {

	const titleInput = $("#customTextTitle")[0];
	const textInput = $("#customTextText")[0];
	const statusSelect = $("#customTextStatus")[0];
	const signatureCheckbox = $("#customTextSignature")[0];

	const title = titleInput.value;
	const text = textInput.value;
	const statusIndex = statusSelect.selectedIndex;
	const signature = signatureCheckbox.checked;

	let status;

	switch (statusIndex) {
		case 0:
		default:
			status = "open";
			break;
		case 1:
			status = "closed";
			break;
		case 2:
			status = "notidentified";
			break;
	}

	if (!title || !text || !status) {
		alert(URC_USER_PROMPT[18]);
		return;
	}

	const objectStore = DB
		.transaction("custom_lists", "readwrite")
		.objectStore("custom_lists");

	const request = objectStore.get(options.CustomTextList);

	request.onerror = (event) => {
		alert(URC_USER_PROMPT[19]);
	};

	request.onsuccess = (event) => {
		const data = event.target.result;

		if (TextEditIndex !== undefined && TextEditIndex !== -1) {

			// Update text
			data.responses.forEach(response => {
				if (response.sorting === TextEditIndex) {
					response.name = title;
					response.text = text;
					response.status = status;
					response.signature = signature;
				}
			})

		} else {

			data.responses.push({
				sorting: CustomListText.length,
				name: title,
				text: text,
				status: status,
				signature: signature
			})

		}

		const requestUpdate = objectStore.put(data);

		requestUpdate.onerror = (event) => {
			alert(URC_USER_PROMPT[19]);
		};

		requestUpdate.onsuccess = (event) => {
			ShowTextEditFields = false;
			TextEditIndex = undefined;

			loadCustomText(() => {
				refreshUI();
			});
		}
	}

}

function deleteCustomList() {

	const result = confirm(URC_USER_PROMPT[20]);

	if (!result) {
		return;
	}

	const objectStore = DB
		.transaction("custom_lists", "readwrite")
		.objectStore("custom_lists");

	const request = objectStore.delete(options.CustomTextList);

	request.onerror = (event) => {
		alert(URC_USER_PROMPT[21]);
	};

	request.onsuccess = (event) => {

		// Fall back to default list
		CustomLists = CustomLists.filter(name => name !== options.CustomTextList);
		CustomListText = [];
		options.CustomTextList = "Default";

		refreshUI();

	}

}

function deleteTextItem() {
	DeleteTextMode = !DeleteTextMode;
	refreshUI();

	if (DeleteTextMode) {
		showWMEMessage(URC_USER_PROMPT[22], 5000);
	}
}

function executeDeleteTextItem(index) {

	return function() {
		const text = CustomListText[index];

		const objectStore = DB
			.transaction("custom_lists", "readwrite")
			.objectStore("custom_lists");

		const request = objectStore.get(options.CustomTextList);

		request.onerror = (event) => {
			alert(URC_USER_PROMPT[19]);
		};

		request.onsuccess = (event) => {
			const data = event.target.result;

			// Remove the one we don't need
			data.responses = data.responses.filter(response => response.name !== text.name || response.text !== text.text || response.status !== text.status);

			// Update sorting
			for (let i = 0; i < data.responses.length; i++) {
				data.responses[i].sorting = i;
			}

			const requestUpdate = objectStore.put(data);

			requestUpdate.onerror = (event) => {
				alert(URC_USER_PROMPT[23]);
			};

			requestUpdate.onsuccess = (event) => {
				DeleteTextMode = false;

				loadCustomText(() => {
					refreshUI();
				});
			}
		}
	}

}

function migrateDb(oldDb) {
	return new Promise(async resolve => {

		let migrating = true;

		oldDb.transaction(async (tx) => {

			await tx.executeSql('SELECT * FROM custom_comments', [], async function (tx, results) {

				const len = results.rows.length;

				console.log("[URCom] Migration found " + len + " existing lists");

				for (let i = 0; i < len; i++) {

					let migratingList = true;

					const name = results.rows.item(i).name;
					const responses = [];

					await tx.executeSql('SELECT * FROM custom_comments_text WHERE list = ? ORDER BY sorting', [name], function (tx, results) {
						const len = results.rows.length;

						for (let j = 0; j < len; j++) {
							const result = results.rows.item(j);

							responses.push({
								sorting: result.sorting,
								name: result.name,
								text: result.text,
								status: result.status,
								signature: result.signature
							});
						}

						const objectStore = DB
							.transaction("custom_lists", "readwrite")
							.objectStore("custom_lists");

						objectStore.add({
							name: name,
							order: i,
							responses: responses
						});

						migratingList = false;

					});

					while (migratingList) {
						await sleep(1);
					}
				}

				migrating = false;

			});

		}, (error) => {
			// Ignore since prolly table doesn't exist
			migrating = false;
		});

		while (migrating) {
			await sleep(1);
		}

		oldDb.transaction((tx) => {
			tx.executeSql('DELETE FROM custom_comments', []);
		});

		resolve();
	});
}

function addNewItem() {
	ShowTextEditFields = true;
	refreshUI()
}

function editItem() {
	ShowTextOptionButtons = false;

	TextEditIndex = -1;
	refreshUI();

	showWMEMessage(URC_USER_PROMPT[24], 5000);
}

function selectEditItem(index) {

	return function() {

		const text = CustomListText[index];

		if (!text) {
			TextEditIndex = undefined;
			return;
		}

		ShowTextEditFields = true;
		ShowTextOptionButtons = true;
		TextEditIndex = index;

		// Refresh first
		refreshUI();

		// Then update the settings
		const titleInput = $("#customTextTitle")[0];
		const textInput = $("#customTextText")[0];
		const statusSelect = $("#customTextStatus")[0];
		const signatureCheckbox = $("#customTextSignature")[0];

		titleInput.value = text.name;
		textInput.value = text.text;
		signatureCheckbox.checked = text.signature;

		switch (text.status) {
			case "open":
				statusSelect.selectedIndex = 0;
				break;
			case "closed":
				statusSelect.selectedIndex = 1;
				break;
			case "notidentified":
				statusSelect.selectedIndex = 2;
				break;
		}
	}
}

function escapeHtml(a) {
	a = a.replace(/&/g, "&amp;");
	a = a.replace(/</g, "&lt;");
	a = a.replace(/>/g, "&gt;");
	a = a.replace(/"/g, "&quot;");
	a = a.replace(/'/g, "&#039;");
	return a;
}

function autoZoomIN(Title, Comment, URStatus, urID, AutoSendComment) {
	return function() {

		let URCommentsUnsavedDetected = false;
		const URCommentsUnsavedCount = Number($("#save-button .counter").html());

		// Detect unsaved changed if there are and the auto save option is on abort adding comments to the UR
		if (!isNaN(URCommentsUnsavedCount) && URCommentsUnsavedCount > 0 && options.SaveAfterComment && URStatus.toLowerCase() !== "open") {
			URCommentsUnsavedDetected = true;
			alert(URC_USER_PROMPT[9]); //"UrComments has detected that you have unsaved changes!\n\nWith the Auto Save option enabled and with unsaved changes you cannot send comments that would require the script to save. Please save your changes and then re-click the comment you wish to send."
		}

		// Get urID for manually clicked comments
		if (urID === 0 || urID === "" || urID === undefined) {
			urID = $(".map-problem.marker-selected").data("id");
		}

		// Check to see if the auto zoom in option is enabled, if it is start the zooming in process
		// having OneOrTheOther first is a hack to make the logic work
		let OneOrTheOther = false;

		if (options.NewZoomIn && Title !== URCommentsArray[ReminderPosition] && Title !== URCommentsArray[CloseNotIdentifiedPosition] && AutoSendComment !== "AutoSendComment") {
			OneOrTheOther = true;
		}

		if (OneOrTheOther && URCommentsUnsavedDetected === false) {

			// Predefined zoom threshold for auto zoom
			const zoom = 15;

			// Do not zoom back out if we are already zoomed in and just happen to be re-clicking on a UR.
			// or we have the map set good for a 4-day reminder
			const WazeCurrentZoom = getWazeMapZoomLevel();

			if (WazeCurrentZoom < zoom) {
				goToURById(urID, zoom);
			}

			setTimeout(postURComment(Title, Comment, URStatus, AutoSendComment, urID), 1);

		} else if (URCommentsUnsavedDetected === false) {

			// auto zoom in is disabled jump to postURComment
			// we have to use set timeout here because we need the  return function() in PostURComment
			// for when we are zooming in and out for the reminder
			// since we are not zooming here jump rigth to PostURComment
			setTimeout(postURComment(Title, Comment, URStatus, AutoSendComment, urID), 1);
		}

	};
}

function getWazeMapZoomLevel() {
	return W.map.mapState.mapLocation.zoom;
}

function goToURById(urID, zoom) {

	// save zoom so we can return this the current zoom level
	ReturnToCurrentZoom = getWazeMapZoomLevel();

	const geo = getUrById(urID).attributes.geometry;
	W.map.getOLMap().moveTo([geo.x, geo.y], zoom);

}

function postURComment(title, comment, urStatus, autoSendComment, urID) {

	// The user clicked on a comment link
	return function() {
		// Swap out special text
		comment = stringSwap(comment, urID);

		$('.new-comment-form .send-button').on('click', urCommentZoomOutCheck(title, urStatus));

		// Check if the comment text area is present if not alert the user to open a UR
		const commentArea = $($(".new-comment-text")[0]);

		if (commentArea) {
			commentArea.val(comment).change();

			commentArea.keyup();

			if(!$('.no-comments')) {
				commentArea.css("backgroundColor","Yellow");
			}

			// Click the UR status
			setTimeout(checkIfClickStatus(urStatus, autoSendComment), 100);
		} else {
			// We were unable to find an open UR
			showWMEMessage(URC_USER_PROMPT[10], 5000); //"URComments: Can not find the comment box! In order for this script to work you need to have a user request open."
		}
	};

}

function urCommentZoomOutCheck(Title, URStatus) {
	return function() {
		// This is the new place for zooming out and will still be happening while the comment is sending
		if (options.ZoomOutAfterComment) {
			setTimeout(setZoomCloseUR(ReturnToCurrentZoom, "LeaveOpen"), 0);
		}

		setTimeout(urCommentSendBtnClicked(Title, URStatus), 20);
	}
}

function setZoomCloseUR(zoom, b) {
	// This sets the map zoom; 0 is all the way out; 10 is all the way in but next to useless (the map and sat views disappear);
	// the closest zoom that shows the sat and map is zoom 9
	return function() {
		W.map.getOLMap().moveTo(W.map.getCenter(), zoom);

		// Close ur if zooming out to
		if (b === "CloseUR") {
			W?.map?.panelRegion?.currentView?.destroy();
		}
	};
}

function stringSwap(string, urID) {
	if (urID > 0) {
		const ur = getUrById(urID);

		string = string.replace("$URD", ur.attributes.typeText + ' : ' + ur.attributes.description);
		string = string.replace(/          /g, "");
		string = string.replace(/        /g, "");
		//string = string.replace(/(\r\n|\n)/gm, "");
	} else if ($(".description .content").length > 0) {
		string = string.replace("$URD", $(".description .content").html());
		string = string.replace(/          /g, "");
		string = string.replace(/        /g, "");
		//string = string.replace(/(\r\n|\n)/gm, "");
		string = string.replace("$USERNAME", W.loginManager.user.getUsername());
	} else if (string.indexOf("$URD") >= 0) {
		string = string.replace(" \"$URD\"", "");
	}

	const greeting = options.Greeting;
	if (greeting && greeting !== "" && greeting !== null && greeting !== "undefined") {
		string = greeting + "\r\n" + string;
	}

	const signature = options.Signature;
	if (signature && signature !== "" && signature !== null && signature !== "undefined") {
		string = string.replace('$SIGNATURE', "\r\n" + signature);
	}

	// Selected segments
	let streetName = "";

	if (W.selectionManager.getSelectedFeatures().length >= 1 && W.selectionManager.getSelectedFeatures().length <= 2) {
		for (let i = 0; i < W.selectionManager.getSelectedFeatures().length; i++) {
			if (W.selectionManager.getSelectedFeatures()[i].model.CLASS_NAME === "W.Feature.Vector.Segment") {
				const primaryStreetID = W.selectionManager.getSelectedFeatures()[i].model.attributes.primaryStreetID;
				if (i === 0) {
					streetName = W.model.streets.objects[primaryStreetID].name;
				} else {
					streetName = "the intersection of " + streetName + " and " + W.model.streets.objects[primaryStreetID].name;
				}
			}
		}

		string = string.replace("$SELSEGS", streetName);
	}

	return string;
}

function urCommentSendBtnClicked(title, urStatus) {

	// Waze is weird and after clicking send button the close button had to be refound, which takes a few seconds for the new close button to be drawn
	// so we wait 1500 milliseconds before looking for the close button
	// since we are passing vars to the next function we have to pass this to handler function so it doesn't happen on click

	// The above is still true but what i have found is that it sometimes takes a while from clicking send to the comment actually posting.
	// There was time when i closed the comment before it actually posted and it would have to be redone. So added a check and a timeout and recheck if the textarea isn't empty.
	// Afterwards we can re-grab and click the close button
	return function() {

		// Grab the close button to compare to later
		CloseButtonHolder = $(".problem-panel-navigation button.close-button");

		// Check to see if the comments went through before saving or closing the comment
		const textArea = $(".new-comment-text");
		if (textArea.val() !== "" && textArea.val() !== undefined) {

			PauseCount++;
			setTimeout(urCommentSendBtnClicked(title, urStatus), 20);

		} else {

			PauseCount = 1;

			// Check if we want to unfollow
			const followCheckbox = $('.new-comment-form wz-checkbox')[0];

			if (options.URCommentURUnfollow && followCheckbox.checked) {
				followCheckbox.checked = false;

				const urID = $(".map-problem.marker-selected").data("id");

				setTimeout(toggleFollowConversation(urID), 500);
			}

			// Delay this command for uro not to freak out on refreshing uro bubble ur count
			setTimeout(closeDelayHack2(title, urStatus), 100);

		}
	};
}

function toggleFollowConversation(urID) {
	return function() {
		W.controller.descartesClient.followUpdateRequest({ follow: false, mapUpdateRequestID: urID });
		W.model.updateRequestSessions.getObjectById(urID).setAttribute('isFollowing', false);
	};
}

function closeDelayHack2(title, urStatus) {
	return function() {

		PauseCount = 1;

		if (urStatus.toLowerCase() === "solved" || urStatus.toLowerCase() === "notidentified") {

			// This clicks the waze save btn
			if (options.AutoClickURStatus && options.SaveAfterComment) {

				// Click save
				$('.toolbar #save-button').trigger('click');

			} else if (options.UrCommentAutoCloseComment) {

				W?.map?.panelRegion?.currentView?.destroy();

			}

		} else {

			// When not saving you have to click close.
			if (options.UrCommentAutoCloseComment) {

				W?.map?.panelRegion?.currentView?.destroy();

			}
		}

		//this is the new place for zooming out and will still be happening while the comment is sending
		//zoom out option - if the user option is set to reload map after posting a comment reply
		if (options.ZoomOutAfterComment) {
			//urcToConsole("zoom out closeDelayHack2");
			setTimeout(setZoomCloseUR(ReturnToCurrentZoom, "LeaveOpen"), 0);
		}

		setTimeout(urcUREvent_onObjectsAdded('URCommentsReload'), 0);

	};
}

function urcUREvent_onObjectsAdded(a) {

	return function() {

		// Check if filtering or the pill count are enabled otherwise abort this function
		if (!options.URCommentsFilterEnabled && !options.URCommentsPillEnabled && !options.URCommentsAutoSendMyReminders) {
			return
		}

		if (a === "timedout" && window.HideUR === "running") {
			window.HideUR = "stopped";
			a = "timedout";
		}

		if (window.HideUR === "stopped" && a !== "timedout") {
			clearTimeout(window.buffertedtimeout);
			clearTimeout(window.buffertedtimeout2);

			// Certain events need to be launched a bit later then others
			if (a === "moveend" || a === "zoomend") {
				window.buffertedtimeout = setTimeout(FilterURs, 2000);
			} else {
				window.buffertedtimeout = setTimeout(FilterURs, 500);
			}

			window.HideUR = "running";
			window.BufferFillterURCommand = false;
			window.buffertedtimeout2 = setTimeout(urcUREvent_onObjectsAdded("timedout"), 30000);
		}

	};
}

function FilterURs() {

	const allUrs = W.model.mapUpdateRequests.objects;
	const allUrIDs = Object.keys(allUrs);

	// Abort filtering URs if the list is empty
	if (allUrIDs.length === 0) {
		window.HideUR = "stopped";
		setTimeout(urcUREvent_onObjectsAdded("list is empty retry"), 5000);
		return;
	}

	// This seems to trigger loading info from the UR but may not be needed
	/*
	// Check that all visible urs are loaded
	let idList = [];
	let PushNeededCount = 0;

	for (let urID of allUrIDs) {

		if (getUrById(urID) == null) {
			idList.push(urID);
			PushNeededCount = PushNeededCount + 1;
		}

		// Batch per 500
		if (PushNeededCount > 500) {
			//W.model.updateRequestSessions.get(idList);
			idList = [];
			PushNeededCount = 0;
		}
	}

	if (idList.length > 0) {
		//W.model.updateRequestSessions.get(idList);
	}
	 */

	let totalVisibleUrs = 0;

	let allID = '';
	let countInCurrentList = 0;

	let delay = 0;

	for (let urID of allUrIDs) {

		totalVisibleUrs++;

		// Make sure we can see the UR
		if (onScreen(allUrs[urID])) {

			if (allID !== '') {
				allID += ",";
			}

			allID = allID + urID;
			countInCurrentList = countInCurrentList + 1;
		}

		// Batch the current list
		if (countInCurrentList >= 500) {

			// Send this batch in a timeout
			setTimeout(FilterURs2(allID), delay);

			countInCurrentList = 0;
			allID = "";
			delay = delay + 1000;
		}
	}

	// Update the count in the script tab
	$("#URCount").html(`${totalVisibleUrs}`);

	setTimeout(FilterURs2(allID), delay);
}

function FilterURs2(allID) {

	return function() {

		const CloseDays = options.CloseDays;
		const ReminderDays = options.ReminderDays;
		const ClosePlusReminderDays = CloseDays + ReminderDays;

		const EditorID = W.loginManager.user.getID(); // Editor's id number
		const LoggedInEditor = W.loginManager.user.getUsername();

		if (allID !== "") {

			// This is the link that works but I think it is grabbing a cached version of the page
			//https://www.waze.com/row-Descartes/app/MapProblems/UpdateRequests?ids=20006756

			const urSessionURL = 'https://' + window.location.host + W.Config.api_base + '/MapProblems/UpdateRequests?ids=' + allID + '&time=' + (new Date()).getTime();

			//urcToConsole("urSessionURL: " + urSessionURL);

			// https://www.waze.com/Descartes-live/app/MapProblems/UpdateRequests?ids=3678676
			let LastCommenterUserID = '0';

			// Send a request to load the UR data
			$.ajax({
				dataType: "json",
				url: urSessionURL,

				success: function(json) {

					try {

						const urs = json.updateRequestSessions.objects;
						const layer = W.map.layers.find((layer) => layer.name === "update_requests");

						for (let jsnObj = 0; jsnObj < urs.length; jsnObj++) {

							const urDetail = urs[jsnObj];
							const id = urDetail.id;
							const ur = W.model.mapUpdateRequests.objects[id];

							const urDescription = ur.attributes.description;

							let skip = false;
							let urStyle = 'shown';
							let Marked = '';
							let UrcURType = '';
							let lastCommentDateTime = 0;

							const numberOfComments = urDetail.comments.length;
							let CountsBGColor = '#FFFF99'; // Light yellow

							const urBubble = $('image#' + id);

							if (numberOfComments > 0) {

								let reporterResponded = false;
								let LastComment = '';

								for (let comment of urDetail.comments) {

									if (comment.userID === -1) {
										reporterResponded = true;
									}

									const commentText = comment.text;

									lastCommentDateTime = comment.createdOn;
									LastCommenterUserID = comment.userID;
									LastComment = commentText;

									// Only white if logged in editor has the last editor comment
									if (LastCommenterUserID > 1) {
										if (LastCommenterUserID === EditorID) {
											CountsBGColor = "white";
										} else {
											CountsBGColor = "#FFFF99"; //light yellow
										}
									}

									// NOTE, ROADWORKS, CONSTRUCTION, CLOSURE, EVENT,
									if (commentText.indexOf("NOTE]") >= 0 || commentText.indexOf("ROADWORKS]") >= 0 || commentText.indexOf("CONSTRUCTION]") >= 0 || commentText.indexOf("CLOSURE]") >= 0 || commentText.indexOf("EVENT]") >= 0 || commentText.indexOf(LoggedInEditor) >= 0) {
										skip = true;
									}

									if (commentText.indexOf(LoggedInEditor) >= 0 && options.URCommentsReplaceTagWithEditorName) {
										Marked = LoggedInEditor;
									} else if (commentText.indexOf("NOTE]") >= 0) {
										Marked = "Note";
									} else if (commentText.indexOf("ROADWORKS]") >= 0) {
										Marked = "Roadworks";
									} else if (commentText.indexOf("CONSTRUCTION]") >= 0) {
										Marked = "Construction";
									} else if (commentText.indexOf("CLOSURE]") >= 0) {
										Marked = "Closure";
									} else if (commentText.indexOf("EVENT]") >= 0) {
										Marked = "Event";
									}

									if (options.URCommentsDontShowTaggedText && Marked !== "") {
										Marked = "DontShowTaggedText";
									}

								}

							}

							let lastCommentAge = uroDateToDays(lastCommentDateTime);

							if (urDescription) {

								// Skip tagged URs
								if (urDescription.indexOf("NOTE]") >= 0 || urDescription.indexOf("ROADWORKS]") >= 0 || urDescription.indexOf("CONSTRUCTION]") >= 0 || urDescription.indexOf("CLOSURE]") >= 0 || urDescription.indexOf("EVENT]") >= 0 || urDescription.indexOf(LoggedInEditor) >= 0) {
									//urcToConsole("skipped2 URO+ tagged in description urid: " + id + "with comment text " + urDescription);
									skip = true;
								}

								if (urDescription.indexOf(LoggedInEditor) >= 0 && options.URCommentsReplaceTagWithEditorName) {
									Marked = LoggedInEditor;
								} else if (urDescription.indexOf("NOTE]") >= 0) {
									Marked = "Note";
								} else if (urDescription.indexOf("ROADWORKS]") >= 0) {
									Marked = "Roadworks";
								} else if (urDescription.indexOf("CONSTRUCTION]") >= 0) {
									Marked = "Construction";
								} else if (urDescription.indexOf("CLOSURE]") >= 0) {
									Marked = "Closure";
								} else if (urDescription.indexOf("EVENT]") >= 0) {
									Marked = "Event";
								} else if (urDescription.indexOf("WSLM]") >= 0) {
									Marked = "WSLM";
								}


								if (options.URCommentsDontShowTaggedText && Marked !== ""){
									Marked = "DontShowTaggedText";
								}

								if (options.URCommentsHideWithDescript && numberOfComments <= 0) {
									UrcURType = UrcURType + " WithDescription";
								}

							} else {
								if (options.URCommentsHideWithoutDescript && numberOfComments <= 0) {
									UrcURType = UrcURType + " WithoutDescription";
								}
							}

							if (ur.attributes.open === false) {
								skip = true;
							}

							if (skip === false && ur.type === "mapUpdateRequest") {

								if (numberOfComments > 0) {

									// 4 day UR if there is only one comment, if the comment is less or equal to the editors setting, and if the last comment was not made by the driver
									if (numberOfComments === 1 && ReminderDays > 0 && lastCommentAge >= ReminderDays && LastCommenterUserID > 1) {

										if (options.URCommentsHideReminderNeeded) {
											UrcURType = UrcURType + " NeedsReminder";
										}

										if (LastCommenterUserID === EditorID && options.URCommentsAutoSendMyReminders && urBubble.hasClass('ReminderSent') === false && EditorID > 0) {

											showWMEMessage(URC_USER_PROMPT[7] + id, 2500); //"URComments: Adding reminder message to UR: "

											let comment = URCommentsArray[ReminderPosition + 1];
											comment = stringSwap(comment, id);

											W.model.updateRequestSessions.objects[id].addComment(comment);

											// ToggleFollowConversation false
											if (options.URCommentURUnfollow) {
												setTimeout(toggleFollowConversation(id), 0);
											}

											// Attempting to stop double reminders from being sent by adding a class that we can check for before sending the reminder
											urBubble.addClass('ReminderSent');

											// Set to hide if hide in between states is checked
											if (options.URCommentsHideInbetween) {
												UrcURType = UrcURType + " InBetweenStates";
											}

										}

										// 7 day if the number of comments are greater than or equal to 1, days past are more than 7, the last comment was not from the driver, and number of comments are less than 2
									} else if ((numberOfComments >= 2 && lastCommentAge >= CloseDays && LastCommenterUserID > 1) || (numberOfComments >= 1 && ReminderDays === 0 && lastCommentAge >= CloseDays && LastCommenterUserID > 1)) {

										// Hide or show UR that need closing
										if (options.URCommentsHideCloseNeeded && UrcURType === "") {
											UrcURType = UrcURType + " NeedsClose";
										}

									} else if (LastCommenterUserID > 0) {

										// In between states waiting for replies or time to elapse
										if (options.URCommentsHideInbetween) {
											UrcURType = UrcURType + " InBetweenStates";
										}

									}

									// Last comment was a user reply; change the pin color to blue or peach
									if (LastCommenterUserID < 1) {
										if (CountsBGColor === "white") {
											CountsBGColor = "#79B5C7"; // Light blue
										} else {
											CountsBGColor = "#FFCC99"; // Peach
										}

										if (options.URCommentsHideReplies) {
											UrcURType = UrcURType + " HasUserReplies";
										}

									} else if (lastCommentAge > ClosePlusReminderDays && CountsBGColor !== "white") {
										CountsBGColor = "#FF8B8B"; // Light red
									}

									if (CountsBGColor === "#FFFF99" && numberOfComments >= 1 && lastCommentAge >= ClosePlusReminderDays && LastCommenterUserID > 1) {
										CountsBGColor = "#FF8B8B"; // Light red
									}

								}

							}

							if (lastCommentAge === undefined) {
								lastCommentAge = "?";
							}

							let Message = '';

							if (Marked === "DontShowTaggedText" ){
								Message = numberOfComments + UrCommentsTextPic + " " + lastCommentAge + UrCommentsTimePic;
								CountsBGColor = "#CCCCCC"; //light grey
							} else if (Marked !== "") {
								Message = Marked + " " + numberOfComments + UrCommentsTextPic;
								CountsBGColor = "#CCCCCC"; //light grey
							} else {
								Message = numberOfComments + UrCommentsTextPic + " " + lastCommentAge + UrCommentsTimePic;
							}

							// If the ur is tagged or has more than 0 comments reorder the ur stacking
							if (Marked !== "" || numberOfComments > 0) {

								let MessageOffset = Message.length;
								MessageOffset = MessageOffset - (UrCommentsTextPic.length - 3)
								MessageOffset = MessageOffset - (UrCommentsTimePic.length - 4)

								if (MessageOffset < 10) {
									MessageOffset = MessageOffset * 1.4;
								} else {
									MessageOffset = MessageOffset * 2.3;
								}

								MessageOffset = "-" + MessageOffset + "px";

								if (CountsBGColor === "#CCCCCC") { // Light grey
									urBubble.css({
										'z-index': '999'
									});
								} else if (CountsBGColor === "white" || CountsBGColor === "#79B5C7") {
									urBubble.css({
										'z-index': '998'
									});
									//).style.visibility
								} else if (CountsBGColor === "#FF8B8B") { // Light red
									urBubble.css({
										'z-index': '997'
									});
								}

								/*

								CountsBGColor = "#FFFF99"; //light yellow = UR that are waiting for the last editor but still has time before the Close days setting ex 7 days
								CountsBGColor = "#CCCCCC"; //light grey = URO styled notes ex [NOTE]
								CountsBGColor = "#FFCC99"; //peach = another editor before the close days has gone by has user reply
								CountsBGColor = "#FF8B8B"; //light red = past the close days setting and is now able to be taken over by another editor
								CountsBGColor = "white"; = UR that "belong to the editor logged in that need work
								CountsBGColor = "#79B5C7"; //light blue = UR that "belong to the editor logged in that have user replies

								White = The editor logged in has comments on the UR and the UR needs work
								light blue = The editor logged in has comments on the UR and the UR's last comment was a user reply
								light red = past the close days setting and is now able to be taken over by another editor

								light yellow = UR that are waiting for the another editor to send a reminder or to be closed but still has time before the Close days setting (ex 7 days)
								peach = UR that another editor had commented on but the last comment is a user reply

								light grey = URO styled notes ex [NOTE]

								*/

								if (options.URCommentsPillEnabled) {

									const featureId = layer.features.find((feature) => feature.data.wazeFeature.id === id).geometry.id;
									const urCountBubble = $('image#' + featureId);

									// Add URC bubble
									if (urCountBubble.hasClass('URCounts') === false) {

										urBubble.append($("<div>").css("clear", "both")
											.css("margin-bottom", "10px")

											.append($("<div>").html(Message)
												.css("color", "black")
												.css("background", CountsBGColor)
												.css("position", "absolute")
												.css("top", "30px")
												.css("height", "18px")
												.css("right", MessageOffset)

												.css("display", "block")
												.css("width", "auto")
												.css("white-space", "nowrap")
												.css("padding-left", "5px")
												.css("padding-right", "5px")

												.css("border", "1px solid")
												.css("border-radius", "25px")

												.addClass('URCounts')
											)
										);

									} else {
										urCountBubble.html(Message);
										urCountBubble.css("background", CountsBGColor);
										urCountBubble.css("right", MessageOffset);
									}

									// End of URC bubble

								}
							}

							// URC UR Filtering

							let uroURFiltersActive = false; // var used to keep track if we actually need to show / hide the UR pins

							if (sessionStorage.UROverview_hasActiveURFilters === undefined) {

								// These are all of the tags that URO uses to filter URs. If any of the settings are enabled set a var to let URO do the filterenabled
								if ($("#_cbFilterWazeAuto").is(":checked")
									|| $("#_cbFilterIncorrectTurn").is(":checked")
									|| $("#_cbFilterIncorrectAddress").is(":checked")
									|| $("#_cbFilterIncorrectRoute").is(":checked")
									|| $("#_cbFilterMissingRoundabout").is(":checked")
									|| $("#_cbFilterGeneralError").is(":checked")
									|| $("#_cbFilterTurnNotAllowed").is(":checked")
									|| $("#_cbFilterIncorrectJunction").is(":checked")
									|| $("#_cbFilterMissingBridgeOverpass").is(":checked")
									|| $("#_cbFilterWrongDrivingDirection").is(":checked")
									|| $("#_cbFilterMissingExit").is(":checked")
									|| $("#_cbFilterMissingRoad").is(":checked")
									|| $("#_cbFilterBlockedRoad").is(":checked")
									|| $("#_cbFilterMissingLandmark").is(":checked")
									|| $("#_cbFilterUndefined").is(":checked")
									|| $("#_cbFilterRoadworks").is(":checked")
									|| $("#_cbFilterConstruction").is(":checked")
									|| $("#_cbFilterClosure").is(":checked")
									|| $("#_cbFilterEvent").is(":checked")
									|| $("#_cbFilterNote").is(":checked")
									|| $("#_cbInvertURFilter").is(":checked")
									|| $("#_cbFilterOpenUR").is(":checked")
									|| $("#_cbFilterClosedUR").is(":checked")
									|| $("#_cbFilterSolved").is(":checked")
									|| $("#_cbFilterUnidentified").is(":checked")
									|| $("#_cbEnableMinAgeFilter").is(":checked")
									|| $("#_cbEnableMaxAgeFilter").is(":checked")
									|| $("#_cbURDescriptionMustBePresent").is(":checked")
									|| $("#_cbURDescriptionMustBeAbsent").is(":checked")
									|| $("#_cbEnableKeywordMustBePresent").is(":checked")
									|| $("#_cbEnableKeywordMustBeAbsent").is(":checked")
									|| $("#_cbCaseInsensitive").is(":checked")
									|| $("#_cbHideMyComments").is(":checked")
									|| $("#_cbHideAnyComments").is(":checked")
									|| $("#_cbHideIfLastCommenter").is(":checked")
									|| $("#_cbHideIfNotLastCommenter").is(":checked")
									|| $("#_cbHideIfReporterLastCommenter").is(":checked")
									|| $("#_cbHideIfReporterNotLastCommenter").is(":checked")
									|| $("#_cbEnableMinCommentsFilter").is(":checked")
									|| $("#_cbEnableMaxCommentsFilter").is(":checked")
									|| $("#_cbHideMyFollowed").is(":checked")
									|| $("#_cbHideMyUnfollowed").is(":checked")
									|| $("#_cbEnableCommentAgeFilter2").is(":checked")
									|| $("#_cbEnableCommentAgeFilter").is(":checked")
									|| $("#_cbURUserIDFilter").is(":checked")
									|| $("#_cbURResolverIDFilter").is(":checked")
								) {

									uroURFiltersActive = true; // At least one of URO's UR checkboxes were enabledPlugin

								}

							} else if (sessionStorage.UROverview_hasActiveURFilters === "true") {
								uroURFiltersActive = true; // Twisters URO active filter bit is set to true
							}

							if (uroURFiltersActive === true && options.URCommentsFilterEnabled) {
								showWMEMessage(URC_USER_PROMPT[8], 5000); // "URComment's UR Filtering has been disabled because URO\'s UR filters are active."

								$('#URCommentsFilterEnabled').prop('checked', false);

								options.URCommentsFilterEnabled = false;
								saveOptions(options);

							}

							if (options.URCommentsFilterEnabled && uroURFiltersActive === false) {
								// Check if we should hide URO stype tagged UR

								if (options.URCommentsHideNotes && Marked !== "") {
									UrcURType = UrcURType + " IsTagged";
								} else if (Marked !== "" && UrcURType !== "IsClosed") {
									UrcURType = UrcURType + " 1";
								}

								// check if not "my" ur
								if (options.URCommentsHideNotMyUR && numberOfComments > 0) {
									// Light red, Peach, Light yellow
									if (CountsBGColor === "#FFCC99" || CountsBGColor === "#FFFF99" || CountsBGColor === "#FF8B8B") {
										UrcURType = UrcURType + " NotMyUR";
									}
								}

								// URCommentsShowPastClose
								if (options.URCommentsShowPastClose && numberOfComments > 0 && lastCommentAge > ClosePlusReminderDays) {

									// Light red, Peach, Light yellow
									if (CountsBGColor === "#FFCC99" || CountsBGColor === "#FFFF99" || CountsBGColor === "#FF8B8B") {
										if (UrcURType.indexOf("HasUserReplies") < 0) {
											UrcURType = " ShowPastClose";
										}
									}
								}

								// Initial UR no comments
								if (urDetail.comments.length === 0 && options.URCommentsHideInital) {
									UrcURType = UrcURType + " initial";
								}

								if (UrcURType.indexOf("IsTagged") > 0) {
									urStyle = 'hidden';
								} else if (UrcURType.indexOf("InBetweenStates") > 0
									|| UrcURType.indexOf("NeedsReminder") > 0
									|| UrcURType.indexOf("NeedsClose") > 0
									|| UrcURType.indexOf("initial") > 0
									|| UrcURType.indexOf("HasUserReplies") > 0
									|| UrcURType.indexOf("IsClosed") > 0
									|| UrcURType.indexOf("NotMyUR") > 0
									|| UrcURType.indexOf("WithoutDescription") > 0
									|| UrcURType.indexOf("WithDescription") > 0
								) {
									urStyle = 'hidden';
								} else {
									urStyle = 'visible';
								}

								urBubble.css("visibility", urStyle);

								// when filtering is disable and URO filters are disabled reshow all the UR
							} else if (!options.URCommentsFilterEnabled && uroURFiltersActive === false) {
								urStyle = 'visible';
								urBubble.css("visibility", urStyle);
							}

						}
						window.HideUR = "stopped";

					} catch (e) {

						console.log(e);

						setTimeout(FilterURs, 1000);

					}
				}
			});

		} else {
			window.HideUR = "stopped";
		}

	};
}

function onScreen(obj) {

	// Geometry was removed from W.model.mapUpdateRequests.objects[id]
	// but can be found in W.model.mapUpdateRequests.objects[id].geometry
	if (obj.geometry) {
		return W.map.getExtent().intersectsBounds(obj.geometry.getBounds());
	}

	return false;
}

function uroDateToDays(dateToConvert) {
	const dateNow = new Date();
	const elapsedSinceEpoch = dateNow.getTime();
	const elapsedSinceEvent = elapsedSinceEpoch - dateToConvert;

	dateNow.setHours(0);
	dateNow.setMinutes(0);
	dateNow.setSeconds(0);
	dateNow.setMilliseconds(0);

	const elapsedSinceMidnight = elapsedSinceEpoch - dateNow.getTime();

	if (elapsedSinceEvent < elapsedSinceMidnight) {
		// event occurred today...
		return 0;
	} else {
		// event occurred at some point prior to midnight this morning, so return a minimum value of 1...
		return 1 + Math.floor((elapsedSinceEvent - elapsedSinceMidnight) / 86400000);
	}
}

function uroGetCommentAge(commentObj) {
	if (commentObj.createdOn === null) {
		return -1;
	}

	return uroDateToDays(commentObj.createdOn);
}

function showWMEMessage(message, delay) {

	const dateNow = new Date();
	let TrickRemove = dateNow.getTime();

	const width = message.length * 10;

	// Message holder div
	const c = '<div id="URCMessage" style="width: 100%; font-size: 15px; font-weight: bold; margin-left: auto; margin-right: auto; position: absolute; top: 0; left: 10px; z-index: 1000;"></div>';
	$("#map").append(c);

	// Message div
	const d = '<div id="URCMapNote' + TrickRemove + '" style="width: ' + width + 'px; font-size: 15px; font-weight: bold; margin-left: auto; margin-right: auto; background-color: orange;"><center><b>' + message + '</b></center></div>';
	$("#URCMessage").append(d);

	// Remove messages after the duration has passed
	$("#URCMapNote" + TrickRemove).show().delay(delay).queue(function(n) {
		$(this).remove();
		n();
	});

}

function checkIfClickStatus(URStatus, AutoSendComment) {
	return function() {

		if (options.AutoClickURStatus) {

			// Bypass the confirm function so other site messages do not come up!
			confirmToConsole();

			const openInput = $("input[value='open']");

			// Click the ur status options (Not identified solved, open)
			if (openInput) {

				if (URStatus.toLowerCase() === "notidentified") {

					// Click Not identified
					$("input[value='not-identified']").trigger('click');

				} else if (URStatus.toLowerCase() === "solved") {

					// Click solved

					$("input[value='solved']").trigger('click');
				} else {

					// Click back on open just encase the wrong reply was clicked previously
					openInput.trigger('click');

				}
			}

			// Restores confirm function so other site messages come up!
			restoreConfirmToConfirm();
		}

		if (AutoSendComment === "AutoSendComment") {
			setTimeout(uRVerifyStatusSet(URStatus, AutoSendComment), 1);
		}
	};
}

function confirmToConsole() {
	// Override the default action of the standard confirm by writing confirm to a new function nconfirm, making a 'fake' confirm and then restoring confirm by copying the nconfirm back over confirm!
	nConfirm = confirm;

	confirm = function(msg) {
		// if ((I18n.translations[I18n.locale].update_requests.panel.confirm == msg) && (uroGetCBChecked('_cbDisablePendingQuestions') == true)) {
		// urcToConsole('URComment confirm redirected to console: ' + msg);
		return true;
	};
}

function restoreConfirmToConfirm() {
	// Restore the normal action of confirm by writing nconfirm to back over confirm, so the site is able to send user messages outside of my script!
	confirm = nConfirm;
}

function uRVerifyStatusSet(URStatus, AutoSendComment) {
	return function() {

		let URStatusOk = true;

		if (options.AutoClickURStatus) {

			if (URStatus.toLowerCase() === "notidentified") {

				// Click Not identified
				if ($("input[value='not-identified']").is(":checked") === false) {
					URStatusOk = false;
				}

			} else if (URStatus.toLowerCase() === "solved") {

				// Click solved
				if ($("input[value='solved']").is(":checked") === false) {
					URStatusOk = false;
				}

			} else {

				// Click back on open just encase the wrong reply was clicked previously
				if ($("input[value='open']").is(":checked") === false) {
					URStatusOk = false;
				}

			}

		}

		if (URStatusOk) {
			setTimeout(autoClickSend(URStatus, AutoSendComment), 10);
		} else {
			setTimeout(uRVerifyStatusSet(URStatus, AutoSendComment), 150);
		}

	};
}

function autoClickSend(URStatus, AutoSendComment) {
	return function() {
		if (AutoSendComment === "AutoSendComment") {
			$('.new-comment-form .send-button').trigger('click');
		}
	};
}

function autoReloadMapOnComment() {
	// Click the reload button for the map
	$("#overlay-buttons .reload-button").trigger('click');
}

// This is the small crosshair in the UR window
function crossHairsClicked(urID, zoom) {
	return function() {
		setTimeout(() => goToURById(urID, zoom), 100);
	};
}

function getUrById(id) {

	/*
	const urs = W.model.mapUpdateRequests.getObjectArray();

	for (let i = 0; i < urs.length; i++) {
		if (urs[i].attributes?.id === id) {
			return urs[i];
		}
	}

	return null;
	 */

	return W.model.mapUpdateRequests.objects[id];
}

function sleep(ms) {
	return new Promise(resolve => setTimeout(resolve, ms));
}

///////////////////////////////////////////////////////////////////////////////////
//////
////// Background task(s)
//////
///////////////////////////////////////////////////////////////////////////////////

// Look for the UR window to be open
function lookForOpenedUR() {

	// Relaunch checking for open ur - moved this up here so the script would keep trying if I had an error
	setTimeout(lookForOpenedUR, 500);

	let urID = W.map.getLayerByName('update_requests').features.filter((feature) => feature.attributes.wazeFeature.isSelected)[0]?.attributes?.wazeFeature?.id;

	if (typeof urID !== 'undefined' && urID > 0) {

		// New or same ur (re)open(ed) so now we can do stuff; this prevents this function to continuously applying settings to a ur
		if (UrCommentLasturID !== urID && $(".new-comment-text").length !== 0) {

			// grab the current UR ID for next time
			UrCommentLasturID = urID;

			// Auto expand ur comments list and text area
			const conversation = $("#panel-container .problem-edit .conversation");
			if (conversation.length !== 0) {
				conversation.removeClass('collapsed');
			}

			// Auto expand ur comments description
			const description = $("#panel-container .problem-edit .description");
			if (description.length !== 0) {
				description.removeClass('collapsed');

				if (options.HideAADescription) {
					const content = $("#panel-container .problem-edit .description .content");
					if (content.length !== 0) {
						let contentText = content.text();

						// Does the AA tag exist?
						if (contentText.indexOf("Reported from AAOS") >= 0) {
							if (contentText === "Reported from AAOS") {
								// Full description so just hide it
								description.css("display", "none");
							} else {
								// Subtract if from the content
								content.text(contentText.replace("Reported from AAOS", ""));
							}
						}
					}

				}
			}

			// Disable the stupid buttons at the bottom of the UR window done / next
			const nextButton = $("#panel-container .content .navigation");
			if (nextButton.length > 0 && options.UrCommentDisableURDoneBtn) {
				nextButton.css('display', 'none');
			}

			// Jump to bottom in full UR section
			const topSection = $('.top-section');
			topSection.scrollTop(topSection[0].scrollHeight);

			// Jump to bottom in conversation section
			const conversationSection = $('.conversation-view .comment-list');
			conversationSection.scrollTop(conversationSection[0].scrollHeight);

			// Attach an even listener to the UR center button to take us to the UR
			$('#panel-container .header .panel-header-actions .focus').on('click', crossHairsClicked(urID, 15));

			// Autofill in comment
			// Check what type of message to insert into the ur
			const UR = getUrById(urID);
			let comments;

			if (W.model.updateRequestSessions.objects[urID].hasOwnProperty('comments')) {
				comments = W.model.updateRequestSessions.objects[urID].comments;
			} else {
				comments = W.model.updateRequestSessions.objects[urID].attributes.comments;
			}

			const commentCount = comments.length;

			// If number of comment is zero assume this is a new ur
			if (!UR.attributes.hasComments) {

				const noPermissionAlert = $(".no-permissions-alert").length > 0;

				// Initial, zero comments
				if (options.AutoSetNewComment && !noPermissionAlert) {

					// This will be on of the types of UR that a user can choose from when submitting a UR
					const urType = UR.attributes.type;

					if (options.CustomTextList && options.CustomTextList !== "Default") {
						for (let i = 0; i < CustomListText.length; i++) {

							let text = CustomListText[i];

							if (text.name.toLowerCase().replace('.', '') === def_names[urType].toLowerCase()) {

								let reply = text.text;

								if (text.signature) {
									reply += '$SIGNATURE';
								}

								setTimeout(autoZoomIN(text.name, reply, text.status, urID), 0);
								break;
							}
						}
					} else {
						// Loop through the comment array for a comment that matches the request type.
						for (let i = 0; i < URCommentsArray.length; i = i + 3) {
							if (URCommentsArray[i].toLowerCase().replace('.', '') === def_names[urType].toLowerCase()) {
								setTimeout(autoZoomIN(URCommentsArray[i], URCommentsArray[i + 1], URCommentsArray[i + 2], urID), 0);
								break;
							}
						}
					}

					//var inmyzone = 1;
				} else if (noPermissionAlert){
					//$(".new-comment-text").prop('disabled', true);
					//$(".send-button").hide();
					//var inmyzone = 0;
				}

				/*
        var db = openDatabase("URCom" // actual database name.  Opens existing or creates.
                  , "1" // version number.  *Must* be correct.
                  , "Database to collect URs and call them back later" //
                  , 10 * 1024*1024);
            db.transaction(function(tx){
                var timetocheck=0;
                var ReminderDays = $('#ReminderDays').val();
                if(getUrById(urID).comments[0])
                {
                    timetocheck = uroGetCommentAge(getUrById(urID).comments[0]);
                } else {
                    timetocheck = 0;
                }
                timetocheck = timetocheck - ReminderDays;
                if (timetocheck <1) {
    timetocheck = 1;
  }
                var today = new Date();
  var dd = today.getDate();
  dd=dd+timetocheck;
  var mm = today.getMonth()+1;
  var yyyy = today.getFullYear();
  var datum = new Date(Date.UTC(yyyy,mm,dd,0,0,0));
  W.map.center.transform(W.map.projection, W.map.displayProjection); // The map is in 900913 projection, converting to EPSG:4326 to get "normal" GPS coordinates
  var URlink = "https://www.waze.com/fr/editor/?env=row&lon=" + W.map.center.lon + "&lat=" + W.map.center.lat +"&mapUpdateRequest="+urID;
  tx.executeSql("INSERT INTO `UR_List` (id, timetocheck, inmyzone, link) VALUES (?,?,?,?)", [urID, timetocheck, inmyzone, URlink]);
            });*/

			} else {

				// Reminder & close section
				const LastCommenterUserID = comments[comments.length - 1].userID;

				// uro days old
				let commentDaysOld = uroGetCommentAge(comments[commentCount - 1]);

				// Do we want to auto set reminders
				if (options.UrCommentAutoSet4dayComment) {

					// -- REMINDER SECTION -- \\
					const ReminderDays = options.ReminderDays;

					// Only 1 comment has been added, reminder days is higher than 0, reminder days has passed, and comment isn't from reporter (aka userid != -1)
					if (commentCount === 1 && ReminderDays > 0 && commentDaysOld >= ReminderDays && LastCommenterUserID > 1) {
						setTimeout(autoZoomIN(URCommentsArray[ReminderPosition], URCommentsArray[ReminderPosition + 1], URCommentsArray[ReminderPosition + 2], urID), 0);
					}

					// -- CLOSE SECTION -- \\
					const CloseDays = options.CloseDays;

					if (commentCount > 1 && CloseDays > 0 && commentDaysOld >= CloseDays && LastCommenterUserID > 1) {
						setTimeout(autoZoomIN(URCommentsArray[CloseNotIdentifiedPosition], URCommentsArray[CloseNotIdentifiedPosition + 1], URCommentsArray[CloseNotIdentifiedPosition + 2], urID), 0);
					}

				}

				// Don't allow auto filling of the close message because it clicks the not identified option and causes trouble when the Ur window is shut/closed the next save will mark it as not identified, without a comment.

			}

			/*if ($(".no-permissions-alert")[0] || $(".close-details")[0]){
          $(".new-comment-text").prop('disabled', true);
          $(".new-comment-text").hide();
          $(".send-button").hide();
      }*/
			/*if($(".new-comment-text").val()==="" && URComSignature.trim()!=="")
      {
          $(".new-comment-text").val("\n\n" + URComSignature);
      }*/

			const WazeCurrentZoom = getWazeMapZoomLevel();

			// Predefined zoom threshold for auto zoom
			const zoom = 15;

			if (commentCount === 0 && options.NewZoomIn) {
				// Zoom in new

				// Do not zoom back out if we are already zoomed in and just happen to be re-clicking on a UR.
				if (WazeCurrentZoom < zoom) {
					goToURById(urID, zoom);
				}
			} else if (options.WithCommentRecenter) {

				// Re-center on urs that are not zoom in
				if (WazeCurrentZoom < zoom) {
					goToURById(urID, WazeCurrentZoom);
				}

			}

			// Auto switch to ur comments tab
			if (options.AutoSwitchToURCommentsTab) {
				// Grab the active tab
				PreviousTab = $("#user-tabs > ul > li.active > a");
				// Grab the active tabs scroll position
				PreviousTabPosition = $('#sidebar').scrollTop();
				$('#sidebar').scrollTop( 0 ); //set scoll pos

				// Open the scripts tab
				if (!$("[data-for=userscript_tab]")[0].selected) {
					$(".w-icon.w-icon-script").trigger('click');
				}

				//Make UR Comments tab active
				$('#CommentsTab').trigger('click');
			}
		}


	} else {

		// Reset the id if a ur is not open so we can set the tab for the same ur
		UrCommentLasturID = "";

		// Switch tab back
		if (options.AutoSwitchToURCommentsTab) {

			// Verify that we had found a tab
			if (PreviousTab !== null) {

				// Click back on the previous tab
				$(PreviousTab).trigger('click');
				$('#sidebar').scrollTop( PreviousTabPosition ); // Set scoll pos
				// Clear out the previous tab holder
				PreviousTab = null;
				PreviousTabPosition = null;

			}

		}
	}

}

function URCLoadUpdateRequestsEvents() {
	window.HideUR = "stopped";

	//from Cardyin 5/26/2016
	W.model.mapUpdateRequests.on("objectschanged", urcUREvent_onObjectsAdded('mapUpdateRequests objectschanged')); // needed
	W.model.updateRequestSessions.on("objectsadded", urcUREvent_onObjectsAdded('updateRequestSessions objectsadded')); // needed

	W.map.events.register("moveend", null, urcUREvent_onObjectsAdded('moveend')); //needed
	W.map.events.register("zoomend", null, urcUREvent_onObjectsAdded('zoomend')); //needed

	setTimeout(urcUREvent_onObjectsAdded('pageload'), 500);
}

function init() {

	// if we are changing the language do not redraw the tab
	if (ChangeLanguage === false) {

		applyCss();

		// -- Setup the tab for the script
		const scriptTab = $('<li><a href="#sidepanel-Comments" data-toggle="tab" id="CommentsTab"><img src="' + UrCommentsIcon + '" height="16px" title="URCom" alt="URCom"/> URCom</li>');

		// I had to switch to first() because someone was reusing the nav tabs in another
		// script and this would cause my tab to go inside theirs!
		$("#user-tabs ul.nav-tabs").first().append(scriptTab);

		// -- Setup the pane for our content
		scriptContentPane = $('<div class="tab-pane" id="sidepanel-Comments"></div>');
		$("#user-info div.tab-content").first().append(scriptContentPane);

	}

	// Reset the var to change the language
	ChangeLanguage = false;

	// Add the content to the comments tab
	// Comment tab header and zoom out button
	const topSection = $('<div class="URComments"></div>")');
	scriptContentPane.append(topSection);

	const topOptions = $('<div id="options" style="display: flex; justify-content: space-between; width: 97%; text-align: center"></div>');

	// Map Reload
	const reload = $('<div id="URCWazeReloadMap" style="width: 30%;" class="urcom-button" title="' + URC_Text_tooltip[3] + '">' + RefreshIcon + '</div>');
	reload.on('click', autoReloadMapOnComment);

	// Close UR and zoom
	const closeAndZoom = $('<div id="CloseAndZoom" style="width: 30%;" class="urcom-button" title="' + URC_Text_tooltip[0] + '">' + MagnifyingIcon + '</div>');
	closeAndZoom.on('click', setZoomCloseUR(15, "CloseUR"))

	// Shows UR count
	const urCount = $('<div id="URCountWrapper" style="width: 30%;" class="urcom-button" Title="' + URC_Text_tooltip[4] + '"><img src="' + UrCommentsIcon + '" height="16px" style="margin-right: 5px;"/><span id="URCount"></span></div>');

	topOptions.append(reload).append(closeAndZoom).append(urCount);
	topSection.append(topOptions);

	const tabs = $('<wz-tabs fixed="true"></wz-tabs>');

	const textTab = $('<wz-tab is-active label="' + URC_Text[5] + '" tooltip="' + URC_Text[5] + '"></wz-tab>');
	const textTabContent = $('<div id="sidepanel-URComments-list"></div>')
	textTab.append(textTabContent);

	const filterTab = $('<wz-tab label="' + URC_Text[6] + '" tooltip="' + URC_Text[6] + '"></wz-tab>');
	const filterTabContent = $('<div id="sidepanel-URComments-URO-Presets"></div>')
	filterTab.append(filterTabContent);

	const settingsTab = $('<wz-tab label="' + URC_Text[7] + '" tooltip="' + URC_Text[7] + '"></wz-tab>');
	const settingsTabContent = $('<div id="sidepanel-URComments-settings"></div>')
	settingsTab.append(settingsTabContent);

	tabs.append(textTab).append(filterTab).append(settingsTab);
	scriptContentPane.append(tabs);

	// Overwrite the padding for the tabs to show more text
	setTimeout(() => {
		$($('#sidepanel-Comments wz-tabs')[0].shadowRoot).find('.wz-tab-label').css('padding', 5);
	}, 1000);

	////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//////
	////// Draw Options
	//////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////

	addCommentTexts(textTabContent);

	addOptions(settingsTabContent);

	addFilters(filterTabContent);


	////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//////
	////// Launch background task(s)
	//////
	////////////////////////////////////////////////////////////////////////////////////////////////////////////

	// Start looking for opened UR's window
	setTimeout(lookForOpenedUR, 1000);

	setTimeout(URCLoadUpdateRequestsEvents, 0);

}

function startCode() {

	if ($("#user-tabs").length && InitReady) {
		init();
	} else {
		setTimeout(startCode, 2000);
	}

}

async function initDatabase() {
	const request = window.indexedDB.open("URCom", 1);

	request.onerror = (event) => {
		console.error("[URCom] Why didn't you allow my web app to use IndexedDB?!");
	};

	request.onupgradeneeded = (event) => {
		const db = event.target.result;
		const objectStore = db.createObjectStore("custom_lists", { keyPath: "name" });

		objectStore.transaction.oncomplete = (event) => {
			console.log("[URCom] Created store");
		}
	}

	request.onsuccess = (event) => {
		console.log("[URCom] DB ready");
		DB = event.target.result;
	};

	while (!DB) {
		await sleep(10);
	}

	if ("openDatabase" in window) {
		try {

			let created = false;

			const oldDb = openDatabase(
				"URCom", // actual database name.  Opens existing or creates.
				"1", // version number.  *Must* be correct.
				"Database to store custom URCom data", //
				10 * 1024 * 1024, // Size of the DB
				() => {
					created = true;
				}
			);

			if (!created) {

				console.log("[URCom] Migrating");
				await migrateDb(oldDb);
				console.log("[URCom] Migration over");

			}

		} catch (e) {}
	}

}

setTimeout(URComments_bootstrap, 3000);