// ==UserScript== // @name GCComment // @namespace http://www.birnbaum2001.com/gccomment // @description Add comments to your geocaches on geocaching.com. // @include /^https?://.*geocaching\.com/.*$/ // @include /^https?://lukeiam.github.io/gcc/.*$/ // @require http://cdnjs.cloudflare.com/ajax/libs/dropbox.js/0.10.3/dropbox.js // @require https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js // @require https://cdn.datatables.net/1.10.6/js/jquery.dataTables.min.js // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_xmlhttpRequest // @grant GM_listValues // @grant GM_registerMenuCommand // @grant GM_log // @version 87 // @author Birnbaum2001 // ==/UserScript== /* History - 2010-04-02 22:00 started hacking a bit - 2010-04-02 23:30 worked :) - 2010-04-03 0:25 changed saving by GCCode to GUID - 2010-04-03 0:58 included icon to show on overview pages (copied some code from gcvote for branching depending on URL) - 2010-04-03 1:15 hotfix. changed GUID parser from substring to substr because full detail URLs contain more than just the GUID after guid= - 2010-04-05 0:44 kind of tooltips are created by mouseover - 2010-04-05 0:47 weniger Zeilen, wenn kommentar vorhanden, dann gleich auftoggeln - 2010-04-05 0:50 Notizblock in Suchseite - 2010-04-05 12:11 comment-list & delete function - 2010-04-06 hotfix for nullpointer in detailpage without existing comment - 2010-04-29 added some icons and changed detailpage to readonly and editmode - 2010-04-30 integrated real tooltips - 2010-05-02 content for tooltips is loaded when tooltips are shown - 2010-05-02 added timestamp to new comments - 2010-05-02 added check for updates - 2010-05-04 added import/export, cancel editing, copy from gcnote - 2010-05-17 small improvements by Schatzjäger2 ('hand' mousepointer and action on mouseout instead of mouseover - 2010-05-19 exchanged save and delete buttons and inserted javascript popup to confirm deletion - 2010-05-24 import/export handles XML characters - 2010-06-16 fixed gc layout update on cache detail page - 2010-06-20 implemented first version of server sync - 2010-07-31 cleaner code style (comment as object), waiting for gctour to finish before inserting comments - 2010-08-05 comments can be categorized and filtered on overview table - 2010-08-13 stats on gccomment-icon, server storage available, delete all button - further comments and changelog on http://userscripts.org/scripts/show/75959 ... not anymore. Visit github */ // version information var version = "87"; var updatechangesurl = 'https://raw.githubusercontent.com/Birnbaum2001/GCComment/master/src/version.json'; var updateurl = 'https://raw.githubusercontent.com/Birnbaum2001/GCComment/master/src/gccomment.user.js'; var updateurlChrome = 'https://raw.githubusercontent.com/Birnbaum2001/GCComment/master/dist/GCComment.zip'; var browser = "unknown"; if (typeof (chrome) !== "undefined") { // Chrome detected browser = "Chrome"; } else { browser = "FireFox"; } var mainCode = function(){ var $ = this.$||$||null; var jQuery = this.jQuery||jQuery||null; if(typeof($) === "undefined" && typeof(unsafeWindow) !== "undefined" && typeof(unsafeWindow.$) !== "undefined"){ $ = unsafeWindow.$; } else if(typeof($) === "undefined" && typeof(window.$) !== "undefined"){ $ = window.$; } if(typeof(jQuery) === "undefined" && typeof(unsafeWindow) !== "undefined" && typeof(unsafeWindow.jQuery) !== "undefined"){ jQuery = unsafeWindow.jQuery; } else if(typeof(jQuery) === "undefined" && typeof(window.$) !== "undefined"){ jQuery = window.jQuery; } if((typeof(GM_getValue) === "undefined" || (browser === "Chrome" && (GM_getValue.toString && GM_getValue.toString().indexOf("not supported") !== -1))) && typeof(localStorage) !== "undefined"){ GM_getValue = function(key, defaultValue){ var value = localStorageCache[key]; if(typeof(value) === "undefined"){ return defaultValue; } if(value === "false"){ return false; } else if(value === "true"){ return true; } else{ return value; } }; } if((typeof(GM_setValue) === "undefined"|| (browser === "Chrome" && (GM_setValue.toString && GM_setValue.toString().indexOf("not supported") !== -1))) && typeof(localStorage) !== "undefined"){ GM_setValue = function(key, value){ localStorageCache[key] = value; var data = {}; data[key] = value; window.postMessage("GCC_Storage_" + JSON.stringify(data), "*"); }; } if((typeof(GM_deleteValue ) === "undefined"|| (browser === "Chrome" && (GM_deleteValue .toString && GM_deleteValue .toString().indexOf("not supported") !== -1))) && typeof(localStorage) !== "undefined"){ GM_deleteValue = function(key){ localStorageCache[key] = undefined; var data = {}; data[key] = "%%%undefined%%%"; window.postMessage("GCC_Storage_" + JSON.stringify(data), "*"); }; } if((typeof(GM_listValues) === "undefined" || (browser === "Chrome" && (GM_listValues.toString && GM_listValues.toString().indexOf("not supported") !== -1))) && typeof(localStorage) !== "undefined"){ GM_listValues = function(){ return Object.keys(localStorageCache); }; } if(typeof(GM_log) === "undefined" && typeof(console) !== "undefined" && typeof(console.log) !== "undefined"){ GM_log = function(message){ return console.log(message); }; } if(typeof(unsafeWindow) === "undefined"){ unsafeWindow = window; } if(typeof(GM_xmlhttpRequest) === "undefined" || (browser === "Chrome" && (GM_xmlhttpRequest.toString && GM_xmlhttpRequest.toString().indexOf("not supported") !== -1))) { GM_xmlhttpRequest = function(rdata){ var request = new XMLHttpRequest (); request.onreadystatechange = function(data) { if (request.readyState == 4) { if (request.status.toString().substr(0,1) === "2"){ if(rdata.onload){ rdata.onload(request); } } else { if(rdata.onerror){ rdata.onerror(request); } } } }; request.open(rdata.method, rdata.url); if (rdata.headers) { for (var header in rdata.headers) { if(header == "User-Agent" || header == "Origin" ||header == "Cookie" ||header == "Cookie2" ||header == "Referer"){ continue; } request.setRequestHeader(header, rdata.headers[header]); } } request.send(typeof(rdata.data) == 'undefined' ? null : rdata.data); }; } if(browser === "Chrome" && location.protocol === "http" && !GM_getValue("ChromeStorageMigrated", false)){ GM_log("Start chrome storage migration"); var allKeys = Object.keys(localStorage); for(var i=0; i= 0) { // we got a comment keys[i] = keys[i].split(FENNEC_PREFIX)[1]; } } return keys; }; } // end thanks ;) // UI Elements - Profile page var configDiv; var commentTable; var exportDiv; var importDiv; var deleteAllDiv; var patchDiv; var importText; var importresult; var deleteAllResult; var gccRoot; var displayFilters; var waitingTag; var filter; var archivedFilter; var serverImportLink; var serverExportLink; var listener; // UI Elements - Detail page var detailCommentDiv; var detailCommentTextArea; var detailCommentTextPane; var detailCommentInputLatLng; var detailCommentLastSaveTime; var detailCommentCacheState; var detailFinalInputLatLng; var detailFinalCacheState; // Map var markers = new Array(); // Buttons var AddComment; var SaveComment; var EditComment; var DeleteComment; var CopyComment; var EditCancelComment; var SaveFinalCoords; var DeleteFinalCoords; // Detail page comment details var currentComment = null; var currentCacheGUID; var currentCacheCode; var currentCacheName; // general script variables var DELIM = "#gccom#"; var COMPREFIX = "gccomment"; var COMGCPREFIX = "gccode-"; var DEG = String.fromCharCode(176); var DEFAULTCOORDS = ""; var stateOptions = new Array("-", "not solved", "solved", "found"); var LAST_IMPORT = "lastimport"; var LAST_EXPORT = "lastexport"; var ARCHIVED = "archive"; var browser = "unknown"; var xmlversion = "\n"; var homelat, homelng; // preferences var AUTOMOVEMYSTERIESBETA = "autoMoveMysteriesbeta"; var AUTOMOVEMYSTERIESBETAFOUND = "autoMoveMysteriesbetafound"; var AUTOMOVEMYSTERIESBETASOLVED = "autoMoveMysteriesbetasolved"; var AUTOMOVEMYSTERIESBETAHOME = "autoMoveMysteriesbetahome"; var AUTOMOVEMYSTERIESBETAAREA = "autoMoveMysteriesbetaarea"; var AUTOMOVEMYSTERIESBETAUNSOLVED = "autoMoveMysteriesbetaunsolved"; var AUTOMOVEMYSTERIESBETAINCLUDEWPT = "autoMoveMysteriesbetaIncludeWaypoints"; var ADDCOMMENTSETTING = "addCommentSetting"; var CHANGEORIGINALSETTING = "changeOriginalSetting"; var ADDWAYPOINTSETTING = "addWaypointSetting"; var PATCHGPX_CHANGEORIGINAL = "patchGPXChangeOriginal"; var PATCHGPX_ADDFINALWPT = "patchGPXAddFinalWpt"; var ENABLE_EXPORT = "enableExport"; var PATCHGPX_REMOVE_DEFAULTTYPE = "PATCHGPX_REMOVE_DEFAULTTYPE"; var PATCHGPX_REMOVE_SOLVED = "PATCHGPX_REMOVE_SOLVED"; var PATCHGPX_REMOVE_UNSOLVED = "PATCHGPX_REMOVE_UNSOLVED"; var PATCHGPX_REMOVE_FOUND = "PATCHGPX_REMOVE_FOUND"; var PATCHGPX_REMOVE_OTHERS = "PATCHGPX_REMOVE_OTHERS"; var PATCHGPX_STRIP_EMOJIS = "PATCHGPX_STRIP_EMOJIS"; var PATCHGPX_STRIP_HTML_TAGS = "PATCHGPX_STRIP_HTML_TAGS"; var EXPORT_FILTER_ALL = "EXPORT_FILTER_ALL"; var EXPORT_FILTER_UNTYPED = "EXPORT_FILTER_UNTYPED"; var EXPORT_FILTER_UNSOLVED = "EXPORT_FILTER_UNSOLVED"; var EXPORT_FILTER_SOLVED = "EXPORT_FILTER_SOLVED"; var EXPORT_FILTER_FOUND = "EXPORT_FILTER_FOUND"; var EXPORT_FILTER_ARCHIVE = "EXPORT_FILTER_ARCHIVE"; var EXPORT_FILTER_ARCHIVE_BOTH = "EXPORT_FILTER_ARCHIVE_BOTH"; var EXPORT_FILTER_ARCHIVE_ARCHIVED = "EXPORT_FILTER_ARCHIVE_ARCHIVED"; var EXPORT_FILTER_ARCHIVE_NOT_ARCHIVED = "EXPORT_FILTER_ARCHIVE_NOT_ARCHIVED"; var DELETEALL_FILTER_ALL = "DELETEALL_FILTER_ALL"; var DELETEALL_FILTER_UNTYPED = "DELETEALL_FILTER_UNTYPED"; var DELETEALL_FILTER_UNSOLVED = "DELETEALL_FILTER_UNSOLVED"; var DELETEALL_FILTER_SOLVED = "DELETEALL_FILTER_SOLVED"; var DELETEALL_FILTER_FOUND = "DELETEALL_FILTER_FOUND"; var DELETEALL_FILTER_ARCHIVED = "DELETEALL_FILTER_ARCHIVED"; var DELETEALL_FILTER_ARCHIVED_BOTH = "DELETEALL_FILTER_ARCHIVED_BOTH"; var DELETEALL_FILTER_ARCHIVED_ARCHIVED = "DELETEALL_FILTER_ARCHIVED_ARCHIVED"; var DELETEALL_FILTER_ARCHIVED_NOT_ARCHIVED = "DELETEALL_FILTER_ARCHIVED_NOT_ARCHIVED"; var LAZY_TABLE_REFRESH = "lazytablerefresh"; var AUTO_UPDATE_GS_FINAL = "autoupdategsfinal"; var AUTO_UPLOAD_CACHE_NOTES = "autoupdatecachenotes"; var AUTOMARKFOUND = "automarkfound"; var AUTOMARKARCHIVE = "automarkarchive"; var SETTINGS_LANGUAGE = "settings language"; var SETTINGS_LANGUAGE_EN = "English"; var SETTINGS_LANGUAGE_DE = "Deutsch"; var SETTINGS_LANGUAGE_AUTO = "Auto"; var SETTING_ARCHIVE_FILTER = "SETTING_ARCHIVE_FILTER"; var ARCHIVE_FILTER_NO_ARCHIVED = "ARCHIVE_FILTER_NO_ARCHIVED"; var ARCHIVE_FILTER_INCLUDE_ARCHIVED = "ARCHIVE_FILTER_INCLUDE_ARCHIVED"; var ARCHIVE_FILTER_ONLY_ARCHIVED = "ARCHIVE_FILTER_ONLY_ARCHIVED"; // icons var gccIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAwUExURdPer+b9v0mis4rElNjQMVyuXfvzR+O+c0BOO+egPfT93X2FbL/Z3qaxkODo4J2EMhLWxjYAAAB9SURBVHjaVMwJDkMhCATQQawgLtz/tl/kt0mHjMtLFK22Wmuz/blhNHfXP2iqZ7Gl+gVXIyJbQxOqwt4gAUZnXjkQtzVgWOcERrwPMYz7FWYARjQAKBzbypIISgiQlR5QGHTD0hOK6gDEvQdwyrTeE0pm/2BmtmHH7EeAAQAb9gXg4KzWZAAAAABJRU5ErkJggg=='; var commentIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAARFJREFUeNqkU03OREAQbXwRseAYnMy3sJO4BJYsuJQlFm4h/unp10kLZiY6mUqeblX9XlWXolBKyS/2JzZZluVs8SAoRM+rgK7rhe/7/4cCnGma0rquqYzhHM4fidhLLksWVlUVRHIIqOzhOY4jdV8QhmEgruuSrus8+FTZJq7rSvq+5wIfm3jPtG3bhTzPM8eyLFeBewX7vpNpmjhJiGEPInD2v1WA4DiOh4DoNPYAqjIM44jxHmiaVjRNw4m4I8AadAF8iJumSWzbJm3bEsuyisc5KMvycQ4UUQomkZXuiesEQcDXOI55XwQBmd8m8Y4kSXi2KIrop/gZ6rfPiMxhGCpP8/FVQIYMU379nV8CDADQEaUK/jLo9wAAAABJRU5ErkJggg=='; var commentIconEdit = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAYJJREFUeNqUU89LAlEQnn27BMKyNzsmnvYP6FJ3b0XgPei2Ed4M6yheJFaDiPWgB5GIrkHU/9Cha+YmQkpQ2SVEZV3E15uBt2j+SAeGj5l533zzfimcc1jC1oXvCt+w9vfSmChd32UEtBTZoFAoFAVYGMscYigUgmg0CrquQ9nJwnncp9rx7Ro1oQaCzGOxGJimOXcEoRyQnz8ZVD8YPL4xUMPhcFGQN1cho313FXj/UYCJCaxVyVIdt8AWHeIi8sHRKYYttoicsXegux2fpQydTgdT91MTjEYjGA6HQexWv8AztwKy7VxRvl6vI7QnJkBiv9+HwWBAcfrkgfD1pU3ks8sKXS2u6/V6VNNUVS25rmtFIhHwfR88zyOUdlN5IsxelIExBpqmQaPRAMMwSsFjcRyH12o1/teazeZUDtfhevngJl6iGN2SyslkkjCXy9G5SAIqJxKJw2BEWRj3fD5ParZt81n1cZ95jVhA5VQqpfz3y+Y2WIaMpiz5nefarwADACQFMs6fhMd+AAAAAElFTkSuQmCC'; var commentIconDelete = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXpJREFUeNqUUr9Lw1AQvpd2qFFaRBwFHaQ46x8g0jooQqGjexy6BfpPtB3TweziYkX8tQiOrhkcTIbi4CgilKRJIc3z3YN7pLU19eC4e/fuu/vu3mOcc8iSj9M6+EHIV5aXGMXonKdAt9s9F8bAglSUbDUIFei5emwfPD0Yn1EEQjnDJAHmlUoFyuXyXBZvtSPlIxhla22Vadg5C4yyc/Oo/PVCAV5P6jb6mmBgZIGJAXVGwTGowL/Am5c9Ncb71zfXZgGwaBzHUsfjMWxf3cr43vU9hGGoxpE7mGaQJAlEojomogZBIO1u7w6GwyEMBgOZ97J/CBsXPcinwdgRwaPRSPr0pGk2BbFAupM7yOVytud5EogdUH3fn1CM4b2u61AqlaDf70OxWLTVvJZlcdd1+bQ4jvMrhnmYT+wYUcH/IKgbNI5pmtK22225FwJg50ajcTax8WntdDqyW6vV4rPu0zr3GbFzs9lkWX9kboFFwChskZ/4l/wIMADyMlZUy0YWOAAAAABJRU5ErkJggg=='; var commentIconDeleteAll = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAYUExURe6trfLy8tHR0Y+Pj7GxsQAAAIjuhv///20imzoAAAAIdFJOU/////////8A3oO9WQAAAGtJREFUeNpcjwEKwDAIA9Xo/P+Pl9iugwaq5KpgrC9ZV+KoS6CCekZFkDlke7QhQmT5ZwGR5QcYVeWu5x8goY/4AUl4zESeCfogaOx/7UCXNlBlroo5vXkrDNMXYAcmmIhNxY6qLHf8V4ABAESSBHQ3l0TpAAAAAElFTkSuQmCC'; var commentIconSave = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAZBJREFUeNqckz1LxEAQhmeTNGIjWliJIKKltWCjWAgWWihW1hYHgthb2Fmo1aE2dld5wtlZCFoINv4C/8EVnk0u2a8k7jvJHmejOQeGbDLvM7s7MxFFUdD5Taegf9jxwbYQZ812sbyyTr3PLm2tLtQCH54/aHJqmt5enyjIsoyMsWSNqQVDDy0YrKPMWveinZs/QWi0LrVgwEbIhI/wYcvznIW8oxPCsYZ7PdgImZSCK0JBEcC63MUwiGRwb4iDARtBxB8cmCQJpWlKUkpO5HdFYlgQBBSGIWv9JpHmBJKUg65bL7VbCEZzApdNSkVj4xMjzQAYsJHR5Qm8fbl5+M3iuM/Pmdk5Ajs4AcO9LjX210gIwQ7D/X0NUMgrd81+HA9OEKCSWit2FAZ2enlHt/fvg+rDfft8B6Avu+Aq7UFdtbIUKQbxbnnYypbqKsZdwCDZaro4gXsC8oNiq+R+oIaHiOPoQqd1ITb3Dov5xSVuC6CTo10Wx3xX+WMWdDVg7E4rfGBjpzHyL/3YbopvAQYALTKvvIqUmbwAAAAASUVORK5CYII='; var commentIconAdd = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXxJREFUeNqMU7uKwlAQnRgLsYitsB+QZn/BQggo+RC3CKQQUqW1UhuDIvohmr+w2cIUlrtNEE0UH/gY78x6ZeP7wDDDZE5mTmYCiAivrFQqsa/Vaj8iRvIyr1BA6HQ6PeEqkkQgr2kaRFHEse/7oHufENjfFCtUkz6T0TAM0HUd7sHzPBgOh4lcuVzGQqHwq7Tb7Z4gVx6Rz8Xc+Ro0SVqM9pRMME0TBvaAYymBQBOkpN5nsG37RkKxWATXdT9S9wj00v1+f7HNZgO73Y6lUHeaSEqDVquF/3E4HHC1WmEcx2xiAzidTjEMQ1wsFrher7mu2+2S+9uChOy23W45liuVk8znc8hkMpDP52E2mzEnpapqPwgCJorObMvlMmGUo+fZbBZyuRxMJhO6j/5Fr1gljsdjvMZoNLrJUR3Vy+kSlyhGr0g51WqVfaPRgOPxeJFDnS3L+kp88WtrNpvcrV6v46v/5OEaqbPjOMqrG3n4gnfIBOWdS3yGkwADADDQiUjr02VlAAAAAElFTkSuQmCC'; var commentIconCopy = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUJJREFUeNqckj2Kg1AQxyebrQNWHsBSLCQgiJaiZzEH8A56gBXvYCtoLfZ2KUwsPEM+/HYzj/h2JWogAw/GefN+/5lxNrZtmxzH/cCKnc/ng2VZ7uyl7/vDO3vmwNz5XlI9nU7Uv16vi9VRQJIkNMiyLKRpCnme05jjOMPMe3exAnz86HttNAg1v+BDw/4nLSiKQi+PxyP1oyiivmEY9FtV1dcZILXrOmAYZlFZ13W43+9wu92mAFmWoa5rqKoKsixbLDsIAiKy3+//ABiI4xjatiX+breblD3a5XIBSZKoEAWUZQmCIJAgXhZF8TIDhDdNQwT6vif5BIBrGobhZJX/L46mabRnjKMIQhBIAM8dd2f+8YBJDzhJHg+qo/E8Px3inKGiKIpEHavAVhGw3W4paA3gep5nvtkndzNu1Kf2K8AAAxf9KklDG6EAAAAASUVORK5CYII='; var commentIconEditCancel = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAx9JREFUeJxVk09om3UYxz/v722ydEmb2HYiS50dWDdT5sS1uoOitTo7LSMFFRHRwnbaSUFBpzgsDHGX1YvgofUg7CIutd2GTIR2A1vcULN2rTYwti7tivRP0vRPkvf9PY+HFmm/1+9feHgcVWUrbr76+BNOMPgFxm1W49aLWKRcykq5dEPLpdMtQ/dubtU7WwPGO59MYdxk8f40Xn4Ja+0GYVzccAQnWgO+3394aLpzW8D02Q9DhevDGW9pvn41e4fA7gZqXkoS3n8QVWFl8i8Wfh3Am72LidXCjlB2ra6+8ciF0SKqyljyYOrPtga9tg+d/LhLvfySirUqXlltqah2fVXX57I6O3heR57fo0OHYjr8TF1KVXHGX29uUZHf87f+oLazi/1ffoeKMNZ7juzoMOXlHAfePUlD61FUhL+//4b7X3+GidXiqD5dIaXimdL8HE5VjEc/OYeK8MNrTzE/kabSQLg6Smz3w6gIiGVvx5vcPv8tVfl/kUDwjHFClQkvv8Su5Hu4kWrG+nqYn0gTdSFSHeXFvktEGxMsTqb57atPQZQHnj1C2SvjqZMwIhq31rIj/giI5faVn6g0EKyK0tp3iVhjgoXJNAPHk+SmxgnsDFPTmGDFKr5I3IhsnkpkY6Yqkert5sHjSfyVPGGj/+uKAiqWCvH9GYwbL87cAbE0tHVQ1fn2hnkizeCJJH4hT8SF+HOvoGJZmLq10WntjHO9be8VL7/4si9Ky+UJAuEIKsLiRJqBExvNEQN1jzXR2nsRbznHha4OQguzhF3zi1E3cMqJ1qAry2TOfoRaAWtZnpnmwX1NJFrbaX7/NK29F0GEkZ5u1uZmqDAGK3LKUVVGX9iT8tfXkn5ugZ3tb9H0QTfBzSWIRUXwlnOM9HST+TlFXcAh5NB/LCOdjqpy9Z22kJn+J2PXVuu1kKMQqibW/gbhh+KgSmH2HpnLP+KvFqgJOAQdsrNlbTx5V4vbnunq4V0pTzRp1lawXpm8VcqbtOs4BFyDK9J/LCPbn2krhg9FD/hKty/a7InWq1iwNuuIveGqfH50Ssa26v8D7vnE690mEL0AAAAASUVORK5CYII='; var waitingGif = 'data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH+GkNyZWF0ZWQgd2l0aCBhamF4bG9hZC5pbmZvACH5BAAKAAAAIf8LTkVUU0NBUEUyLjADAQAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQACgABACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkEAAoAAgAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkEAAoAAwAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkEAAoABAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQACgAFACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQACgAGACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAAKAAcALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA=='; var errorIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAtZJREFUeNpUU7tLI2EQn3y72TWJutnERCRHtBEL8URIUCy0sTsQ7a6xsbG8IsWBl0qut4hgd839Baaw0ubA4k7kCtEQuEAS0DMPjXnt43a/zc3sZcX7YPgeM/Ob3zw+n2ma4K1fx8fzlmlmdV1f+2OacdMwRFEQbL8s11G+iaL4eSGTufHsJUkCnwdQzOU+af3+B2l0NKaEwxBkDPz4bg4G0LMseGo0wOh2uwFFOVrKZPb/A3CdNe1jZGpqTNV1sB8fYYA7t20AQQAIBEBQVWjiuV6t2koy+fXt3t4uAQjvo9H5bqdzHE0k1PDTE1j398A1DRzOQd3Zgd7VFTgE2ulAQBQBolHWLJcXOGN3sdnZnwwZZIl2GJ2seh0cjOogPWVrC0JLS6BubwPHNIiNiXrVcUCUZbFVKBxUKpUYMzRtjXLmGJ2MyNhBGQwLRTvdPRAL7SKTk9CqVBKc802m9/vxABbMJtpDxwEZ452W3e8DfwVk4XtoZAQ6lCrnG8zUNFFCAEIfDKNTNKvd/geAOzl7zDh2RPL7QcOaOI6TxjYLtsG5OMAKk9KL1Lq4cIXOzpAV6XxopxsG+JEFMphmgiTVuzQL+OBFd4u4ugpzuZy7O8PoJD5sabvXg+DEBAFUmIQT1nx4ABaJgIPoHgM2Pu6mICjKizOxFNHuoVwGZXaWUrgUBRzPdqv1rqEoY2o8Dkat5raydnoKWrUK7etr15kGSkZ9DYuqdbvwZnmZGJyxdDZ7E1LVo9+lkt3E4kjJJAjYVh9OWfv2FkCWwY/3wMwMNHEG7opFmFpfB6YoJ8gg//IXvh8efmmWSjtyMChOJBIwirnSqBqo72DEGtLWMHdyVlKpH1jU/VQqde57/Ruv8/nd52Lx4BmHhPqso6MUDEIoFgN1bg7UlRWqyQk65xYXF8/dz0Tteb0KhUIMqW2ibKAujfs0SgXPlyhnKPl0Ot3w7P8KMAB6SM2aovTkagAAAABJRU5ErkJggg=='; var successIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAmFJREFUeJyNk89L1FEUxT/vfcfRkdG0yRZqIYiCgmVorloUhCAkKLQxguwvSKiVUJYgFLSwZW3Kje7S3AgRiNQiTDQVhyhE0RkzTPwx4zjfmXnvtpgaZyCss3vvnXPPvedxlYiQjbql6+e8Ku+RI7rZQVcaa3BtIuTa5IxrE33rTRML2XyVXaAxeGPUUbpjzd1kx0QwGAAcNH58BKSYpE2NrbVMdOYUuBcaLJiKzH77mdqtXE1scBwCpgif8YYqDk7WfLw6EtcA7/anR/5HDLDtRIiqw8rlgs0RANUcvHnRItOzsS//FHcH2llJhJmKzHLqwI+1tkXHbWJgzd08Vni5qImVhnEEYerHJ3AtUW+cpDID2qfy63dMJEOu8pbTWFibOQ+euctk7XMGw8MMLb1OX+ZrXI9BJaVei0jFn7QBXlb10V3aTon4Ga1+yp3TXYxtTfJsYQj8DhQ6AIgSrLEV6sJCl8wlvgLQWFjLXN0wADupfUo9xeymIlS9bWXPE4NAXs5ovi2NTlkTdtAA3ApcyzyWeooB6Fl4wp6JQmmuWAkYa8I6amNBPz4AHm684NX38QxpNbbB0PobKPHw2+OoQByMxwZ1nnV6A5J22zNRbof66V66z24yQs/iY/CozNzZ0BGDTZpeJSKcnW4bjRHv2HaOfuO8qmY+HEy37su11/sWiZsx2zbfqQFq3PIun/GGSpKFGdK8LEOZ9+/imAnJymFXOousZSr7cGUUKx1RbxzXYxAlmcBUPN22wY7ZtvncZcrGifeXGjDSL0aaJWUrjVgMJmSUnbFKHtjWz4vZ/F9iIi867oQHZwAAAABJRU5ErkJggg=='; var state_default = commentIcon; var state_unsolved = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAEoSURBVDhPrVPHSgNRFM3XJ8P0RpJJ75AGKT/hTlFRUWyoCwu6EHV5nHPHZ2KiJAwOnN1p9747mcx/fWEYRjEQBAF83xd4nidwXReO48C2bZC3lknhXqGAj/l8I8gj/9uEjtuKVcBuPr9owsrbJJPzPpvheTQSvqZpSQvOuo3B62SCp+EQd73eZgMmUaDwMh7jvt/HTaeDi2bzpwG3vNzgbTqVmg+xgKCQqVetFs7qdRxXKsLP5XLJCMsGTHwcDHDb7YrgMgYTT2s1HJXLOIgiMSEvm80mBuoVVM3rdhsn1SoOSyUR7BeL8sTc/HmjIa2+nnJxD3/dwc7KeKy+dgfqINjEsiwoqL3oui5PxplZ+9dLXD1N0zRlURSn+lUMw0gvZmLq5DR1PwE9E+oxQiT4SQAAAABJRU5ErkJggg=='; var state_solved = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAEqSURBVDhPrVPJToRAEJ0fNmZkERgIiEIj+3bxezypUaNG4+7BJXow6heUXdX2zCiaIUSSd3tbdRWj0X99bdtucUDTNFDXNaGqKkJZllAUBeR5DsjrZKJQ3VuB+IMtBPKQPzVBx75iGaDujmdNsHKfZORsvocQPPvEj6JItMBZ+xiw1w1Yf1oD785ZbIBJKJAIXnzw711wb2ywL8zvBvjK8w2it4Bq+g+eABdiqnNlgXVmgHGsEZ8xJkaYN6Cajx64tzYJ7EsOnmidroJxpIF+oJAJ8sIwFAZyC7Kmcz0B80QH/VAlgbav0IqVnTFMzk1q9bXK2T38dQfL20udB+7cgTwIbJJlGUhM3yWOaWU4M9b+9RJ/nmaapiKZiwf9KkmSDBdj4uDkIXU/Ae1xwo0cXQQMAAAAAElFTkSuQmCC'; var state_found = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAESSURBVDhPrVNJaoRQEO3TqzhPmxzAjYrihAMqqCiIeqZKV9k/3YkJLRLh7d5Uv8rb7b8+27Y/7gDLssA0TYJhGARd10HTNFBVFZB3yESh7/uwbdtbIA/5XyboeFbMAjzPezbBymeSkbOuK4zjSHxBEPYWOOsZg3meYRgGaNv2vQEmoYBhmiboug7quoaiKL4b4Cu/NliWhWr2fU9AIaaWZQlZlkEcx8TneX4f4dWA1WyahgQITEzTFKIogjAMyQR5HMftBmwLrGZVVZAkCZERQRDQil3XhTzPqdVjlc97+OsOHMc5PPDhDthBYBNFUYCBvYsoirQynBlr/3qJP09TlmVKRvGlX0WSpOtiTLycfKXuJ+0c7jtCU1KuAAAAAElFTkSuQmCC'; var state_clear = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAFkSURBVDhPrZNLa8JQFIT9yy1uC30mNr4fIBXcKC6UCD7+RYvYRQlBwbRaY2pIbSxtKC6mOcdGY7RQQi/M4obMN3PPTSKR/1qFQuHGFfL5PHK5HCubzbIymQzS6TRSqRTcdxZ7mWSUZRm9Xm9Hki0iqOjdMUGwgVDyITPBDgHoWfT2aNuEKgeTvX0QcP0m4Mo4Z3AsFlu3oLP+BSBal7jQz3CqnewDnG4Xfn12OnhvtbBarViO48C2bZimCV3XQWvTgKbsN3+023h1Bzqv17FcLtloWRYMw8BkMoGmaQwQRXF9BD+AUs1GA8+1Gh4rFcxmM04cj8cYjUYYDocMoVaCIKwB7i0o98UiFs0mXtzUp2oVarmMh1KJDYPBAKqqQlEUTKdTbkV71/flv0oQJDiLfr/Pdf3rx7z9DjwKNUkmk/BEMFqSJPHA6MxUeyf5t98gkUhwGzKH+lXi8Xh4MyWGTg5T9xt4yvfg78PulQAAAABJRU5ErkJggg=='; var moveMysteriesIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC4SURBVHjaYvz//z8DDDAyMiI4SACohpEBB2BB1nzh+hesikByMEPQLQHJgAVVbKbjsoRhzexYBgNNHqwuAQmgaL5zJBPORhbHZQgLMgekGVkBLpchewPFAFAYIPsXF0CRh8YCyCYwhgihigENhoujYwQDyCSkGaYGBWM1FWoAPpsxXECOZhBmwRVQyFGGL4UyIidldMWEYgMEmEhJ97jilGAYYA19qBwLkZbgdBVGGCCHAzHeAQgwAAYJB8lhWYArAAAAAElFTkSuQmCC'; var deleteMysteryIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAACB0RVh0U29mdHdhcmUATWFjcm9tZWRpYSBGaXJld29ya3MgTVi7kSokAAAAFnRFWHRDcmVhdGlvbiBUaW1lADExLzA1LzA33bqJ2wAAAp9JREFUeJxVk8tr1FcUxz/3/n55VFMT8gCtQ6uLUBqqCCbiSgqFgpa2mVIEQUo2QnFZioj0QQVduOhf0FXBnTQDpVJ3RkTETqXkYTudjRknhj6m6TiTYfL73XNOF7+ZMHM253Lvh/M9j3ucmdFry2feOOoGB7/GR7Pmo5yqoMlOVZOdoiU7X83dfbbcy7veAKv5Y4v4aL69WSGtbyEi2YOPiPaO4EbHIYTCybuVfF+Ayo3Phhs/L5XTrX9y29WniMHUhwtMX/4GQylf/5Q/C98RAX5sAoaGq63J3PQ73z9sOzNjNX9sMTTq883qU4JBMHjrUY2fzhyhFuDs7cfcOrGfAzHEDtzLY7g4Lpx6+HferX40O2eqj+prj0kNpvILzFz/FtTAFFMFU1Bl5YtP+OuHmww4kNEJnNkJrzvta+3NCtJRPnzxcxDFVDAR6HhT5bULl9hMM863mlhIr8Vu+KWZtL6FAAK8WPqRRhRlHeo2uOM1BJqacT4kpPHQjFe1gyKCkWUdHXqdqfwCmDH5wcdMvncegIl3z5G+cpghl3GYEVQPetVsVN1h1n/7tVO3ZWWo7J5rv6/gHLu8qeA1hA18ROee1sY6dOcvWQDDQJXGxjqDXRCHimx4bTWfRHtHcIB30Cgt96miCgYmQq20RuwyLjhHrPLEWzRwxY2OEwER0Cqt9KmaSJawCrXyGkMu49rmENUrfu5OqUgIBT82QeyA7Rf8W7zPyJtzu2McPPAqz395QNJssMdD4jxOtfB+WYvOzLh3/u1hXymVpbWds8Z/BIPNAA3p2zP2RTA+4EnUqs8Tm764bu2+Zbp3cmoxVZvPPkmS9aHTsOAcbXNd5f5l6rWl46NHgnE1qM2majlTAZGqUylGpl+e/kNXevn/AT0JpV86x3yxAAAAAElFTkSuQmCC'; var finalIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAILSURBVHjanFVBSONAFP0bJaIggbU3FcSDeKkXl4LSXrwGhF5786SHgguCdG+CRVlBKFiiFy305nEXT4UUhNKDWoRAURZaFva4Zrd1QWgp/P0zNmPaJk3ig9c/zUze/Hkz+QOICBYJEWKOaBDRJ6vEPHGlR6srOELMhMNhzOVyaBgG+kW1WsV8Po+RSIQJnRAVu7CWTCax1Wrhe9HpdDCVSjExrasJajQaFQO+6be4vX/OI8fFQaAJVFVlqokP9HNFoP8qn+V78Q6KZYO3j/7tgHz2AhbaWxM8you74hlsfAE7SqUSxGKxkkTtZQK4wRLjgt1J2o9HnPB5jxwdo+0+hKd6nfeR1zww4XGCeHl17iMEBk0Qur58nVyWQVEUWeofE5qfF+3dyeMBDbs1Pavqs0RySmBmdtpXosLzr38H+hyFF2anXH3uyZ428en+wbFv1Onh+toncTLc8LxZ4baFXPoltxctO/p9Zhmypdv3IpBwvx2Q2eOiXoJDrbCOXbHsb9mBMrZnVv75J/DRloZ1rq0u8ei1kW7CbYLnQOuT9TzbpNVsNttM+IYAbscuqB2VSoUHJnxKAK9j9+OX6Us4m82ycCoKfTqddqyvv2s1XptFfR4CTdPeCn1XmKWlxeNxLBQKaJqm78LeaDRQ13VMJBJclBgWwrbLNE4sEM0Al2mDqLNbw671X4ABANNJB/Q2gPgTAAAAAElFTkSuQmCC'; var finalIconLink = 'http://gccomment.svn.sourceforge.net/svnroot/gccomment/trunk/gccomment/res/finalcoord.png'; var addIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg=="; var editIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC"; var removeIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJdSURBVDjLpZP7S1NhGMf9W7YfogSJboSEUVCY8zJ31trcps6zTI9bLGJpjp1hmkGNxVz4Q6ildtXKXzJNbJRaRmrXoeWx8tJOTWptnrNryre5YCYuI3rh+8vL+/m8PA/PkwIg5X+y5mJWrxfOUBXm91QZM6UluUmthntHqplxUml2lciF6wrmdHriI0Wx3xw2hAediLwZRWRkCPzdDswaSvGqkGCfq8VEUsEyPF1O8Qu3O7A09RbRvjuIttsRbT6HHzebsDjcB4/JgFFlNv9MnkmsEszodIIY7Oaut2OJcSF68Qx8dgv8tmqEL1gQaaARtp5A+N4NzB0lMXxon/uxbI8gIYjB9HytGYuusfiPIQcN71kjgnW6VeFOkgh3XcHLvAwMSDPohOADdYQJdF1FtLMZPmslvhZJk2ahkgRvq4HHUoWHRDqTEDDl2mDkfheiDgt8pw340/EocuClCuFvboQzb0cwIZgki4KhzlaE6w0InipbVzBfqoK/qRH94i0rgokSFeO11iBkp8EdV8cfJo0yD75aE2ZNRvSJ0lZKcBXLaUYmQrCzDT6tDN5SyRqYlWeDLZAg0H4JQ+Jt6M3atNLE10VSwQsN4Z6r0CBwqzXesHmV+BeoyAUri8EyMfi2FowXS5dhd7doo2DVII0V5BAjigP89GEVAtda8b2ehodU4rNaAW+dGfzlFkyo89GTlcrHYCLpKD+V7yeeHNzLjkp24Uu1Ed6G8/F8qjqGRzlbl2H2dzjpMg1KdwsHxOlmJ7GTeZC/nesXbeZ6c9OYnuxUc3fmBuFft/Ff8xMd0s65SXIb/gAAAABJRU5ErkJggg=="; var waypointIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIxSURBVDjLpdNdSFNhGAfww0Cri+gyKLowpMC+LsooEy+SgqJuKqRIiIQKkryoi4zaUmbWSHKdPkYz05xdnKNobmwW6Vi6tbk2TDYl82PTTSr3PXe2s2T+O+dgYwV54S7+vBcvz4/neXleAgCRTf570UXdLda9ORUytW1LDbbkp1TK8h8PLu1rvn92C7houBxfEbA/E+Hn4C6wAQMYTxO8vbkwvMjBYiKED3X7BUQAaFqao6XLgxZyDaxyAp9JArYnBCLjd5CM2bDIupCI6MEEtRjQtWK2rx7t13fzQMUfYHNfx7H4wtQ9xFwPEZuuR+I7jWSgH9H5FrBRI4KeGgTcN6CoKoT3YyMaL+TxwCYBoOi6M5+6i37xgM9YICQ8elnAmKCai4YDJHCPnEDnrUJMdFfxxUg/Ik2JlSPq7anYtAw+0x74zXs54AqYGRLxMN9FK/yem5hySpcMDYfh6hX/DXRR15yhcclS2FEBv+Ugl0OIjFWCmVUgGR9FzE8h6mvGF7MMY21lMJNHecCZBrRUWXhhcrn9ga0IOy4Kxey8BoGZWnwbKsCkbSOGX+cJwFtJEQ9I04C+o5SNTojBuOXc3I8Qn1Nh7v062BUiWHXnWLtD+1TVTxt7anPhfHUayqs7eKAkDajbz3tN5HpYH4swJBfBQq7Fu6aSROZOcAWlLyt3Ch1kzr/iIv0DyHpqirMCvloVJ7MChGJ9w5H0Cq8K6Lx9gAeqVwM8X/6F/Lkh8+43zznRPkqpYfEAAAAASUVORK5CYII="; var origfound = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACaSURBVHja7JXLCoAgEEWdiGjpB4WL6KsjAsWvimhKYdAMgny0iO5qBOfMYzEXEJGRlFLuESEhBFAMBuwD12ph9dacPt3J5FKOX6AOgX03QEyXYQGQUmI4Ropo+oq6zS0L9veTFZxTtNLs4GId/+Af/AXwO0eoyCrstT+u26wnTIVNesSLgxi4b1FPrInihrWMc+48r4SZ7gIMANPlS6BG6nS1AAAAAElFTkSuQmCC'; var origsolved = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAC7SURBVHja7JVLDsIwDETtNkDPwT6rIsQZuCQHghUcgivwS4Y6yCUIKVKp2fVJaaZSPflUGjMAUlbE75cfOBBYNYtxbji7NXSfXz4+KiG1WpMv0BsPNSwtkIzX0SHGQPs6Mhmgp68CP8iFBVlRw6W5kkd+P2ORjfbGlug/MjdWJuPJeDIuhZBmsHkIqbBCIjghQd+CsLk2ED1mbM9LtEniuzXJCST6hrQmqZGddoJ2pyN571+t6R/N9CnAAC9tlQThla5PAAAAAElFTkSuQmCC'; var origunsolved = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAACvSURBVHjaYvz//z8DHDAyInGIA39ZEGzm3/8Z4UaBDUYyEKSQ+Q+Q8R+hCK/BrIz/Qep/cSDE2L7/Z2RCtxlsK5GGoqtn+4HkeaBTIa4lwTB84Bcn43+QBUzo4UQpgLkabDA4TKkMmKhuIjRIqW8wzVw8avCowcPBYGgRTPVCiA5BASw0wKUbGdUSOnioyY4o20FVE6iwx8AgcWIwmr6rR4+C9TJSWpliKzJBACDAAOfWdEr4Mcv8AAAAAElFTkSuQmCC'; var finaliconfound = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFRSURBVHjaYvz//z8DDBw6dAjBIQPY2dkxwtiMIIOxGQhURJRhQL1YLWAh10B09RgWHDx48D8Iw8DGvaf/5zfPBdNgMK/tPykAZh4LLpfsO3aJwWOnKwPbjG8MDAUNYLFfGVxgmk2jDKEwsRKrfiZCXoUZBjYQZAlI7EYXGIMt5GdnYJjfzvDm3j38BlspCJGeHIAWiBxciRLmGAaLKCnB2WW8vRhmwFyN4Su0IMEaFDKy0kQ5FB7mne+JC2M1WWGc4YziemAkvjl/Hasc1lTh52QCThX4wKf0s+BgE8EhjzNVwIIDPZxBLgR5HTkuSDIYPTgYJjSADSVkIN6ggCW7fceI8zZJLkZ22bEH70hO2nhznpOVHjx7U9VglEhDy7KEilG8BoOSHbnBQdDFsGR36/FbkgxGqUGwFfKgIIC5FtkH+IIBVIPQrGpipFVlChBgAFhG0uUgufqcAAAAAElFTkSuQmCC'; var finaliconsolved = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJtSURBVHjanFU7axRRFP7uncc+shtfK1toQFKI22hjlTKgWR8ICv4AK+1MFbALCIqCkDKNWttEUiUWBmy2EREsjAgbBK2S9ZHd2ZnZ2Zl7nLnrzL5m9uEHw1zuOfe753733HMYESFE2WImU5ARJgQJcCSA/fvLlRxCyYKTB2s7Q9nIJyC+4rCGaCHFPa7NUhF25hCb6SYmwU17Brozi7qyDyFEm+twtlKUk8RLDebk2yc1L2fhtd7A/+CWkwevZ2Gk9tvbedJx3WDW1QOVQmy+fU/3Hz6Xf4kXj2galA9VKjdhqa5G6WNucSiCnconlN9cgr5uAsurcs6515FQP7fSdbzzoG9dTtNhKG5aXpCZ/pN4xJBMEgabBHNfnspPbngkBbx8jNrenrR5CodnoHPznHWJFs4cn15gf4PCu1dyuBHcEWPDKVWYn4/GK/lnQxxh1EOn6pGEa9QhpgHH03OnJgo00vzJ77550fYjZmx4wdm5E4k690XvX2Lt426sTe19SSFuLF6UWTEK9bsfpGyFGJuUgih+YSjHoM5BhMHRe+9iECSlSDAOyoG1VUk6ihA9NURNMgZpt1MZf+wkcIrJisG0q3z7NXVq81HGxYXz0fOeBiwipvHO4ZMdW0b9KhdUTJnHGftorFOQdtPKoQoBJedHrDrMtmw70TFMu6/ff05EbJsu4MKWYS/V4dyuFWPr60G1KmtzVJ9HYLl6jS77XAFnpzW1mEEOdE6qllV1v4kxbKSMCTtHDtwjtCwXjua013583i2VShdYXzM1mcVVpN0miPmbMi0sKjFNtJsCpM74AfrH38pSJpz+K8AAGeJxOI+fpJMAAAAASUVORK5CYII='; var finaliconunsolved = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAWCAYAAADEtGw7AAAABGdBTUEAANbY1E9YMgAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIVSURBVHjaYvz//z8DHDAy/v/PBKT+MRAN3kgyMHwTYGBg/s3wX/o2SDcEsICI/8yM/2GGfeNlYuD+COR8/UqUweyyPAwi1/8zvJJlYAQ5DCz4/z/Iif/BLv3JycjA/h3IfvCAgUFUFKKLi4tol38WATr2PyMD77t/YIOZQIZ+AJrD/uoTUPYzw/aL9xgK+lYwbDpxDaJjfjtRBvO++cfA+/gzPEjBQfHAkIPBgIcHLPabhxdM7zt2icFjpysD24xvDAwFDWCxXxkQH7BplCFMTKxEseAv0ETmPwwM4MDWOfADp0tghoENBFkCErvRBcZgC/nZwb56c+8eOOiYoHHFhG6QlYIQA8kAaIHIwZWQUPj8FbvBIkpKcHYZby+GGTBXY/gKLUiYsDlARlaaKIfCw7zzPYYcVoPVZIVxhjOK64GR+Ob8daxyLNgE/ZxMwKkCH/iUfhYcbCI45JlwaYQFB3o4g1wI8jpyXJBkMHpwMExoABtKyEC8QQFLdvuOEedtklyM7LJjD96RnLSZ8Ek6WenBszdVDUaJNFCWJQL84+Nm+McMNfiKAwcDrmRHanCADf0LNfjvX9xVBizZ3Xr8liiD/7DAUgWwUDYGlp/f+ZgYOJ98QFXFx8eQYKsKdK0wjlzyCYV7OUSdQfcbUg2CXDXBwcePxAU+Pz8K9+6OHdeV3d21GCmtTMFVHEwP0KUwMYAAAwD3trv/JouOHAAAAABJRU5ErkJggg=='; var archive = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALnSURBVDjLfZNLaFx1HIW/e2fuzJ00w0ymkpQpiUKfMT7SblzU4kayELEptRChUEFEqKALUaRUV2YhlCLYjYq4FBeuiqZgC6FIQzBpEGpDkzHNs5PMTJtmHnfu6//7uSh2IYNnffg23zmWqtIpd395YwiRL1Q0qyIfD56cmOvUs/4LWJg40auiH6jI+7v3ncybdo2Hy9ebKvqNGrn03Nj1+x0Bi1dHHVV9W0U+ye4d2d83+Ca2GJrlGZx0gkppkkfrsysqclFFvh8++3v7CWDh6ugIohfSPcPH+w6fwu05ABoSby9yb3Kc/mePYXc9TdCqslWapVGdn1Zjxo++O33Fujtx4gdEzj61f8xyC8/jN2rsVOcxYZOoVSZtBewZOAT+NonuAWw3S728wFZpFm975cekGjlz8NXLVtSo0SxPImGdtFfFq5epr21wdOxrnMwuaC2jrRJWfYHdxRfIFeDWr0unkyrSUqxcyk2TLQzQrt6hqydPvidDBg/8VTAp8DegvYa3OU1z+SbuM6dQI62kioAAVgondwAnncWvzCDNCk4CLO9vsJVw8xqN+iPiTB5SaTSKURGSaoTHHgxoAMlduL1HiFMZXP8BsvkbO1GD2O3GpLOIF0KsSBijxmCrMY+FqgGJQDzQgGT3XrJ7DuI5EKZd4iDG+CHG84m8AIki1Ai2imRsx4FEBtQHCUB8MG1wi8QKGhjEC4mbAVHTx8kNYSuoiGurkRtLN76ivb0K6SIkusCEoBEgaCQYPyT2QhKpAXKHTiMmQ2lmChWZTrw32v9TsLOyVlu8Nhi2G4Vs32HsTC9IA2KPRuU2Erp097+O5RRYvz3H1r3JldivfY7IR0+mfOu7l3pV5EM1cq744mi+OPwaRD71tSk0Vsp3/uLB6s2minyrIpeOf7a00fFMf1w+MqRGzqvIW/teecdqV5a5P/8ncXv9ZxUdf/lCae5/3/hvpi4OjajIp4ikVOTLY+cXr3Tq/QPcssKNXib9yAAAAABJRU5ErkJggg=='; var archiveAdd = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMVSURBVDjLdZNLaFx1GEfPnZk7cyfNkElS0jTVKKRpE2PSpAhKHyqo2QhtShUiCPWBLhTdFKUUlxYUqggGxYqIbsSNFKQmVqMhTVujSQuhtnmMaR5NJs0kncz7ztz5f5+LgguNv/WPszkcS1XZbFPnDrUh8q6KRlTkrdYj/Vc3+1n/Bkz3H65T0TdV5PXapiNRU1jjztxgVkU/UyMfPtg7uLwpYGagx1bVF1Tk7ciO7p3bWp/BJ4ZsfAw75Gc1NsTGrfF5FTmtIl90Hhsp/AOYHujpRvSdUHXnwW0tR3Gqm0FLlJMz3Bw6xb0P7MdXcR/FXILbsXEyiRujasypva+Mfm9N9R/+EpFjW3f2Wk5NO25mjVTiBqaUxcvFCVlF6ht3g5vEX9mIz4mQjk9zOzZOPjn/TUCNPL/ryT7Ly6yRjQ8hpTShfIJ8Ok56cYm9vR9jh7dAbg7NxbDS09Q2dFBVA1d+mH02oCI5xaoKOiEiNY0UEtepqI4SrQ4TJg/uApgguEtQWCS/Mkp27hLO/UdRI7mAioAAVhC7qhk7FMFdHUOyq9h+sPJ/gU8prfxMJr1BORyFYAj1yqgIATXCXQ8GtAiBLTh1XZSDYRx3HVn5iZSXoexUYkIRJF+CsiKlMmoMATXmrlA1IB5IHrRIoHIHkfpdpO6M4fkcLiyFuLwWJu26lNwUB5MTtBghoCJhn20DYSivgxRBXDBFcBooK/yyEGTKruXxRx/inppmfv3zLOevXWByw630qZHh2eGPKCQXINQA/gowJVAPENQTflzw6GzZg/EZ9mx/CmN5PNK+j4s5z/KJMU9nFkdenRw4GZv//WsMQYjsBjsMCqbokcisY1uVHGp9A4DjT5yhqa4Do/j8n343b+o7X7oSHzvzbT4x48UnzrVj+Z1I48NY9lZEwnw1OkT1dpvh2bMcaOrhvfMvkimsc21yyv1PTH/0dbWpkZMq8lzTYy9bhdU5Pr84yPVomX0dB2iu72Jm5SqXJka4dTP1gfV/OV8+3datIicQCarI+8eXc/uB14AIkAE++a1v+cTfDyOvKVPjhy0AAAAASUVORK5CYII='; var archiveRemove = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMNSURBVDjLdZNLaFx1GMV/d+bO3DtJxkwSSWNq05YkrTVa04qIiOiiRIxgE2ohhUIKRQQFBcGiIiJiFaGIYEFERFy5dCE1pQ8JIbSEJhG66GM6idOk6Uwyec7zztz7/z4XlSw0nvXhx4FzjqWqbKXb517rQeRzFY2ryPv7Bkf+3Mpn/RuQHDncqqLvqMjbLZ2DCVNZZjV9uaii36uRr58Yunx/S8Cd8wMRVT2hIqfi2/u6tu17nZAYiplJIk6YpdQo6/em7qrIGRX5sXd4vLIJSJ4f6EP0Y6ep94Vtjx3BbeoGrRGs3eGv0dPsePx5QnU7qZZyLKamKORuTqgxpw++MfGbdXvk8E+IDD/cNWS5zU/iFZbZyN3E1Ir4pQyOVaWtYy94a4QbOgi5cfKZJIupKcprd3+x1cjxPYfOWn5hmWJmFKnlcco5yvkM+fkFDg59SyRWD6U0Wkph5ZO0tO+nsRmmf589aqtISbEao65DvLmDSu4GdU0JEk0xYpTBmwMTBW8BKvOUsxMU01dwdx1BjZRsFQEBrCiRxm4iThxvaRIpLhEJg1WegZBSy16ikF8niCUg6qB+gIpgqxEe9GBAq2DX47YeIIjGcL0VJHuRDb9A4DZgnDhSrkGgSC1AjcFWYx4UqgbEBymDVrEbthNv28PG6iR+yGVlIsfKtTm8xXVCD0VpfY5/EojEQpEIEINgBaQK4oGpgttOoLA6sUIt6/L08Q9xdvdQuX6BG+OX8IP1+pAaGZsd+4bK2hw47RCuA1MD9QFBfSFzJUn3S0dxZ0axfj5G3eyv7Opopja3HthizKuF+fHhW+mxU82dh7oe3d9POL4XyinwSpiqj1mr4bbthv73Nidsf/oIIU+czSlP//Bsq4q8q0bean9qINHe2w++R37+KtOffckzrwxSP3eOaiVLGSjkw9yaYeE/Z7p29kCPGvlIRY51vnjSqiylmb/4B3be0x0tgWWH7lHIBaQXw8b39BPr/+589UxPn4p8gEhURb7ierWntHr/zbCxdpqwLih89/KF4Iu/AXSvuZLBEiNYAAAAAElFTkSuQmCC'; var commentIconShare = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACNElEQVQ4T32TTYtSURjH/8e3MvVqQ5PjFJNvODJiJojgB3DRSnBnX8GFG1tJCxlx4cKNhBsLFxIuBEGEdm3cubJBpIF8SWocNSfHqaYCPXEOKN65MA883MM99/k9L//7kHq9TrFlq9UKlFKsn+FwmGzf3zwTBjCbzZv3LHBt/X4foVCIA14cv6fvXj2XwDYAlpX52mQyGUajEYLBIGHBBw+1GE5+4iaE1Go1UQWEEMjlcu4qlQqJ0ic8MWqxK6gwXfzDl7EYQqrVKrXZbOj1emDBSqUSOp0OVqsVL9+ewLynw67hLnpnc1j3DZjO/2BwfrWphFQqFWq328FKZs6yarVaxN98hMUkwHhfjf7octOaxaTH+Mc1+qMFh5ByuUwdDgeGwyEP1uv1eP1hAeu+HqYdDQbnC4kI5j0Bo4tf6J1dgpRKJep0OvkAWd9qtRrHlYEoSHfvDnYENS4W17j6/Vd0R4rFInW5XFx3NgOFQoHpdAqLxYLZbIZAIMBVsD1+gO7X71IVCoUCdbvdHLAtIYN1u11EIhEOODQbcToYSwH5fJ56PB4+uG1j2TudDqLRKAcc2R+h8/mbFJDL5ajX64UgCCIAa6PdbiMWi3HA08MDnJwOpYBsNkt9Ph8MBoMIMJlM0Gq1EI/HOeDZkRWtTk8KyGQy1O/3Yz6fiwAajQbNZhOJRIID1peSXzmdTtNAILDZvvU+sKE2Gg2kUqnbtzGZTFL28XK55JDtdWZKZDKZWwH/ARw1EUZjI/GaAAAAAElFTkSuQmCC'; var linkIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAUNSURBVHhe1ZvNK3xRGMfPDDErSUqThbIg/gRZKAt2io2dGpSXLESxUhYWpNiQ15UiRSkL7xJCCUXelpQkykZRXu5vnvM7hzN3njv33Dsz5977qW/NuM+Zeb7fc+feO+cOnxaGeJDX11eyuLhILi8vyfv7O8nJySElJSWkoqKCVUgCAXiJ+/t7LS8vDybNUK2trazaHE8FMDo6iho20s/PDxtpjGcC6O/vR02a6fv7m70CjicCsGueK1YIrg8gXvNcRiG4OoBEmefCQnBtALLmOzs7tZGREXQbJv2B0ZUByJpfW1tjIzQ6u1gNJjEE1wUga351dZWN+OPz8xOtxcRxVQDxmOd8fX2hY/Sqr6+n9a4JIBHmObIhAK4IIJHmOTIfh/B3CecDSIZ5jtmBsb293dkAkmmeMzMzg74mqLa2VvOHHzjC4OAg6erqYs+MCZ/qrH/FFXh+fmaPogkEAuEYHGBjYwOdEb3E87wdrq+v0dflonsgq1UK1oxe8ez2wNXVFfq6om5vb9UHMDw8jDYjSm9+Z2dHOz4+Zs/MMZt5UHp6Oq1VHkBBQQHaEJdofn19PWp7+DPNtuLIzDzo6OiI1isPAGuGSzS/vLyM1oCMkDUPpz+OawIoLS1lFbHNg7a2tljlHzK7PYhfAnNcE8D8/DzdbmYetLCwQGs5sjOvNw8oDwAOPvrGZmdn6TYZ8yAR2ZkPhUJsRCTKA6irq4tobG5ujv5d1vz4+DitB+zu9iLKA3h6evptzOrMDw0N0Xognt1eRHkAQHl5uTYxMUEf2zEf724vkpQAZG5IAE7OPCdhAfT19WnBYDCqkcrKSu3s7IxV/eH0zHPiDmBlZQVtQq/8/Hw2wrr5/f19rbq6Gq3Ry4p5IK4ABgYG0CYwTU9P0zFWzR8eHqLbMcnu9iK2A5BdzADZPdrD9Tq2HZPVmefYCsCKeavneVUzz7EcgIqZl10wATU2NtIxdrEUgBXzsBYHWDUPlJWVoTV6TU5OshH2kQ5A1vzS0hIbYc885+7uTqupqYmqzczM1Lq7u1lV/EgFIGte9vu8KMw8Rqx7/PFgGoAK89vb2/R3P04QMwAV5sWj/cHBAf2bSgwDkDUvLl1vbm6iNXpx8/rzvLgqpAo0ADvmAaxGL2zmRakm6h3t7PYAfOHB6kRx83t7e+h20MfHB61RRUQAds0DcNrCarm4eSA1NRWtAb28vLAqNfwGMDY2hjakF2aek5GRgY4RzZ+fn6M1XKqh7/j4+Ig2o1cs8wAshAQCgYgxU1NTbKv5YkZKSgqrVAcNoKioCG1IlJl5kYuLC3pGEJFZzGhra2PV6iBw0MGaEWXFPIbsMpYTEPi6ijXDlexb1FzwQ2gnID09PWhDIHEN3g6y5hsaGtgI9cCvNNCmQG9vb6zMOolevU0W/mAwGO4Dp6mpiT2yxs3NDSkuLmbPjAmFQiR8lmDPHOLk5ASdGa7m5maWlRxemXkOPfRiDYqSDUHWvN0FzGRAA5C5BDYLIRk3LVTwe/LNzs5GGxZlFILXdnuRiKsPn8+HNi6qpaWFVf/HqzPPibr8gutxzIAouMcPyN4Wc+PMc6ICAPx+P2rEjtxsHkADABIRglt3exHDAACZj4OR3D7znJgBAHb2BC/MPMc0ACArKws1iqmjo4ON8gZSAQC9vb2oYS64ZXV6esqqvYPlf5/f3d2lenh4IGlpaaSwsJBUVVWR3NxcVuElCPkH5Y60i7z5JBsAAAAASUVORK5CYII='; var languages = []; languages[SETTINGS_LANGUAGE_EN] = { mycomments : "My comments", mycomment : "My comment", myfinalcoords : "My final coordinates", and : "and", both : "both", nothing : "nothing", archived : "archived", not_archived : "not archived", never : "never", download : "Download", finale : "Final", final_coordinate : "Final coordinate", final_location : "Final location", final_location_byGCC : "Final location by GCC", menu_options : 'Show options', menu_showmycomments : "Show my comments", menu_export : "Export", menu_import : "Import", menu_delete : "Delete", menu_patchgpx : "Patch GPX", type_untyped : "untyped", type_unsolved : "unsolved", type_solved : "solved", type_found : "found", type_archived : "archived", ov_totalamount : "Total amount", ov_amountarchive : "Amount of them in archive", ov_lastex : "Last export", ov_lastim : "Last import", ov_lastup : "Last check for updates", settings_intro : "Thanks for using GCComment. Visit github.com for general information and documentation or geoclub.de for discussions & feedback. If you have direct feedback or questions, contact me at birnbaum2001@gmx.de.", settings_feelfree : "Feel free to show your appreciation :)", settings_enterUUID : "UUID for server synchronisation", settings_enterServer : "Server for server synchronisation", settings_allowExport : "Allow export of comment data to other scripts (e.g., GC Tour)", settings_lazyTable : "Lazy table refresh (no update on state change or delete from overview)", settings_syncWithGS : "When saving the final coordindates, also correct coordinates at Groundspeak", settings_saveCacheNotes : "When saving comments, also upload them as Groundspeak cache notes", settings_saveprefs : "Save preferences", settings_language : "Language", thank_you : "Thank you", table_comments : "My comment & final coordinates", table_lastsave : "Last save", table_actions : "Actions", table_ihaveit : 'I have the final coordinates :)', table_isarchived : "This cache is archived", table_fromhome : "from home", table_markcacheas : "Mark cache as", table_editondetail : "Edit on Detail page", table_removefromarchive : "Remove from archive", table_addtoarchive : "Add to archive", table_finalat : "Final at ", table_filter_all : 'Show all', table_filter_untyped : "Show all untyped", table_filter_unsolved : "Show all unsolved", table_filter_solved : "Show all solved", table_filter_found : "Show all found", table_filter_archived : "Show all archived", table_filtered_by : "Filtered by", export_step1 : "1. Choose which type of comments to export.", export_step2 : "2. Choose whether to include archived caches.", export_step3 : "3. Choose the target format:", export_explain : "By pressing the 'Perform filtered Export' button, your caches will be filtered and the output will be generated. You will be asked to save a cryptically named file. Just store it where you like and rename it appropriately, e.g., 'myfinds2012.html'.\n\nYou can also export to Dropbox. You will be asked for a file name that will be created in your Dropbox folder.", export_perform : "Perform filtered export", export_toServer : "Export all to server", export_toDropbox : "Export all to Dropbox", export_toDropboxEnterFileName : "Please enter the file name", export_toDropboxPerformFilteredExport : "Perform filtered export to Dropbox", export_toServer_result : "The server said", import_explain : "You can import backups that were previously exported using GCComment. The only file formatted supported right now is GCC, i.e., GCComments own file format. After pressing the 'Execute Import' button, the import will be parsed. Comments will be imported, unless there is already a comment with a newer time stamp. So more recent comments cannot be overwritten by older backups.", import_choose : "Choose GCC file to import from (*.gcc):", import_fromServer : "Load from server", import_fromDropbox : "Load from Dropbox", import_fromDropboxCheckForFiles : "Check on Dropbox", import_perform : "Execute import", import_close : "Close import window", import_resultimported : "Imported comments", import_resultnotimported : "Already existing", delete_select : "Select the types you want to delete:", all : "all", delete_perform : "Perform delete all", delete_result : "Removed caches", delete_confirmation : "Do you really want to delete comments according to your filters?\n\nIf you press ok, all comments according to the selected filters will be removed! Make sure to have a backup! All removed comments will be written to the error console.", delete_confirmation_overview : "Do you really want to delete this comment?", patchgpx_explain : "You can open an existing GPX file and patch it according to the options selected below. By pressing 'Patch and Download', the GPX file will be loaded and you will be asked to save a file with a strange filename. Save it and rename the file to something useful, e.g., 'onlysolved.gpx'.", patchgpx_remove : "Remove caches from GPX that ...", patchgpx_filter_nogcc : "have no GCC entry", patchgpx_filter_markeddefaulttype : "you marked with default state", patchgpx_filter_markednotsolved : "you marked as not solved", patchgpx_filter_markedsolved : "you marked as solved", patchgpx_filter_markfound : "you marked as found", patchgpx_changeorig : "Change the original waypoint's coordinates to your final coordinates", patchgpx_addwptforfinal : "Add additional waypoints for final coordinates", patchgpx_stripemojis : "Remove emojis if present (warning: beta state. if your emoji was not removed, please send the GPX to birnbaum2001@gmx.de)", patchgpx_striphtmltags : "Remove HTML tags from descriptions", patchgpx_perform : "Patch and download", detail_final : "Final coordinate", detail_finalsave : "Save final coordinate", detail_finaldelete : "Delete final coordinate", detail_lastsaved : "last saved", detail_edit : "Edit comment", detail_share : "Share comment", detail_delete : "Delete comment", detail_thestate : "State", detail_save : "Save comment", detail_cancel : "Cancel editing", detail_add : "Add comment", detail_finaldeleteconfirmation : "Do you really want to delete the final coordinates?", detail_deleteconfirmation : 'Do you really want to delete this comment?', detail_inclfinal : "incl. final", map_enablemm : "Enable mystery mover and show ...", map_area : "161m area", map_home : "link to original", map_notusingleaflet : "GCComment mystery mover only works on the standard (leaflet-based) map of Geocaching.com!", map_includewpt : "Include waypoints", log_markfound : "Mark as found in GCC", log_movearchive : "Move to archive in GCC", alert_couldnotparse : 'Coordinates could not be parsed. Please correct them before saving.\nError Message:', alert_coordsnotvalid : "Coordinates do not match DegMin, Dec, or Plain", gpxexporttitle : "Waypoint listing with final coordinates of geocaches", gpxexportdesc : "This is an export of ", gpxexportwpttitle : 'GCComment Final and Comment', kmlexporttitle : "Waypoint listing with final coordinates of geocaches", actionfailed : "Action failed", savegpx_explain : 'Use GCComment information to configure your GPX ', savegpx_addgcc : 'Add your GCComment', savegpx_changeorig : 'Change the original coordinates to your final coordinates', savegpx_addfinal : 'Add final coordinates as separate waypoint', update_changes : 'Changes in version ', update_clickToUpdate : "Click here to update!", tmpl_commentremoved : "Removed comment.", tmpl_patchresult : "Patching removed {{countWPTRemoved}} waypoints.
Patching added {{countWPTAdded}} waypoints.
Patching changed Coords of {{countCoordChanged}} waypoints.
The GPX now contains {{total}} waypoints.", tmpl_import_replace : "Replacing the old comment with a new comment.", tmpl_import_save : "Saving new comment.", tmpl_update : "Hooray, a GCComment update is available. The new version is {{serverVersion}} while your installed version is {{version}}.", editWaypoint : "Edit waypoint", removeWaypoint : "Remove waypoint", addWaypoint : "Add waypoint", waypoints : "Waypoints", archived_filter_no_archived : "no archived", archived_filter_include_archived : "include archived", archived_filter_only_archived : "only archived", shareImportNew : "A site wants to import a new comment:\n%name%\nAllow?", shareImportOverride : "A site wants to override one of your comments:\n%name%\nAllow?" }; languages[SETTINGS_LANGUAGE_DE] = { mycomments : "Meine Kommentare", mycomment : "Mein Kommentar", myfinalcoords : "Meine Finalkoordinaten", and : "und", both : "beide", nothing : "nichts", archived : "archiviert", not_archived : "nicht archiviert", never : "niemals", download : "Download", finale : "Finale", final_coordinate : "Finalkoordinate", final_location : "Finalort", final_location_byGCC : "Finalort von GCC", menu_options : 'Optionen anzeigen', menu_showmycomments : "Zeige meine Kommentare", menu_export : "Export", menu_import : "Import", menu_delete : "Löschen", menu_patchgpx : "GPX patchen", type_untyped : "ungetypt", type_unsolved : "ungelöst", type_solved : "gelöst", type_found : "gefunden", type_archived : "archiviert", ov_totalamount : "Gesamtanzahl", ov_amountarchive : "Anzahl derer im Archiv", ov_lastex : "Letzter Export", ov_lastim : "Letzter Import", ov_lastup : "Letzte Prüfung auf Aktualisierung", settings_intro : "Vielen Dank für die Verwendung von GCComment. Besuche github.com für allgemeine Informationen und Dokumentation oder geoclub.de für Diskussionen und Rückmeldungen. Wenn du direkte Rückmeldungen oder Fragen hast, dann kannst du mich über birnbaum2001@gmx.de kontaktieren.", settings_feelfree : "Zögere nicht, deiner Wertschätzung Ausdruck zu verleihen :)", settings_enterUUID : "UUID zur Serversynchronisierung", settings_enterServer : "Server zur Serversynchronisierung", settings_allowExport : "Erlaube den Export der Kommentare an andere Skripte (z.B. GC Tour)", settings_lazyTable : "Träge Tabellenaktualisierung (Keine Aktualisierung der Übersichtstabelle nach Statusänderung oder Löschen)", settings_syncWithGS : "Korrigiere die Finalkoordinaten bei Groundspeak beim Speichern", settings_saveCacheNotes : "Lade alle Kommentare beim Speichern als Cache Note hoch", settings_saveprefs : "Einstellungen speichern", settings_language : "Language / Sprache", thank_you : "Danke", table_comments : "Mein Kommentare & Finalkoordinaten", table_lastsave : "Letztes Speichern", table_actions : "Aktionen", table_ihaveit : 'Ich habe die Finalkoordinate :)', table_isarchived : "Dieser Cache ist archiviert", table_fromhome : "von zuhause", table_markcacheas : "Markiere Cache als", table_editondetail : "Auf Detailseite editieren", table_removefromarchive : "Aus dem Archiv entfernen", table_addtoarchive : "In das Archiv einfügen", table_finalat : "Finale bei ", table_filter_all : 'Zeige alle', table_filter_untyped : "Zeige alle ungetypten", table_filter_unsolved : "Zeige alle ungelösten", table_filter_solved : "Zeige alle gelösten", table_filter_found : "Zeige alle gefundenen", table_filter_archived : "Zeige alle archivierten", table_filtered_by : "Gefiltert nach", export_step1 : "1. Wähle den Typ der zu exportierenden Kommentare.", export_step2 : "2. Wähle den gewünschten Archivstatus.", export_step3 : "3. Wähle das Zielformat:", export_explain : "Durch drücken des 'Gefilterten Export durchführen'-Knopf werden die Kommentare gemäß der Einstellungen gefiltert und das gewählte Ausgabeformat erzeugt. Es wird eine Datei mit einem kryptischen Namen gespeichert. Diese einfach irgendwo ablegen und entsprechend umbenennen z.B. 'MeineFunde_2012.html'.\n\nBeim Export zur Dropbox wird nach einem Dateinamen gefragt, welche in der Dropbox erstellt werden soll.", export_perform : "Gefilterten Export durchführen", export_toServer : "Alle zum Server exportieren", export_toDropbox : "Alle zur Dropbox exportieren", export_toDropboxEnterFileName : "Bitte Dateinamen eingeben", export_toDropboxPerformFilteredExport : "Gefilterten Export zu Dropbox durchführen", export_toServer_result : "Der Server sagte", import_explain : "Es können Sicherungskopien importiert werden, die zuvor von GCComment exportiert wurden. Es wird nur das GCComment-eigene Dateiformat unterstützt (*.gcc). Nach dem Drücken des 'Import durchführen'-Knopf wird der Import geprüft. Die Kommentare werden importiert solange nicht schon ein Kommentar mit einem neueren Zeitstempel vorhanden ist. Daher können aktuellere Kommentare nicht durch ältere überschrieben werden.", import_choose : "Wähle GCC-Datei zum Importieren (*.gcc):", import_fromServer : "Lade vom Server", import_fromDropbox : "Lade von Dropbox", import_fromDropboxCheckForFiles : "Prüfe in Dropbox", import_perform : "Import durchführen", import_close : "Importfenster schließen", import_resultimported : "Importierte Kommentare", import_resultnotimported : "Bereits existierende Kommentare", delete_select : "Wähle die zu löschenden Kommentartypen:", all : "alle", delete_perform : "Alle löschen", delete_result : "Gelöschte Kommentare", delete_confirmation : "Möchtest du wirklich die Kommentare gemäß der Filtereinstellungen löschen?\n\nWenn du Ok drückst, werden diese gelöscht! Stelle sicher, dass du ein Backup hast. Zur Sicherheit werden alle gelöschten Kommentare auf die Fehlerkonsole (CTRL-Shift-J) geschrieben.", delete_confirmation_overview : "Möchtest du diesen Kommentar wirklich löschen?", patchgpx_explain : "Du kannst eine existierende GPX-Datei öffnen und entsprechend der folgenden Optionen patchen. Durch klicken von 'Patch und Download' wird die GPX-Datei geladen und du wirst gebeten, eine Datei mit seltsamem Dateinamen abzuspeichern. Tu dies und benenne die Datei in etwas Sinnvolles um, z.B. 'nur_gelöste.gpx'.", patchgpx_remove : "Entferne Caches aus dem GPX, die ...", patchgpx_filter_nogcc : "keinen GCComment-Eintrag haben", patchgpx_filter_markeddefaulttype : "als default markiert sind", patchgpx_filter_markednotsolved : "als ungelöst markiert sind", patchgpx_filter_markedsolved : "als gelöst markiert sind", patchgpx_filter_markfound : "als gefunden markiert sind", patchgpx_changeorig : "Ändere die Koordinaten des Original-Wegpunktes auf deine Finalkoordinaten", patchgpx_addwptforfinal : "Füge einen zusätzlichen Wegpunkt für deine Finalkoordinaten ein", patchgpx_stripemojis : "Entferne Emojis falls vorhanden (Warning: Betastatus. Wenn ein Emoji nicht entfernt wurde, bitte das GPX an birnbaum2001@gmx.de senden)", patchgpx_striphtmltags : "Entferne HTML tags aus den Beschreibungen", patchgpx_perform : "Patchen und herunterladen", detail_final : "Finalkoordinate", detail_finalsave : "Finalkoordinate speichern", detail_finaldelete : "Finalkoordinate löschen", detail_lastsaved : "zuletzt gespeichert", detail_edit : "Kommentar editieren", detail_share : "Kommentar teilen", detail_delete : "Kommentar löschen", detail_thestate : "Kommentarstatus", detail_save : "Kommentar speichern", detail_cancel : "Editieren abbrechen", detail_add : "Kommentar hinzufügen", detail_finaldeleteconfirmation : "Möchtest du wirklich die Finalkoordinate löschen?", detail_deleteconfirmation : 'Möchtest du wirklich diesen Kommentar löschen?', detail_inclfinal : "inkl. Finale", map_enablemm : "Aktiviere den Mystery-Verschieber und zeige ...", map_area : "161m-Radius", map_home : "Verbindung zum Original", map_notusingleaflet : "Der GCComment Mystery-Verschieber funktioniert nur auf der Standardkarte (leaflet) von Geocaching.com!", map_includewpt : "Wegpunkte einbeziehen", log_markfound : "In GCC als gefunden markieren", log_movearchive : "In GCC ins Archiv bewegen", alert_couldnotparse : 'Koordinaten konnten nicht geparst werden. Bitte vor dem Speichern korrigieren:\nFehlermeldung:', alert_coordsnotvalid : "Koordinaten sind nicht DegMin, Dec, or Plain", gpxexporttitle : "Wegpunkte mit Finalkoordinaten von Geocaches", gpxexportdesc : "Das ist ein Export von ", gpxexportwpttitle : 'GCComment Finale und Kommentar', kmlexporttitle : "Wegpunkte mit Finalkoordinaten von Geocaches", actionfailed : "Aktion fehlgeschlagen", savegpx_explain : 'Benutze GCComment-Information, um das GPX zu konfigurieren ', savegpx_addgcc : 'Füge deinen Kommentar hinzu', savegpx_changeorig : 'Ändere die Originalkoordinate auf deine Finalkoordinate', savegpx_addfinal : 'Füge die Finalkoordinate als zusätzlichen Wegpunkt hinzu', update_changes : 'Änderungen in Version ', update_clickToUpdate : "Hier klicken, um das Update einzuspielen!", tmpl_commentremoved : "Kommentar gelöscht.", tmpl_patchresult : "Patching hat {{countWPTRemoved}} Wegpunkte entfernt.
Patching hat {{countWPTAdded}} Wegpunkte hinzugefügt.
Patching hat {{countCoordChanged}} Koordinaten von Wegpunkten geändert.
Die GPX-Datei enthält nun {{total}} Wegpunkte.", tmpl_import_replace : "Der alte Kommentar wurde durch den neuen Kommentar ersetzt.", tmpl_import_save : "Ein neuer Kommentar wurde gespeichert.", tmpl_update : "Hooray, eine Aktualisierung für GCComment ist verfügbar. Die neue Version ist {{serverVersion}}, während die installierte Version {{version}} ist.", editWaypoint : "Wegpunkt bearbeiten", removeWaypoint : "Wegpunkt entfernen", addWaypoint : "Wegpunkt hinzufügen", waypoints : "Wegpunkte", archived_filter_no_archived : "keine archivierten", archived_filter_include_archived : "archivierte einschließen", archived_filter_only_archived : "nur archivierte", shareImportNew : "Eine Seite möchte einen neuen Kommentar importieren:\n%name%\nErlauben?", shareImportOverride : "Eine Seite möchte einen deiner Kommentare überschreiben:\n%name%\nErlauben?" }; var langsetting = GM_getValue(SETTINGS_LANGUAGE); var lang = languages[SETTINGS_LANGUAGE_EN]; function main() { if (!$) { log('error', 'No jQuery found. Stopping GCComment: ' + $); return; } if (langsetting === SETTINGS_LANGUAGE_AUTO) { if ($('.selected-language > a:first')) { var gslang = $('.selected-language > a:first').text(); if (gslang.indexOf("English") > -1) lang = languages[SETTINGS_LANGUAGE_EN]; else if (gslang.indexOf("Deutsch") > -1) lang = languages[SETTINGS_LANGUAGE_DE]; } } else { lang = languages[langsetting]; } if (!lang) { lang = languages[SETTINGS_LANGUAGE_EN]; } doMaintenance(); if (GM_getValue(ENABLE_EXPORT)) { log('info', 'Enabling export to other scripts'); var getGCommentFunction = function(guid) { return doLoadCommentFromGUID(guid); }; if(browser === "FireFox" && window.wrappedJSObject){ exportFunction(getGCommentFunction, unsafeWindow, { defineAs : "getGCComment" }); } else{ unsafeWindow.getGCComment = getGCommentFunction; } } // register own CSS styles appendCSS("text", "a.gccselect {padding-bottom:5px;background-color:#EBECED;outline:1px solid #D7D7D7}", null); homelat = GM_getValue('HOMELAT'); homelng = GM_getValue('HOMELNG'); // starting the GCC log('debug', 'found URL: ' + document.URL); if ((document.URL.search("cache_details\.aspx") >= 0) || (document.URL.search("\/geocache\/GC") >= 0)) { log('debug', 'matched gccommentOnDetailpage'); gccommentOnDetailpage(); } else if ((document.URL.search("\/my\/logs\.aspx") >= 0) || (document.URL.search("\/seek\/nearest\.aspx") >= 0) || (document.URL.search("\/watchlist\.aspx") >= 0) || (document.URL.search("\/my\/recentlyviewedcaches\.aspx") >= 0) || (document.URL.search("\/bookmarks\/view\.aspx") >= 0)) { log('debug', 'matched addCommentBubblesToPage'); addCommentBubblesToPage(); } else if (document.URL.search("cdpf\.aspx") >= 0) { log('debug', 'matched gccommentOnPrintPage'); gccommentOnPrintPage(); } else if ((document.URL.search("\/my\/default\.aspx") >= 0) || (document.URL.search("\/my\/$") >= 0) || (document.URL.search("\/my\/\#") >= 0) || (document.URL.search("\/my\/\\?.*=.*") >= 0)) { log('debug', 'matched gccommentOnProfilePage'); gccommentOnProfilePage(); } else if (document.URL.search("www.geocaching.com\/map") >= 0) { log('debug', 'matched mysteryMoverOnMapPage'); if(browser === "Chrome"){ mysteryMoverOnMapPage(); } else if(browser === "FireFox" && window.wrappedJSObject){ //FireFox in GM-Context var localStorageCache = {}; var allKeys = GM_listValues(); for (var i = 0; i < allKeys.length; i++) { localStorageCache[allKeys[i]] = GM_getValue(allKeys[i], null); } var code = document.createElement('script'); code.setAttribute('type', 'text/javascript'); code.textContent += "var localStorageCache = JSON.parse(decodeURIComponent(\""; code.textContent += encodeURIComponent(JSON.stringify(localStorageCache)); code.textContent += "\"));("; code.textContent += mainCode.toString(); code.textContent += ")();"; document.getElementsByTagName('head')[0].appendChild(code); } else{ mysteryMoverOnMapPage(); } } else if (document.URL.search("sendtogps\.aspx") >= 0) { log('debug', 'matched sendToGPS'); sendToGPS(); } else if (document.URL.search("\/account\/ManageLocations\.aspx") >= 0) { log('debug', 'matched gccommentOnManageLocations'); gccommentOnManageLocations(); } else if (document.URL.search("\/seek\/log\.aspx") >= 0) { log('debug', 'matched gccommentOnLogPage'); gccommentOnLogPage(); } else if (document.URL.search("lukeiam\.github\.io\/gcc") >= 0) { log('debug', 'matched gccommentOnSharingPage'); gccommentOnSharingPage(); } } function doMaintenance() { var INDEXBUILT = "indexbuilt"; var INDEXREPAIRED = "indexRepaired"; // first check whether the index has been created at all. this was introduced // in version 46. // index means gccode - guid mapping. // if the variable is not "done", this index is created. if (GM_getValue(INDEXBUILT) != 'done') { log('info', 'Building index for GCCode-GUID assignment. This is done only once after update on version 46'); var keys = GM_listValues(); for (var i = 0; i < keys.length; i++) { if (keys[i].indexOf(COMPREFIX) >= 0) { // we got a comment var guid = keys[i].split(COMPREFIX)[1]; var comment = doLoadCommentFromGUID(guid); if (!comment) continue; var indexKey = COMGCPREFIX + comment.gccode; GM_setValue(indexKey, guid); log("info", indexKey + "=" + guid); } } log('info', 'Finished building index.'); GM_setValue(INDEXBUILT, 'done'); } var indexRepaired = GM_getValue(INDEXREPAIRED); if (!indexRepaired) { indexRepaired = 0; } // repair needed because until 76, only the guid (the actual comment) was // deleted, but not the gccode-guid mapping if (indexRepaired < 77) { log('info', 'Performing maintenance of version 77. Removing dangling gccode-guid mappings from the GreaseMonkey storage'); var oComments = {}; var aGCCodes = []; var allkeys = GM_listValues(); for (var i = 0; i < allkeys.length; i++) { if (allkeys[i].indexOf(COMPREFIX) >= 0) { // we got a comment var guid = allkeys[i].split(COMPREFIX)[1]; var comment = doLoadCommentFromGUID(guid); if (comment) { oComments[comment.gccode] = comment; } else { log('debug', 'tried to load from GUID ' + guid + ', but nothing was returned.'); } } else if (allkeys[i].indexOf(COMGCPREFIX) >= 0) { var gccode = allkeys[i].split(COMGCPREFIX)[1]; aGCCodes.push(gccode); } } var removeCounter = 0; for (i = 0; i < aGCCodes.length; i++) { var gccode = aGCCodes[i]; var comment = oComments[gccode]; if (!comment) { // GCCode without comment ==> delete it GM_deleteValue(COMGCPREFIX + gccode); log('info', 'Deleted GCCode ' + gccode + ' because it has no corresponding comment stored'); removeCounter++; } } log('debug', 'Maintenance 77 complete. Dangling indexes removed: ' + removeCounter); indexRepaired = 77; } if (indexRepaired < 77) { indexRepaired = 77; } log('debug', 'Setting indexRepaired to new value: ' + indexRepaired); GM_setValue(INDEXREPAIRED, indexRepaired); } // GCComment auf der Profilseite function gccommentOnProfilePage() { if(browser === "Chrome"){ appendCSS('table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:700}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px;border-top:1px solid #111}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting{cursor:pointer;*cursor:hand}table.dataTable thead .sorting{background:url(../images/sort_both.png) no-repeat center right}table.dataTable thead .sorting_asc{background:url(../images/sort_asc.png) no-repeat center right}table.dataTable thead .sorting_desc{background:url(../images/sort_desc.png) no-repeat center right}table.dataTable thead .sorting_asc_disabled{background:url(../images/sort_asc_disabled.png) no-repeat center right}table.dataTable thead .sorting_desc_disabled{background:url(../images/sort_desc_disabled.png) no-repeat center right}table.dataTable tbody tr{background-color:#fff}table.dataTable tbody tr.selected{background-color:#b0bed9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#abb9d3}table.dataTable.hover tbody tr:hover,table.dataTable.hover tbody tr.odd:hover,table.dataTable.hover tbody tr.even:hover,table.dataTable.display tbody tr:hover,table.dataTable.display tbody tr.odd:hover,table.dataTable.display tbody tr.even:hover{background-color:#f5f5f5}table.dataTable.hover tbody tr:hover.selected,table.dataTable.hover tbody tr.odd:hover.selected,table.dataTable.hover tbody tr.even:hover.selected,table.dataTable.display tbody tr:hover.selected,table.dataTable.display tbody tr.odd:hover.selected,table.dataTable.display tbody tr.even:hover.selected{background-color:#a9b7d1}table.dataTable.order-column tbody tr > .sorting_1,table.dataTable.order-column tbody tr > .sorting_2,table.dataTable.order-column tbody tr > .sorting_3,table.dataTable.display tbody tr > .sorting_1,table.dataTable.display tbody tr > .sorting_2,table.dataTable.display tbody tr > .sorting_3{background-color:#f9f9f9}table.dataTable.order-column tbody tr.selected > .sorting_1,table.dataTable.order-column tbody tr.selected > .sorting_2,table.dataTable.order-column tbody tr.selected > .sorting_3,table.dataTable.display tbody tr.selected > .sorting_1,table.dataTable.display tbody tr.selected > .sorting_2,table.dataTable.display tbody tr.selected > .sorting_3{background-color:#acbad4}table.dataTable.display tbody tr.odd > .sorting_1,table.dataTable.order-column.stripe tbody tr.odd > .sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd > .sorting_2,table.dataTable.order-column.stripe tbody tr.odd > .sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd > .sorting_3,table.dataTable.order-column.stripe tbody tr.odd > .sorting_3{background-color:#f5f5f5}table.dataTable.display tbody tr.odd.selected > .sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1{background-color:#a6b3cd}table.dataTable.display tbody tr.odd.selected > .sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2{background-color:#a7b5ce}table.dataTable.display tbody tr.odd.selected > .sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3{background-color:#a9b6d0}table.dataTable.display tbody tr.even > .sorting_1,table.dataTable.order-column.stripe tbody tr.even > .sorting_1{background-color:#f9f9f9}table.dataTable.display tbody tr.even > .sorting_2,table.dataTable.order-column.stripe tbody tr.even > .sorting_2{background-color:#fbfbfb}table.dataTable.display tbody tr.even > .sorting_3,table.dataTable.order-column.stripe tbody tr.even > .sorting_3{background-color:#fdfdfd}table.dataTable.display tbody tr.even.selected > .sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1{background-color:#acbad4}table.dataTable.display tbody tr.even.selected > .sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2{background-color:#adbbd6}table.dataTable.display tbody tr.even.selected > .sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover > .sorting_1,table.dataTable.display tbody tr.odd:hover > .sorting_1,table.dataTable.display tbody tr.even:hover > .sorting_1,table.dataTable.order-column.hover tbody tr:hover > .sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_1,table.dataTable.order-column.hover tbody tr.even:hover > .sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover > .sorting_2,table.dataTable.display tbody tr.odd:hover > .sorting_2,table.dataTable.display tbody tr.even:hover > .sorting_2,table.dataTable.order-column.hover tbody tr:hover > .sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_2,table.dataTable.order-column.hover tbody tr.even:hover > .sorting_2{background-color:#ebebeb}table.dataTable.display tbody tr:hover > .sorting_3,table.dataTable.display tbody tr.odd:hover > .sorting_3,table.dataTable.display tbody tr.even:hover > .sorting_3,table.dataTable.order-column.hover tbody tr:hover > .sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover > .sorting_3,table.dataTable.order-column.hover tbody tr.even:hover > .sorting_3{background-color:#eee}table.dataTable.display tbody tr:hover.selected > .sorting_1,table.dataTable.display tbody tr.odd:hover.selected > .sorting_1,table.dataTable.display tbody tr.even:hover.selected > .sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1,table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_1,table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_1{background-color:#a1aec7}table.dataTable.display tbody tr:hover.selected > .sorting_2,table.dataTable.display tbody tr.odd:hover.selected > .sorting_2,table.dataTable.display tbody tr.even:hover.selected > .sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2,table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_2,table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_2{background-color:#a2afc8}table.dataTable.display tbody tr:hover.selected > .sorting_3,table.dataTable.display tbody tr.odd:hover.selected > .sorting_3,table.dataTable.display tbody tr.even:hover.selected > .sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3,table.dataTable.order-column.hover tbody tr.odd:hover.selected > .sorting_3,table.dataTable.order-column.hover tbody tr.even:hover.selected > .sorting_3{background-color:#a4b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:5px 9px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:5px 9px 3px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px 5px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:.5em 1em;margin-left:2px;text-align:center;text-decoration:none!important;cursor:pointer;*cursor:hand;color:#333!important;border:1px solid transparent}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333!important;border:1px solid #cacaca;background-color:#fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,white),color-stop(100%,gainsboro));background:-webkit-linear-gradient(top,white 0%,gainsboro 100%);background:-moz-linear-gradient(top,white 0%,gainsboro 100%);background:-ms-linear-gradient(top,white 0%,gainsboro 100%);background:-o-linear-gradient(top,white 0%,gainsboro 100%);background:linear-gradient(to bottom,white 0%,gainsboro 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666!important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:#fff!important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#585858),color-stop(100%,#111));background:-webkit-linear-gradient(top,#585858 0%,#111 100%);background:-moz-linear-gradient(top,#585858 0%,#111 100%);background:-ms-linear-gradient(top,#585858 0%,#111 100%);background:-o-linear-gradient(top,#585858 0%,#111 100%);background:linear-gradient(to bottom,#585858 0%,#111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#2b2b2b),color-stop(100%,#0c0c0c));background:-webkit-linear-gradient(top,#2b2b2b 0%,#0c0c0c 100%);background:-moz-linear-gradient(top,#2b2b2b 0%,#0c0c0c 100%);background:-ms-linear-gradient(top,#2b2b2b 0%,#0c0c0c 100%);background:-o-linear-gradient(top,#2b2b2b 0%,#0c0c0c 100%);background:linear-gradient(to bottom,#2b2b2b 0%,#0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:#fff;background:-webkit-gradient(linear,left top,right top,color-stop(0%,rgba(255,255,255,0)),color-stop(25%,rgba(255,255,255,0.9)),color-stop(75%,rgba(255,255,255,0.9)),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0%,rgba(255,255,255,0.9) 25%,rgba(255,255,255,0.9) 75%,rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing{height:0;overflow:hidden;margin:0!important;padding:0!important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table,.dataTables_wrapper.no-footer div.dataTables_scrollBody table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:.5em}}'); } else{ appendScript('src', 'http://cdn.datatables.net/1.10.1/js/jquery.dataTables.js'); appendCSS('src', 'http://cdn.datatables.net/1.10.1/css/jquery.dataTables.css'); } appendCSS('text', '.odd{background-color:#ffffff} .even{background-color:#E8E8E8}' + '.ui-icon{display:inline-block;}' + ' .tableStateIcon{width: 11px;margin-right:3px}' + '.haveFinalIcon{margin-left:3px;width:14px}'); // styling the table's content appendCSS( 'text', '.tableFinal, .tableComment, .tableWaypoints{margin: 0px;} .tableComment{font-family:monospace;font-size:small} .tableWaypoints{width: 100%}'); // load settings archivedFilter = GM_getValue(SETTING_ARCHIVE_FILTER); if (!archivedFilter) { archivedFilter = ARCHIVE_FILTER_NO_ARCHIVED; GM_setValue(SETTING_ARCHIVE_FILTER, ARCHIVE_FILTER_NO_ARCHIVED); } // add links to each entry on that page addCommentBubblesToPage(); // add overview of all comments on top of page var h2list = document.getElementsByTagName('h2'); if (h2list.length > 0) { var root = h2list[0]; gccRoot = document.createElement('div'); gccRoot.id = "gccRoot"; gccRoot.setAttribute('style', 'outline:1px solid #D7D7D7;margin-bottom:10px;padding:3px;'); root.parentNode.insertBefore(gccRoot, root.nextSibling); var gcclink = document.createElement('a'); gcclink.setAttribute('style', 'cursor:pointer;padding-left:5px;padding-right:5px;margin-left:5px'); gcclink.setAttribute('id', 'configDivButton'); gcclink.setAttribute('title', lang.menu_options); var icon = document.createElement('img'); icon.setAttribute('src', gccIcon); icon.setAttribute('style', 'vertical-align:middle;'); gcclink.appendChild(icon); gccRoot.appendChild(gcclink); gcclink.addEventListener('mouseover', function(evt) { var stats = "GCComment v" + version + "
" + lang.ov_totalamount + " " + getNumberOfComments() + " (" + GM_getValue('countWhite') + " " + lang.type_untyped + ", " + GM_getValue('countRed') + " " + lang.type_unsolved + ", " + GM_getValue('countGreen') + " " + lang.type_solved + ", " + lang.and + " " + GM_getValue('countGray') + " " + lang.type_found + ")
" + lang.ov_amountarchive + " " + GM_getValue('countArchive'); stats = stats + "
" + lang.ov_lastim + ": "; var lastim = GM_getValue(LAST_IMPORT); if (lastim) stats = stats + createTimeString(lastim); else stats = stats + " " + lang.never; stats = stats + "
" + lang.ov_lastex + ": "; var lastex = GM_getValue(LAST_EXPORT); if (lastex) stats = stats + createTimeString(lastex); else stats = stats + " " + lang.never; stats = stats + "
" + lang.ov_lastup + ": "; stats = stats + createTimeString(parseInt(GM_getValue('updateDate'))); unsafeWindow.tooltip.show(stats, 500); }, false); gcclink.addEventListener('mouseup', function(evt) { toggleTabOnProfile('configDiv'); }, false); gcclink.setAttribute('onmouseout', 'tooltip.hide();'); gccRoot.appendChild(document.createTextNode(' | ')); var showCommentsLink = document.createElement('a'); showCommentsLink.setAttribute('id', 'gccommenttabledivButton'); showCommentsLink.appendChild(document.createTextNode(lang.menu_showmycomments)); showCommentsLink.addEventListener('mouseup', function() { toggleTabOnProfile('gccommenttablediv'); }, false); showCommentsLink.setAttribute('style', 'cursor:pointer;text-decoration:none;padding-left:5px;padding-right:5px'); gccRoot.appendChild(showCommentsLink); // ----- displayFilters = document.createElement("div"); displayFilters.style.display = "none"; displayFilters.setAttribute('id', 'displayFilters'); var filterclear = document.createElement('img'); filterclear.setAttribute('src', state_clear); filterclear.setAttribute('style', 'cursor:pointer;vertical-align:bottom'); filterclear.setAttribute('title', lang.table_filter_all); filterclear.addEventListener('mouseup', function() { $('#displayFilters > img').css('opacity', '0.3'); $(filterclear).css('opacity', '1'); filter = null; refreshTable(true); }, false); displayFilters.appendChild(document.createTextNode(' ')); displayFilters.appendChild(filterclear); var filterall = document.createElement('img'); filterall.setAttribute('src', state_default); filterall.setAttribute('style', 'cursor:pointer;vertical-align:bottom'); filterall.setAttribute('title', lang.table_filter_untyped); filterall.addEventListener('mouseup', function() { $('#displayFilters > img').css('opacity', '0.3'); $(filterall).css('opacity', '1'); filter = stateOptions[0]; refreshTable(true); }, false); displayFilters.appendChild(document.createTextNode(' ')); displayFilters.appendChild(filterall); var filterunsolved = document.createElement('img'); filterunsolved.setAttribute('src', state_unsolved); filterunsolved.setAttribute('style', 'cursor:pointer;vertical-align:bottom'); filterunsolved.setAttribute('title', lang.table_filter_unsolved); filterunsolved.addEventListener('mouseup', function() { $('#displayFilters > img').css('opacity', '0.3'); $(filterunsolved).css('opacity', '1'); filter = stateOptions[1]; refreshTable(true); }, false); displayFilters.appendChild(document.createTextNode(' ')); displayFilters.appendChild(filterunsolved); var filtersolved = document.createElement('img'); filtersolved.setAttribute('src', state_solved); filtersolved.setAttribute('style', 'cursor:pointer;vertical-align:bottom'); filtersolved.setAttribute('title', lang.table_filter_solved); filtersolved.addEventListener('mouseup', function() { $('#displayFilters > img').css('opacity', '0.3'); $(filtersolved).css('opacity', '1'); filter = stateOptions[2]; refreshTable(true); }, false); displayFilters.appendChild(document.createTextNode(' ')); displayFilters.appendChild(filtersolved); var filterFound = document.createElement('img'); filterFound.setAttribute('src', state_found); filterFound.setAttribute('style', 'cursor:pointer;vertical-align:bottom'); filterFound.setAttribute('title', lang.table_filter_found); filterFound.addEventListener('mouseup', function() { $('#displayFilters > img').css('opacity', '0.3'); $(filterFound).css('opacity', '1'); filter = stateOptions[3]; refreshTable(true); }, false); displayFilters.appendChild(document.createTextNode(' ')); displayFilters.appendChild(filterFound); var archivedSelector = document.createElement("select"); archivedSelector.setAttribute("id", "archivedSelector"); archivedSelector.setAttribute("style", "margin-left:5px"); archivedSelector.addEventListener('change', function() { var indexSelected = $('#archivedSelector option:selected').index(); if (indexSelected === 0) { archivedFilter = ARCHIVE_FILTER_NO_ARCHIVED; } else if (indexSelected === 1) { archivedFilter = ARCHIVE_FILTER_INCLUDE_ARCHIVED; } else if (indexSelected === 2) { archivedFilter = ARCHIVE_FILTER_ONLY_ARCHIVED; } else { log("error", "unknown archive filter selector: " + indexSelected); } GM_setValue(SETTING_ARCHIVE_FILTER, archivedFilter); refreshTable(true); }); displayFilters.appendChild(archivedSelector); var optionNoArchived = document.createElement("option"); optionNoArchived.appendChild(document.createTextNode(lang.archived_filter_no_archived)); archivedSelector.appendChild(optionNoArchived); var optionIncludeArchived = document.createElement("option"); optionIncludeArchived.appendChild(document.createTextNode(lang.archived_filter_include_archived)); archivedSelector.appendChild(optionIncludeArchived); var optionOnlyArchived = document.createElement("option"); optionOnlyArchived.appendChild(document.createTextNode(lang.archived_filter_only_archived)); archivedSelector.appendChild(optionOnlyArchived); // pre-set from settings if (archivedFilter === ARCHIVE_FILTER_INCLUDE_ARCHIVED) { optionIncludeArchived.setAttribute("selected", "true"); } else if (archivedFilter === ARCHIVE_FILTER_ONLY_ARCHIVED) { optionOnlyArchived.setAttribute("selected", "true"); } gccRoot.appendChild(displayFilters); $('#displayFilters > img').css('opacity', '0.3'); $(filterclear).css('opacity', '1'); // ------ gccRoot.appendChild(document.createTextNode(' | ')); var exportToggleButton = document.createElement('a'); exportToggleButton.setAttribute('id', 'exportDivButton'); exportToggleButton.appendChild(document.createTextNode(lang.menu_export)); exportToggleButton.setAttribute('style', 'cursor:pointer;text-decoration:none;padding-left:5px;padding-right:5px'); exportToggleButton.addEventListener('mouseup', function() { toggleTabOnProfile('exportDiv'); }, false); gccRoot.appendChild(exportToggleButton); gccRoot.appendChild(document.createTextNode(' ')); gccRoot.appendChild(document.createTextNode(' | ')); var importLink = document.createElement('a'); importLink.setAttribute('id', 'importDivButton'); importLink.appendChild(document.createTextNode(lang.menu_import)); importLink.addEventListener('mouseup', function() { toggleTabOnProfile('importDiv'); }, false); importLink .setAttribute('style', 'cursor:pointer;text-decoration:none;padding-left:5px;padding-right:5px'); gccRoot.appendChild(importLink); gccRoot.appendChild(document.createTextNode(' | ')); var deleteAllLink = document.createElement('a'); deleteAllLink.setAttribute('id', 'deleteAllDivButton'); deleteAllLink.appendChild(document.createTextNode(lang.menu_delete)); deleteAllLink.addEventListener('mouseup', function() { toggleTabOnProfile('deleteAllDiv'); }, false); deleteAllLink.setAttribute('style', 'cursor:pointer;text-decoration:none;padding-left:5px;padding-right:5px'); gccRoot.appendChild(deleteAllLink); // // PATCH DIV // if (unsafeWindow.File && unsafeWindow.FileReader && unsafeWindow.FileList && unsafeWindow.Blob) { gccRoot.appendChild(document.createTextNode(' | ')); var patchGPXLink = document.createElement('a'); patchGPXLink.setAttribute('id', 'patchDivButton'); patchGPXLink.appendChild(document.createTextNode(lang.menu_patchgpx)); patchGPXLink.addEventListener('mouseup', function() { toggleTabOnProfile('patchDiv'); }, false); patchGPXLink.setAttribute('style', 'cursor:pointer;text-decoration:none;padding-left:5px;padding-right:5px'); gccRoot.appendChild(patchGPXLink); patchDiv = document.createElement('div'); patchDiv.setAttribute('id', 'patchDiv'); patchDiv.setAttribute('style', 'margin:5px;padding:10px;outline:1px solid #D7D7D7;position:relative;background-color:#EBECED'); patchDiv.style.display = 'none'; gccRoot.appendChild(patchDiv); var patchDivExplanation = document.createElement('p'); patchDivExplanation.appendChild(document.createTextNode(lang.patchgpx_explain)); patchDiv.appendChild(patchDivExplanation); var removeUnusedDiv = document.createElement('div'); removeUnusedDiv.setAttribute('id', 'removeUnusedDiv'); removeUnusedDiv.setAttribute('style', 'margin-left:20px'); appendCheckBox(removeUnusedDiv, PATCHGPX_REMOVE_OTHERS, lang.patchgpx_filter_nogcc); appendCheckBox(removeUnusedDiv, PATCHGPX_REMOVE_DEFAULTTYPE, lang.patchgpx_filter_markeddefaulttype); appendCheckBox(removeUnusedDiv, PATCHGPX_REMOVE_UNSOLVED, lang.patchgpx_filter_markednotsolved); appendCheckBox(removeUnusedDiv, PATCHGPX_REMOVE_SOLVED, lang.patchgpx_filter_markedsolved); appendCheckBox(removeUnusedDiv, PATCHGPX_REMOVE_FOUND, lang.patchgpx_filter_markfound); var removeUnused = document.createElement('p'); removeUnused.appendChild(document.createTextNode(lang.patchgpx_remove)); removeUnused.appendChild(removeUnusedDiv); patchDiv.appendChild(removeUnused); appendCheckBox(removeUnused, PATCHGPX_CHANGEORIGINAL, lang.patchgpx_changeorig); appendCheckBox(removeUnused, PATCHGPX_ADDFINALWPT, lang.patchgpx_addwptforfinal); appendCheckBox(removeUnused, PATCHGPX_STRIP_EMOJIS, lang.patchgpx_stripemojis); // appendCheckBox(removeUnused, PATCHGPX_STRIP_HTML_TAGS, // lang.patchgpx_striphtmltags); var input = document.createElement('input'); input.setAttribute('id', 'patchgpxinput'); input.setAttribute('name', 'files[]'); input.setAttribute('type', 'file'); input.setAttribute('style', 'margin:3px'); input.addEventListener('change', function(evt) { var files = evt.target.files; var file = files[0]; var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { handleGPXFileSelected(file.name, e.target.result); }; })(file); if (file.name.indexOf('.gpx') > 0) { reader.readAsText(file); } }, false); patchDiv.appendChild(input); download = document.createElement('input'); download.setAttribute('type', 'button'); download.setAttribute('id', 'patchndownload'); download.setAttribute('style', 'margin:3px'); download.setAttribute('value', lang.patchgpx_perform); download.setAttribute('disabled', ''); patchDiv.appendChild(download); var patchResultDiv = document.createElement('div'); patchResultDiv.setAttribute('id', 'patchResultDiv'); patchDiv.appendChild(patchResultDiv); } // // CONFIG DIV // configDiv = document.createElement('div'); configDiv.setAttribute('id', 'configDiv'); configDiv.setAttribute('style', 'margin:5px;padding:10px;outline:1px solid #D7D7D7;position:relative;background-color:#EBECED'); configDiv.style.display = 'none'; var gccintro = document.createElement('p'); gccintro.setAttribute('style', 'width:600px'); gccintro.innerHTML = lang.settings_intro; configDiv.appendChild(gccintro); var paypallink = document.createElement('a'); paypallink.setAttribute('style', 'position:absolute;left:650px;top:10px;text-align:center;text-decoration:none;'); paypallink.setAttribute('href', 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3RG7N2ELTYRX4'); paypallink.setAttribute('target', 'blank'); paypallink.appendChild(document.createTextNode(lang.settings_feelfree)); paypallink.appendChild(document.createElement('br')); var paypalImg = document.createElement('img'); paypalImg.setAttribute('src', 'https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif'); paypallink.appendChild(paypalImg); paypallink.appendChild(document.createElement('br')); paypallink.appendChild(document.createTextNode(lang.thank_you)); configDiv.appendChild(paypallink); appendCheckBox(configDiv, ENABLE_EXPORT, lang.settings_allowExport); appendCheckBox(configDiv, LAZY_TABLE_REFRESH, lang.settings_lazyTable); appendCheckBox(configDiv, AUTO_UPDATE_GS_FINAL, lang.settings_syncWithGS); appendCheckBox(configDiv, AUTO_UPLOAD_CACHE_NOTES, lang.settings_saveCacheNotes); configDiv.appendChild(document.createTextNode(lang.settings_language + ":")); var languageSelector = document.createElement('select'); languageSelector.setAttribute("name", "languageSelector"); languageSelector.setAttribute("id", "languageSelector"); languageSelector.setAttribute('size', 1); languageSelector.setAttribute('style', "margin-left:5px;"); languageSelector.addEventListener('change', function() { GM_setValue(SETTINGS_LANGUAGE, $('#languageSelector option:selected').text()); // showSuccessIcon(languageSelector); }); var option0 = document.createElement('option'); option0.appendChild(document.createTextNode(SETTINGS_LANGUAGE_AUTO)); var option1 = document.createElement('option'); option1.appendChild(document.createTextNode(SETTINGS_LANGUAGE_EN)); var option2 = document.createElement('option'); option2.appendChild(document.createTextNode(SETTINGS_LANGUAGE_DE)); languageSelector.appendChild(option0); languageSelector.appendChild(option1); languageSelector.appendChild(option2); var langsetting = GM_getValue(SETTINGS_LANGUAGE); if (langsetting === SETTINGS_LANGUAGE_EN) option1.setAttribute('selected', 'true'); else if (langsetting === SETTINGS_LANGUAGE_DE) option2.setAttribute('selected', 'true'); else option0.setAttribute('selected', 'true'); configDiv.appendChild(languageSelector); gccRoot.appendChild(configDiv); // // gccommenttablediv // var tableDiv = document.createElement('div'); tableDiv.setAttribute('id', 'gccommenttablediv'); tableDiv .setAttribute( 'style', 'margin: 5px; padding: 4px; outline: 1px solid rgb(215, 215, 215); position: relative; background-color: rgb(235, 236, 237);display:none'); gccRoot.appendChild(tableDiv); // // EXPORT DIV // exportDiv = document.createElement('div'); exportDiv.setAttribute('id', 'exportDiv'); exportDiv.setAttribute('style', 'margin:5px;padding:10px;outline:1px solid #D7D7D7;position:relative;background-color:#EBECED'); exportDiv.style.display = 'none'; exportDiv.appendChild(document.createTextNode(lang.export_step1)); var exportFilterDiv = document.createElement('div'); appendCheckBox(exportFilterDiv, EXPORT_FILTER_ALL, lang.all, toggleExportFilterOptions); appendCheckBox(exportFilterDiv, EXPORT_FILTER_UNTYPED, lang.type_untyped); appendCheckBox(exportFilterDiv, EXPORT_FILTER_UNSOLVED, lang.type_unsolved); appendCheckBox(exportFilterDiv, EXPORT_FILTER_SOLVED, lang.type_solved); appendCheckBox(exportFilterDiv, EXPORT_FILTER_FOUND, lang.type_found); exportFilterDiv.appendChild(document.createElement('br')); exportFilterDiv.appendChild(document.createTextNode(lang.export_step2)); exportFilterDiv.appendChild(document.createElement('br')); appendRadioGroup(exportFilterDiv, EXPORT_FILTER_ARCHIVE, [ { label : lang.both, attr : EXPORT_FILTER_ARCHIVE_BOTH }, { label : lang.not_archived, attr : EXPORT_FILTER_ARCHIVE_NOT_ARCHIVED }, { label : lang.archived, attr : EXPORT_FILTER_ARCHIVE_ARCHIVED } ], GM_getValue(EXPORT_FILTER_ARCHIVE, EXPORT_FILTER_ARCHIVE_BOTH)); exportDiv.appendChild(exportFilterDiv); exportFilterDiv.appendChild(document.createElement('br')); var exportTypeDiv = document.createElement('div'); exportTypeDiv.appendChild(document.createTextNode(lang.export_step3)); var exportTypeSelector = document.createElement('select'); exportTypeSelector.setAttribute("name", "exportTypeSelector"); exportTypeSelector.setAttribute("id", "exportTypeSelector"); exportTypeSelector.setAttribute('size', 1); var option0 = document.createElement('option'); option0.appendChild(document.createTextNode("GCC")); var option1 = document.createElement('option'); option1.appendChild(document.createTextNode("GPX")); var option2 = document.createElement('option'); option2.appendChild(document.createTextNode("CSV")); var option3 = document.createElement('option'); option3.appendChild(document.createTextNode("HTML")); var option4 = document.createElement('option'); option4.appendChild(document.createTextNode("KML")); var option5 = document.createElement('option'); option5.appendChild(document.createTextNode("JSON")); exportTypeSelector.appendChild(option0); exportTypeSelector.appendChild(option1); exportTypeSelector.appendChild(option2); exportTypeSelector.appendChild(option3); exportTypeSelector.appendChild(option4); exportTypeSelector.appendChild(option5); exportTypeDiv.appendChild(exportTypeSelector); exportDiv.appendChild(exportTypeDiv); var explainP = document.createElement('p'); explainP.setAttribute('style', 'margin-top:1.5em'); explainP.appendChild(document.createTextNode(lang.export_explain)); exportDiv.appendChild(explainP); var exportButton = document.createElement('input'); exportButton.setAttribute('type', 'button'); exportButton.setAttribute('value', lang.export_perform); exportButton.addEventListener('click', performFilteredExport, false); exportButton.setAttribute('style', 'margin:5px'); exportDiv.appendChild(exportButton); exportDropboxButton = document.createElement('input'); exportDropboxButton.setAttribute('type', 'button'); exportDropboxButton.setAttribute('value', lang.export_toDropboxPerformFilteredExport); exportDropboxButton.addEventListener('click', performFilteredDropboxExport, false); exportDropboxButton.setAttribute('style', 'margin:5px'); exportDiv.appendChild(exportDropboxButton); dropboxExportLink = document.createElement('input'); dropboxExportLink.setAttribute('type', 'button'); dropboxExportLink.setAttribute('style', 'margin:5px'); dropboxExportLink.setAttribute('value', lang.export_toDropbox); dropboxExportLink.addEventListener('mouseup', storeToDropbox, false); exportDiv.appendChild(dropboxExportLink); gccRoot.appendChild(exportDiv); // // IMPORT DIV // importDiv = document.createElement('div'); importDiv.setAttribute('id', 'importDiv'); importDiv.setAttribute('style', 'margin:5px;padding:10px;outline:1px solid #D7D7D7;position:relative;background-color:#EBECED'); importDiv.style.display = 'none'; gccRoot.appendChild(importDiv); var importDivExplanation = document.createElement('p'); importDivExplanation.appendChild(document.createTextNode(lang.import_explain)); importDiv.appendChild(importDivExplanation); if (unsafeWindow.File && unsafeWindow.FileReader && unsafeWindow.FileList && unsafeWindow.Blob) { var input = document.createElement('input'); input.setAttribute('id', 'fileinput'); input.setAttribute('name', 'files[]'); input.setAttribute('type', 'file'); importDiv.appendChild(document.createTextNode(lang.import_choose)); importDiv.appendChild(input); document.getElementById('fileinput').addEventListener('change', function(evt) { var files = evt.target.files; var file = files[0]; var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { importText.value = e.target.result; }; })(file); if (file.name.indexOf('.gcc') > 0) reader.readAsText(file); }, false); } importDiv.appendChild(document.createElement('br')); dropboxCheck = document.createElement('input'); dropboxCheck.setAttribute('type', 'button'); dropboxCheck.setAttribute('value', lang.import_fromDropboxCheckForFiles); dropboxCheck.addEventListener('mouseup', checkDropbox, false); importDiv.appendChild(dropboxCheck); dropboxSelect = document.createElement('select'); dropboxSelect.setAttribute('id', 'dropboxSelect'); importDiv.appendChild(dropboxSelect); dropboxImportLink = document.createElement('input'); dropboxImportLink.setAttribute('id', 'dropboxImportLink'); dropboxImportLink.setAttribute('disabled', 'disabled'); dropboxImportLink.setAttribute('type', 'button'); dropboxImportLink.setAttribute('value', lang.import_fromDropbox); dropboxImportLink.addEventListener('mouseup', loadFromDropbox, false); importDiv.appendChild(dropboxImportLink); importText = document.createElement('textarea'); importText.setAttribute('id', 'gccommentimporttextarea'); importText.cols = 100; importText.rows = 10; importDiv.appendChild(importText); var submitImport = document.createElement('input'); submitImport.setAttribute('type', 'button'); submitImport.setAttribute('value', lang.import_perform); submitImport.setAttribute('style', 'margin:5px'); submitImport.addEventListener('mouseup', performImport, false); importDiv.appendChild(document.createElement('br')); importDiv.appendChild(submitImport); var cancelImport = document.createElement('input'); cancelImport.setAttribute('type', 'button'); cancelImport.setAttribute('value', lang.import_close); cancelImport.addEventListener('mouseup', function() { importresult.innerHTML = ""; toggleTabOnProfile('importDiv'); }, false); cancelImport.setAttribute('style', 'margin:5px'); importDiv.appendChild(document.createTextNode('\t')); importDiv.appendChild(cancelImport); importresult = document.createElement('p'); submitImport.parentNode.appendChild(importresult); // // DELETE DIV // deleteAllDiv = document.createElement('div'); deleteAllDiv.setAttribute('id', 'deleteAllDiv'); deleteAllDiv.setAttribute('style', 'margin:5px;padding:10px;outline:1px solid #D7D7D7;position:relative;background-color:#EBECED'); deleteAllDiv.style.display = 'none'; deleteAllDiv.appendChild(document.createTextNode(lang.delete_select)); deleteAllDiv.appendChild(document.createElement('br')); appendCheckBox(deleteAllDiv, DELETEALL_FILTER_ALL, lang.all, toggleDeleteAllFilterOptions); appendCheckBox(deleteAllDiv, DELETEALL_FILTER_UNTYPED, lang.type_untyped); appendCheckBox(deleteAllDiv, DELETEALL_FILTER_UNSOLVED, lang.type_unsolved); appendCheckBox(deleteAllDiv, DELETEALL_FILTER_SOLVED, lang.type_solved); appendCheckBox(deleteAllDiv, DELETEALL_FILTER_FOUND, lang.type_found); // appendCheckBox(deleteAllDiv, DELETEALL_FILTER_ARCHIVED, // lang.type_archived); appendRadioGroup(deleteAllDiv, DELETEALL_FILTER_ARCHIVED, [ { label : lang.both, attr : DELETEALL_FILTER_ARCHIVED_BOTH }, { label : lang.not_archived, attr : DELETEALL_FILTER_ARCHIVED_NOT_ARCHIVED }, { label : lang.archived, attr : DELETEALL_FILTER_ARCHIVED_ARCHIVED } ], GM_getValue(DELETEALL_FILTER_ARCHIVED, DELETEALL_FILTER_ARCHIVED_BOTH)); var deleteAllButton = document.createElement('input'); deleteAllButton.setAttribute('type', 'button'); deleteAllButton.setAttribute('value', lang.delete_perform); deleteAllButton.addEventListener('click', performFilteredDeleteAll, false); deleteAllDiv.appendChild(deleteAllButton); deleteAllResult = document.createElement('div'); deleteAllDiv.appendChild(deleteAllResult); gccRoot.appendChild(deleteAllDiv); waitingTag = document.createElement('img'); waitingTag.setAttribute('src', waitingGif); waitingTag.setAttribute('id', 'waiting'); waitingTag.setAttribute('style', 'padding-right:5px'); if (GM_getValue(EXPORT_FILTER_ALL)) toggleExportFilterOptions(); if (GM_getValue(DELETEALL_FILTER_ALL)) toggleDeleteAllFilterOptions(); } } function checkDropbox() { doDropboxAction(function(client) { dropboxExportLink.parentNode.insertBefore(waitingTag, dropboxExportLink); waitingTag.setAttribute('style', 'display:inline'); waitingTag.setAttribute('src', waitingGif); client.readdir("/", function(error, directoryEntries) { if (error) { waitingTag.setAttribute("src", errorIcon); log("debug", error); // Something went wrong. client.signOut(function(error) { checkDropbox(); }); return; } waitingTag.setAttribute("src", successIcon); setTimeout(function() { $("#waiting").fadeOut('slow', function() { }); }, 5000); $('#dropboxSelect').empty(); if (directoryEntries.length > 0) $('#dropboxImportLink').removeAttr('disabled'); var filteredDirectoryEntries = new Array(); for (var index = 0; index < directoryEntries.length; index++) { var gccMatch = directoryEntries[index].match(/\.gcc$/); if (gccMatch) filteredDirectoryEntries.push(directoryEntries[index]); } filteredDirectoryEntries.sort().reverse(); for (var count = 0; count < filteredDirectoryEntries.length; count++) { $('#dropboxSelect').append(''); } log("debug", "reading dir entries on dropbox successful"); }); }); } function storeToDropbox() { doDropboxAction(function(client) { dropboxExportLink.parentNode.insertBefore(waitingTag, dropboxExportLink); waitingTag.setAttribute('style', 'display:inline'); waitingTag.setAttribute('src', waitingGif); client.writeFile("" + createTimeString(new Date(), true) + "_backup-all.gcc", xmlversion + buildGCCExportString(false), function(error, stat) { if (error) { waitingTag.setAttribute("src", errorIcon); log("debug", error); // Something went wrong. client.signOut(function(error) { storeToDropbox(); }); return; } waitingTag.setAttribute("src", successIcon); setTimeout(function() { window.$("#waiting").fadeOut('slow', function() { }); }, 5000); log("debug", "Export to dropbox successful"); }); }); } function loadFromDropbox() { doDropboxAction(function(client) { dropboxImportLink.parentNode.insertBefore(waitingTag, dropboxImportLink); waitingTag.setAttribute('style', 'display:inline'); waitingTag.setAttribute('src', waitingGif); var select = document.getElementById('dropboxSelect'); var fileName = select.options[select.selectedIndex].text; client.readFile(fileName, function(error, data) { if (error) { waitingTag.setAttribute("src", errorIcon); log("debug", error); // Something went wrong. client.signOut(function(error) { loadFromDropbox(); }); return; } waitingTag.setAttribute("src", successIcon); setTimeout(function() { $("#waiting").fadeOut('slow', function() { }); }, 5000); importText.value = data; }); }); } function doDropboxAction(fnOnSuccess) { log("debug", "Creating DB client"); var client = new Dropbox.Client({ key : "xb38rim9eiyriq7", sandbox : true }); log("debug", "Defining Redirect Authdriver"); client.authDriver(new Dropbox.AuthDriver.Redirect({ rememberUser : true, redirectUrl : "https://www.geocaching.com/my/default.aspx" })); log("debug", "Trying non interactive auth"); client.authenticate({ interactive : false }, function(noninteractiveerror, client) { if (noninteractiveerror) { log("debug", 'There was an error during non interactive auth: ' + JSON.stringify(noninteractiveerror)); } log("debug", "non interactive auth result: " + client.isAuthenticated()); if (client.isAuthenticated()) { log("debug", "Non interactive auth success."); fnOnSuccess(client); } else { log("debug", "non interactive auth failed. trying interactive auth"); client.reset(); client.authenticate(function(interactiveerror, client) { if (interactiveerror) { log("debug", 'There was an error during interactive auth: ' + JSON.stringify(interactiveerror)); } console.log("interactive auth result: " + client.isAuthenticated()); if (client.isAuthenticated()) { log("debug", "Interactive auth success."); fnOnSuccess(client); } }); } }); } function toggleExportFilterOptions() { if (GM_getValue(EXPORT_FILTER_ALL)) { $('#EXPORT_FILTER_UNTYPED').attr('disabled', 'disabled'); $('#EXPORT_FILTER_UNSOLVED').attr('disabled', 'disabled'); $('#EXPORT_FILTER_SOLVED').attr('disabled', 'disabled'); $('#EXPORT_FILTER_FOUND').attr('disabled', 'disabled'); } else { $('#EXPORT_FILTER_UNTYPED').removeAttr('disabled'); $('#EXPORT_FILTER_UNSOLVED').removeAttr('disabled'); $('#EXPORT_FILTER_SOLVED').removeAttr('disabled'); $('#EXPORT_FILTER_FOUND').removeAttr('disabled'); } } function toggleDeleteAllFilterOptions() { if (GM_getValue(DELETEALL_FILTER_ALL)) { $('#DELETEALL_FILTER_UNTYPED').attr('disabled', 'disabled'); $('#DELETEALL_FILTER_UNSOLVED').attr('disabled', 'disabled'); $('#DELETEALL_FILTER_SOLVED').attr('disabled', 'disabled'); $('#DELETEALL_FILTER_FOUND').attr('disabled', 'disabled'); } else { $('#DELETEALL_FILTER_UNTYPED').removeAttr('disabled'); $('#DELETEALL_FILTER_UNSOLVED').removeAttr('disabled'); $('#DELETEALL_FILTER_SOLVED').removeAttr('disabled'); $('#DELETEALL_FILTER_FOUND').removeAttr('disabled'); } } function performFilteredDeleteAll() { var check = confirm(lang.delete_confirmation); if (check) { var keys = GM_listValues(); // log("info", "all keys: " + keys); var resultRemoved = "