Greasy Fork is available in English.
Track UR and MP in the Waze Map Editor
// ==UserScript== // @name WME UR-MP tracking // @version 3.9.1 // @description Track UR and MP in the Waze Map Editor // @namespace https://greasyfork.org/fr/scripts/368141-wme-ur-mp-tracking // @include https://www.waze.com/editor* // @include https://www.waze.com/*/editor* // @include https://beta.waze.com/editor* // @include https://beta.waze.com/*/editor* // @exclude https://www.waze.com/user/* // @exclude https://www.waze.com/*/user/* // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94DDwolKCvyQLIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAGcElEQVRYw82Xf1BU1xXHv/e9t7DsLiy6uwYEZBVYNGi7gwnYNpk6kx9TrcZJGe0v/cOONkPTJuMYJk5NGxUcp9ohOqZDU5wxk+CMQrEZneIv0Pwgmk6LElJKRECJbBaVZdld2F/33Xv6h0JqY/ghGSdn5s67950z53zeOWfuvQ+YhvT399/1/EZIVVXVlOzZZA07OjqwYMGCsfWKFSsKvF7vHCmlQVEU3eFw/PvkyZOfjepramqwdu3ar+erjh49OjZft25dmsvl+lOey3Uj1zV/OCd//kiOK38kNy/v8/z8/LqlS5cWjtpu2rTp68sAACxZsqTE5/O9ZdRU05wkBQ8nq7AlKBTUCe1Bwa6FBcJCxpItlt0bN24sLy0t5bW1tVizZs30AOrq6lhFefnPQpHoG3kWzfzTzEQqmqHBqDIm6bYTnYDWgE6H+2KsLaBzi8n40vPP/2r/9u07yOPxfKVvdTIAfX193/KHRt6Ya1Yf2ppvooctCuOxGOO6hFQ0xONxCB7HbHMCW5yq0fWIVK+GYoU93d0ftLe3exoaGnDo0KGpA1y8eBE9PT0JwyMjv4tFo0+9Ot+MLJPCyGxF2s83Q5s5C+ErbUhd8hTsqzZguONfSJAc6YkKuxjQLcFIPOvmzRs1LpfrK2Mo4wEUFhbC7XY7wrH4skdmGJBlUkgSwTAzDcmLv4+MDa9g9i9+i4zSCsx4/IdQLakAgeVYNMy3aIjz+BO7du3KHi+GMlH6A4FAciQay15k1aAxMIAh2nsZA8ffhIxHYXv6x2Cqhv7D+8EH+kGMIUkBnCaVVAatpaXl2WkBhMNhIiKYVQZltGUZA8VjANGdF/RFS9+ZmlUGBQyBQIBNC8DhcJBB06QnIqHfcW6ckwfHsxuhJCZhsLEOJHSk/eQ3SLClASAQAG9MMJ0ITqezf1oAnZ2dfcYEw4kPBzkicQJJID5wA6GPP0Tfn7fDU12B669vhf/9v4MH/IAEbkUlXRkWAGPe6urqvwEAjWVrCgDd3d0oKCiIWkxJZzxRIc/74oAuER0cxNV9W3Hz1F8hYMBg82n07NmMWCAEziV9MsTZtbCAyWTaxRiL3q4amzpATk4Odu/eLU0m07FEVf24tp9jKKaTlAQyGCFVDboQEIoGSkyCLiXCXODULY6IoE8cdvsRAGhtbb3/EgDA2bNnrzLIPwzEZfjIDc5UIaHr9KUhBeGfQ5xdCukwJxn/smjhwlsA4Ha77x/g4MGDAIBPOz49ojK0vTsk0RYURLqAzr8YggsEozod8AokGbTWWQ5HQ+Vrr9FE/icEWL9+PUZrmO10vhoXMlTrE8wflaRzCc4ldC4R45Kq+gWLEIWtKSl7m5qaeiaT3QkBfD4f9uzZAwA4ferUaavVWnk5LNAUEIwLASEEpBA4MyTxnwjBwNjbFy5cqJnsCTshgM1mQ1lZ2dj6xRdfOJCSktJ5IgR0hwmSS3SFJZpGiEkiWVFR8RZjTIzat7S03N99oL6+HiUlJaivr1cqKyuX+gf9z2mqmkKAFo1G3JIpdpuB4YUUicPDDB2cQcbiItVqfVfXdZ3r+vn02el7z507F7xzoiIzM3NyAI1NjXjyiScBAO5vuwu8Xm9TmnPuQ9YZqSACNIMGHgmTt8/D7BowoBPSMzNJMyYxoQsQEXo7L0NyXr169eqyvfv2BkbLabPZxgc4fvw4Vq5ceXsfmJeTPTAwcMj9ne9+b/3LLyPZaiWAGJiC4cAQDpSXw9N7DelZWVi7+SXMmp0BgMAUhdrOn2dVO3YARLWlvy59btvvtw1N6R5YXFScbU2xXlq18hnyDQ5STBcyyjmNDi4ldXZ2UnFxMZ1pbCQuJd2lF0L+46OPaJ5zXtxus5cT0fj91tvbOzYverTIaZtpa3Y/8ij13BqQfYEAfeb3f2l4gkG6dKWLPIHgPfWfB0N04v0PKCMjU8x1zt1W8qMSAwCsembV3SXo6upCbm4uAGDZD5altrS0HDGazU9v2PoKrA4HhJC411ZOBKiqAinlPT+KCFAU0HvvvMPeO3ZsKDEx8Zfefm8dACxfvhwNDQ1390BxUfGC9vb2PyqKstxsscBosYAkYTrCGCClRNDvh9D1GBGVhYZD+0f12v8aP/b4Y4sXLlrYBWDfeEfo/YEwAGCapjnsdnvWzp07r48pm5ubH/gv3JYtW/6/XvTAgj/IWN98+S9tiGRBMpU45gAAAABJRU5ErkJggg== // @grant GM_getValue // @grant GM_setValue // @grant GM_xmlhttpRequest // @grant unsafeWindow // @copyright 2017, dummyd2, seb-d59 // @author dummyd2, seb-d59 // @connect seb.d59.waze.free.fr // ==/UserScript== /******* * * You are free to: * Share, copy, and redistribute the script in any medium or format * under the following terms: * Attribution - You must give appropriate credit. You may do so in any * reasonable manner, but not in any way that suggests the licensor * endorses you or your use. * * NonCommercial - You may not use the script for commercial purposes. * * NoModifications - You may NOT MODIFY the script. * * You are invited to contact the author: dummyd2 on waze forum for more details. * ********/ function downloadHelperInjected() { window.downloadHelper = {jobs:[], _waitForData:function(id) { if (this.jobs.length <= id) { this.jobs[id].callback({url:null, data:null, callback:this.jobs[id].callback, status:"error", error:"Request not found"}); } else { if (this.jobs[id].status == "success" || this.jobs[id].status == "error") { this.jobs[id].callback(this.jobs[id]); } else { if (this.jobs[id].status == "downloading" && this.jobs[id].progressCallback) { this.jobs[id].progressCallback(this.jobs[id]); } var _this = this; window.setTimeout(function() { _this._waitForData(id); }, 500); } } }, add:function(url, callback, progressCallback) { this.jobs.push({url:url, data:null, callback:callback, progressCallback:progressCallback, status:"added", progression:0, error:""}); var _this = this; window.setTimeout(function() { _this._waitForData(_this.jobs.length - 1); }, 500); }}; } var downloadHelperInjectedScript = document.createElement("script"); downloadHelperInjectedScript.textContent = "" + downloadHelperInjected.toString() + " \n" + "downloadHelperInjected();"; downloadHelperInjectedScript.setAttribute("type", "application/javascript"); document.body.appendChild(downloadHelperInjectedScript); if (typeof unsafeWindow === "undefined") { unsafeWindow = function() { var dummyElem = document.createElement("p"); dummyElem.setAttribute("onclick", "return window;"); return dummyElem.onclick(); }(); } function lookFordownloadHelperJob() { for (var i = 0; i < unsafeWindow.downloadHelper.jobs.length; i++) { if (unsafeWindow.downloadHelper.jobs[i].status == "added") { unsafeWindow.downloadHelper.jobs[i].status = cloneInto("downloading", unsafeWindow.downloadHelper.jobs[i]); var f = function() { var job = i; GM_xmlhttpRequest({method:"GET", headers:{"User-Agent":"Mozilla/5.0", "Accept":"text/plain"}, synchronous:false, timeout:10000, url:unsafeWindow.downloadHelper.jobs[job].url, onerror:function(r) { unsafeWindow.downloadHelper.jobs[job].status = cloneInto("error", unsafeWindow.downloadHelper.jobs[job]); }, ontimeout:function(r) { console.debug("TOTO Timeout while getting area from server: ", r); unsafeWindow.downloadHelper.jobs[job].status = cloneInto("error", unsafeWindow.downloadHelper.jobs[job]); }, onload:function(r) { unsafeWindow.downloadHelper.jobs[job].status = cloneInto("success", unsafeWindow.downloadHelper.jobs[job]); unsafeWindow.downloadHelper.jobs[job].data = cloneInto(r.responseText, unsafeWindow.downloadHelper.jobs[job]); }, onprogress:function(r) { unsafeWindow.downloadHelper.jobs[job].progression = cloneInto(r.total == 0 ? 0 : r.loaded / r.total, unsafeWindow.downloadHelper.jobs[job]); }}); }(); } } window.setTimeout(lookFordownloadHelperJob, 2000); } window.setTimeout(lookFordownloadHelperJob); function GMStorageHelperInjected() { window.GMStorageHelper = {jobs:[], _waitForData:function(id) { if (this.jobs.length <= id) { if (this.jobs[id].callback) { this.jobs[id].callback({entry:null, data:null, callback:this.jobs[id].callback, status:"error", error:"Request not found"}); } } else { if (this.jobs[id].status == "done") { if (this.jobs[id].callback) { this.jobs[id].callback(this.jobs[id]); } } else { var _this = this; window.setTimeout(function() { _this._waitForData(id); }, 500); } } }, load:function(entry, callback) { this.jobs.push({task:"load", entry:entry, data:null, callback:callback, status:"added", error:""}); var _this = this; var jobId = this.jobs.length - 1; window.setTimeout(function() { _this._waitForData(jobId); }, 500); }, save:function(entry, data, callback) { this.jobs.push({task:"save", entry:entry, data:data, callback:callback, status:"added", error:""}); var _this = this; var jobId = this.jobs.length - 1; window.setTimeout(function() { _this._waitForData(jobId); }, 500); }}; } var GMStorageHelperInjectedScript = document.createElement("script"); GMStorageHelperInjectedScript.textContent = "" + GMStorageHelperInjected.toString() + " \n" + "GMStorageHelperInjected();"; GMStorageHelperInjectedScript.setAttribute("type", "application/javascript"); document.body.appendChild(GMStorageHelperInjectedScript); if (typeof unsafeWindow === "undefined") { unsafeWindow = function() { var dummyElem = document.createElement("p"); dummyElem.setAttribute("onclick", "return window;"); return dummyElem.onclick(); }(); } function lookForGMStorageHelperJob() { for (var i = 0; i < unsafeWindow.GMStorageHelper.jobs.length; i++) { if (unsafeWindow.GMStorageHelper.jobs[i].status == "added") { if (unsafeWindow.GMStorageHelper.jobs[i].task == "load") { unsafeWindow.GMStorageHelper.jobs[i].data = cloneInto(GM_getValue(unsafeWindow.GMStorageHelper.jobs[i].entry, null), unsafeWindow.GMStorageHelper.jobs[i]); } if (unsafeWindow.GMStorageHelper.jobs[i].task == "save") { GM_setValue(unsafeWindow.GMStorageHelper.jobs[i].entry, unsafeWindow.GMStorageHelper.jobs[i].data); unsafeWindow.GMStorageHelper.jobs[i].data = cloneInto(null, unsafeWindow.GMStorageHelper.jobs[i]); } unsafeWindow.GMStorageHelper.jobs[i].status = cloneInto("done", unsafeWindow.GMStorageHelper.jobs[i]); } } window.setTimeout(lookForGMStorageHelperJob, 2000); } window.setTimeout(lookForGMStorageHelperJob); function WMEURMPT_Injected() { var WMEURMPT = {}; WMEURMPT.isDebug = true; WMEURMPT.urmpt_version = "3.9.1"; WMEURMPT.URList = []; WMEURMPT.URMap = {}; WMEURMPT.MPList = []; WMEURMPT.MPMap = {}; WMEURMPT.MCList = []; WMEURMPT.MCMap = {}; WMEURMPT.PURList = []; WMEURMPT.PURMap = {}; WMEURMPT.stackedURList = []; WMEURMPT.stackedUR = {id:0, oriX:0, oriY:0}; WMEURMPT.dom = {}; WMEURMPT.driveArea = []; WMEURMPT.managedAreas = []; WMEURMPT.sortModeListUR = {ageASC:1, ageDSC:-1, typeASC:2, typeDSC:-2, commentCountASC:3, commentCountDSC:-3, distanceASC:4, distanceDSC:-4, lastCommentASC:5, lastCommentDSC:-5}; WMEURMPT.sortModeListMP = {priorityASC:1, priorityDSC:-1, typeASC:2, typeDSC:-2, distanceASC:3, distanceDSC:-3}; WMEURMPT.sortModeListMC = {distanceASC:1, distanceDSC:-1, commentCountASC:2, commentCountDSC:-2, ageASC:3, ageDSC:-3}; WMEURMPT.sortModeListPUR = {ageASC:1, ageDSC:-1, categoriesASC:2, categoriesDSC:-2, distanceASC:3, distanceDSC:-3, nameASC:4, nameDSC:-4, nbpurASC:5, nbpurDSC:-5}; WMEURMPT.URFilterList = {hideClosed:1, hideWithoutCommentFromMe:2, hideWithCommentCount:4, hideOutOfMyManagedArea:8, hideVisited:16, hideBlacklisted:32, hideWhitelisted:64, hideGE:128, hideNotKW:256, hideLimitTo:512, hideType:1024, hideArea:2048, hideLastCommentFromEditor:4096, hideTagged:8192, hideNoNewComment:16384, hideOutOfMyDriveArea:32768}; WMEURMPT.MPFilterList = {hideClosed:1, hideOutOfMyManagedArea:2, hideVisited:4, hideBlacklisted:8, hideWhitelisted:16, hideLimitTo:32, hideType:64, hideArea:128, hideOutOfMyDriveArea:256}; WMEURMPT.MCFilterList = {hideOutOfMyManagedArea:1, hideVisited:2, hideBlacklisted:4, hideWhitelisted:8, hideLimitTo:16, hideArea:32, hideNotKW:64, hideOutOfMyDriveArea:128}; WMEURMPT.PURFilterList = {hideOutOfMyManagedArea:1, hideVisited:2, hideBlacklisted:4, hideWhitelisted:8, hideLimitTo:16, hideArea:32, hideNotKW:64, hideCategorie:128, hideOutOfMyDriveArea:256}; WMEURMPT.taggedURList = ["[NOTE]", "[CONSTRUCTION]", "[ROADWORKS]", "[CLOSURE]", "[EVENT]", "[WSLM]"]; WMEURMPT.URAgeColIsLastComment = false; WMEURMPT.currentSortModeUR = WMEURMPT.sortModeListUR.ageDSC; WMEURMPT.currentSortModeMP = WMEURMPT.sortModeListMP.priorityDSC; WMEURMPT.currentSortModeMC = WMEURMPT.sortModeListMC.distanceASC; WMEURMPT.currentSortModePUR = WMEURMPT.sortModeListPUR.distanceASC; WMEURMPT.sortHistoryUR = [WMEURMPT.currentSortModeUR]; WMEURMPT.sortHistoryMP = [WMEURMPT.currentSortModeMP]; WMEURMPT.sortHistoryMC = [WMEURMPT.currentSortModeMC]; WMEURMPT.sortHistoryPUR = [WMEURMPT.currentSortModePUR]; WMEURMPT.currentURFilter = WMEURMPT.URFilterList.hideClosed + WMEURMPT.URFilterList.hideBlacklisted + WMEURMPT.URFilterList.hideLimitTo; WMEURMPT.currentMPFilter = WMEURMPT.MPFilterList.hideClosed + WMEURMPT.MPFilterList.hideBlacklisted + WMEURMPT.MPFilterList.hideLimitTo; WMEURMPT.currentMCFilter = WMEURMPT.MCFilterList.hideBlacklisted + WMEURMPT.MCFilterList.hideLimitTo; WMEURMPT.currentPURFilter = WMEURMPT.PURFilterList.hideBlacklisted + WMEURMPT.PURFilterList.hideLimitTo; WMEURMPT.currentURID = null; WMEURMPT.currentMPID = null; WMEURMPT.currentMCID = null; WMEURMPT.currentPURID = null; WMEURMPT.selectedURID = null; WMEURMPT.selectedMPID = null; WMEURMPT.selectedMCID = null; WMEURMPT.selectedPURID = null; WMEURMPT.displayLegend = true; WMEURMPT.isEnabled = true; WMEURMPT.isComputeDistances = true; WMEURMPT.isAutoScan = true; WMEURMPT.isScanningWME = false; WMEURMPT.currentURKeyWord = ""; WMEURMPT.currentMCKeyWord = ""; WMEURMPT.currentPURKeyWord = ""; WMEURMPT.currentURLimitTo = 100; WMEURMPT.currentMPLimitTo = 100; WMEURMPT.currentMCLimitTo = 100; WMEURMPT.currentPURLimitTo = 100; WMEURMPT.currentUROnlyType = 6; WMEURMPT.currentMPOnlyType = 106; WMEURMPT.currentUROnlyArea = ""; WMEURMPT.currentMPOnlyArea = ""; WMEURMPT.currentPUROnlyArea = ""; WMEURMPT.currentURCommentsCount = 0; WMEURMPT.wazeServerWaitingTimeToRetry = 1; WMEURMPT.mapCenterLonLat = null; WMEURMPT.scanAreaBoundsList = []; WMEURMPT.scanAreaBoundsCount = 0; WMEURMPT.scanUR = true; WMEURMPT.scanMP = true; WMEURMPT.scanMC = true; WMEURMPT.scanPUR = true; WMEURMPT.flashOdd = true; WMEURMPT.URDescriptionMaxLength = 18; WMEURMPT.MPDescriptionMaxLength = 27; WMEURMPT.MCSubjectMaxLength = 9; WMEURMPT.MCBodyMaxLength = 20; WMEURMPT.PURCategoriesMaxLength = 10; WMEURMPT.PURNameMaxLength = 15; WMEURMPT.visitedURBeforeActionsSaved = []; WMEURMPT.visitedMPBeforeActionsSaved = []; WMEURMPT.visitedTPBeforeActionsSaved = []; WMEURMPT.lastUploadedWKT = null; WMEURMPT.securityOn_visitedURBeforeActionsSaved_set = false; WMEURMPT.servers = [{name:"seb-d59", url:"http://seb.d59.waze.free.fr/"}]; WMEURMPT.customAreaList = []; WMEURMPT.areaList = {custom:[], country:[]}; WMEURMPT.statsCSV = ""; WMEURMPT.icon_comments = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94DDg83H1XMMOAAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAEQ0lEQVRYw+2XTUhcVxTHf0+dwcxUHawuxImtH0hbBEebGLCFutGFgSaBriImoXRRBLciqYuKza4bN21dVFcJgouE2IKolIJYP0BmFCwKoyJxksyMTGZ0Zvpax3u6eW+YD40abTftH+7mvnfv/3/OPfecc+G/Du0ca2sBJ5Bv7BMDXgDr/6Tgz4CfgAAQAaIGcQzYB8KAH/gZuHVRpAXAbeAlIIDk5uaKzWZTRUVFUlxcLMXFxVJUVCQ2m03y8vLE/A/wAV8Aljc9gk+AB8BHABUVFTQ0NHDt2jWuXLlCbW0tZWVlKKXw+/14vV4WFxdZWFhgaWlJdnZ2zP0XgF7g17NY/qXhUrHb7aq/v195PB45DZRSsrKyIgMDA2K1Wk1vhAxvnAq3AR2QiooKtba2JkqpNILTIJFIyMbGhqqvr1eGiEOg6yTyauBPQOrq6lQikTgTaaYnRET8fr80NzcLoAzDPn6dgBlA6uvrVTgcfmPyTBHb29tSU1NjHscvgP0o8k8BcTgcanp6+tzkmSJmZ2dNAQcGVxZ+A+TmzZvnZz0GHR0dZjwMAdZU8hLgldVqVUNDQxdmfSZmZmZML2wAhZl3fr+goEBWV1ezXHiUmNMIzLw94XBY7Ha7KaIkJ0XAW0COxWKhqqoqPVtpGpqmMTw8zN27d3ny5Ely/uHDh9y5c4epqSmUUiilePz4Mffu3WNychJN0xCRtH2MYMxKhNeBmMPhkN3d3SxLxsfHpbCwUABxOp3i8Xhkfn4+mXbz8/MlEAiI1+tNzmmaJj6fL22fcDgsNTU1ZhyUpnrgBXB4cHAgq6urAEnlAJubm8TjcQACgQCRSIS1tbXkd13XCYVCbG1tJedEhPX19OKo6zper1cD/jISU1pdeJ6TkyN9fX1ZHvD5fNLa2ipOp1M6OzslGAxKNBqVlpYWKS8vl46ODonH4xKNRqW9vV2cTqfcuHEjKxZGRkZM62ePygXDgDQ1NalgMJi1OBQKidvtlkgkkvy2v78vHo9HYrFYcm5vb0+Wl5dF1/WsQKyurjYF3AdyMgWUmOc3ODiYFv2ZEX/czTjqFpj/9fT0pJbpD49LxQ9MEXNzc+oiMqCIyNjYmFgsFmXUg+9eVwvyzXrQ1NR0IeSPHj0Sh8Nhun4JePukingLEJfLda6sFwwGpaurS9nt9lTyd0/TD1w/j4BQKCS9vb1SWloqmqaZ5z4JlGYS5R1BbgM+B7h8+bLouq6Nj48zOjoqT58+1RKJBC6Xi7a2NmlsbNQqKys5PDzk2bNneDweJiYmcLvd5l7K6Kq+B74GEqex/r7ZvXR3d6urV6+qlCZTjA5YThgxwA18C7x/lnfBV8A3Keo1Y0SM8jkLxI2u6YNj3gW/G2+DdeD5WZrQFoMo05ofgXeOSBoWg/ySMfJf134fh9QYuAT8YVjzEvgBGAFeHbP2wBgXivcAF//jX8TfP8rg1M0AqeYAAAAASUVORK5CYII="; WMEURMPT.icon_distance = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94DDhYIKkhWRgAAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAACXUlEQVRYw+3Uv2sTYRgH8Cd3Zzyvh8nlEpPGJRSalpOWBpq2QTEx3KExiwgR7FK7OLiJZBD8sejSgnRxFpf+BUWHHjSTLQULdqh0rimUbHfvvffzvcdB/QO61OU++8MDz/d5HoBEIpFIJBKJxP82MTHR1jRtaBjGs3OWcnNzc98bjcYPACico45vNpuvpqamftXr9RtCJpPJrq6ulk9OTnLb29uXdV0XT09P3SAIUpVKRTRN09E0jSuXy1dM07SWlpbEfD6f2trautTtdkvT09PZ3d3dfK/XI8fHx9zh4aGzsLBwleO4cG9vL9B1XQ7D0CeEMEVRJNM0vfn5eUVV1es7OzuyAAAQRRGIomjNzMy8mJycbAHAF57ns+Pj43c0TftUrVYLlNLHpVLpLsdxG4qicADwhjEWh2EYAcA1SZJej42NZQHgviRJZiaTGRSLxa+qqr4PguCb67o/VVV9IsvyS0EQ3CiK/owRAIDjONjf3783HA6fr62tGaPR6KnneY/6/f7t0Wj0luf5XqfTqRUKhQ+O4xi6rjeLxeIGIUSklAq5XO5du91uptPpxXq9/rHVatUkSeoCwPrKykojnU53z87O+svLy7dkWV4/Ojq6yfP8n0BqtdrDwWCAYRi6lmW5iIiO43iUUh8R0bIs6nmeH8cxUkqJ4zghIjLbtkkQBIwxhpZlEURkrutGlFLCGEPf9wPbtgkioud5gW3bLiKibduEMeZvbm7GhmEspqrV6oPZ2dnPlUrFjuM4dRGLLwgCHBwciISQzr+G8t848IKOLwUADACc5A8lEr8BN7wbxzXrd3cAAAAASUVORK5CYII="; WMEURMPT.icon_age = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94DDhYcMwKTOZUAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAFF0lEQVRYw+2XTWgUZxjHf+/sZnd2EpPsBhWaoB4MVczBbZo05FAPNuApEdSLRAWbguKxtFAoLRLJxQZyaQk9FkR7kKQHQyUXsSlBUGLoITbihlhDNMmucTeZnf2Y9+nB2bJZ893QU/8wMLzzvs/zf77fgf+xM/D9l8qCwKfAL8AMsOw9SeAP4Afg2E4rNYD3gR8BKTzBYFADGpBAIOD6/X4p+j4LdAE1/9Z1EeAL4CegxbKsfFNTU669vT135cqV3JMnT17btq2uXbu21NbWpsLhsHZd143H49VAO9AGvAT+3I7lB4F7xVbfuHHjRSKRyIqIKyISi8WSIyMjtohk5S1yk5OTTjQafVV0Lg1c36oHDgJDwAfhcDjX3t6+UFVV9aK3t7fWsqyAiKCUUqZp2nNzc9m6urqAJ8+oqanxRSKR16lU6vXhw4fzk5OTlcBHwF7gV4/Uhm6/B0g4HHYmJiZSshJaRCSZTM5XVFQkAX3u3LmXRV5YsbenpydR5I1LgNoo4b4FJBKJ5ArKtda6VPLdu3cXTNN0AWlubk47jrOCqH4LERHp7u5e9AgsAUeKlZWiHvgS4MyZM68OHTpUISKilHqHtWEY/5z3+XzvyFNvgYhw+fLlMuANUA70rUfgc8ACmJqacgqCNpm0q8ZWKUU6ndZevwD4pNArjFWazGeWZeX6+vpeDA4OvrdTjaS2trbcdd2KU6dOLXlLX69GoBPg6NGj+sKFC3tDoVBIRGQLetb0lFJKGYZR2dnZqSzL0sDHQFUpgXaAaDSqq6urfVtxv2EYBAKBd/aWGnDixAmjvLxcPLLH/SX7PwwGg9LU1CSAsVbyrYZ4PK6HhoZSpmk6IoJpmm5jY2MwFArtKsgRETFNM3TgwIGl+fn5UHE1FLBsGIZ78eLFOdu2bdkAw8PDiUIZKqW0aZp50zRd0zTdQCDgnjx5Mp5MJtPFZ27duvWXZVnLgAv0G6VdUWtt3L5923r8+LHeyGrLsrRSSnuuVo7j+BzHMRzHMbLZrDExMRGIx+Mrwjw6OmrZth3wQmAWh8AFXJ/Pp7u6utLNzc27NiLQ2tpqnT9/PjE+Pl65SqT02bNnM/v27TOLF/v6+oL3799fGhsbqwQWS3NgWinVUFtbW+7z+YLr5YD3LdTf3+/PZDKZoooSQPl8PvH7/VWAv0ROMJVKlXljPFZK4Ld8Pt/w4MEDA8grpfzrlZUnuCwYDJat2ZlKjJiamsomEgkTyAOPSsvwZ4Dx8XGePn3qbjS1NlMhhT2FchwYGJBUKoXXFX9f7cwsIB0dHbM3b978S3YItm3nrl69GguHw0nPsO/WIt1VGJ1Kqem1JuFWoLXWCwsLucrKyllPdg7Ys9YwGgDGAFpaWkKFpNruDCjkgOu6rlKqwlv+Bphb71yHd42Snp6ehGfFliwuWcpGo9GUZ8woEN4M+etepkp3d/diMpnMTk9PL+ZyufxqyoqVaq214zjZ58+fv5mZmbGLlM94V7NN4/tCPkQikQVg8eHDh9NFigqv6VIv3blzZxZY8LK9oLxjO/8Dl7xrlADS2tqaGBwcXEqn07aIyMjIyOzp06dTz549i4tIPhaLLff29i41NDQsF90DR7dqeemMPwIMFwRalpXfvXt3vrGxMVVXV5cC9P79+xfr6+szkUjELSsrc4uy/avNxnwzOOYRyQBZL0dcr626nsIMkPDqfM+2bzAboAo47nmmFjCBRSAGPFqrw62GvwHMAdeNGK2SbwAAAABJRU5ErkJggg=="; WMEURMPT.icon_type = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94DDwolKCvyQLIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAGcElEQVRYw82Xf1BU1xXHv/e9t7DsLiy6uwYEZBVYNGi7gwnYNpk6kx9TrcZJGe0v/cOONkPTJuMYJk5NGxUcp9ohOqZDU5wxk+CMQrEZneIv0Pwgmk6LElJKRECJbBaVZdld2F/33Xv6h0JqY/ghGSdn5s67950z53zeOWfuvQ+YhvT399/1/EZIVVXVlOzZZA07OjqwYMGCsfWKFSsKvF7vHCmlQVEU3eFw/PvkyZOfjepramqwdu3ar+erjh49OjZft25dmsvl+lOey3Uj1zV/OCd//kiOK38kNy/v8/z8/LqlS5cWjtpu2rTp68sAACxZsqTE5/O9ZdRU05wkBQ8nq7AlKBTUCe1Bwa6FBcJCxpItlt0bN24sLy0t5bW1tVizZs30AOrq6lhFefnPQpHoG3kWzfzTzEQqmqHBqDIm6bYTnYDWgE6H+2KsLaBzi8n40vPP/2r/9u07yOPxfKVvdTIAfX193/KHRt6Ya1Yf2ppvooctCuOxGOO6hFQ0xONxCB7HbHMCW5yq0fWIVK+GYoU93d0ftLe3exoaGnDo0KGpA1y8eBE9PT0JwyMjv4tFo0+9Ot+MLJPCyGxF2s83Q5s5C+ErbUhd8hTsqzZguONfSJAc6YkKuxjQLcFIPOvmzRs1LpfrK2Mo4wEUFhbC7XY7wrH4skdmGJBlUkgSwTAzDcmLv4+MDa9g9i9+i4zSCsx4/IdQLakAgeVYNMy3aIjz+BO7du3KHi+GMlH6A4FAciQay15k1aAxMIAh2nsZA8ffhIxHYXv6x2Cqhv7D+8EH+kGMIUkBnCaVVAatpaXl2WkBhMNhIiKYVQZltGUZA8VjANGdF/RFS9+ZmlUGBQyBQIBNC8DhcJBB06QnIqHfcW6ckwfHsxuhJCZhsLEOJHSk/eQ3SLClASAQAG9MMJ0ITqezf1oAnZ2dfcYEw4kPBzkicQJJID5wA6GPP0Tfn7fDU12B669vhf/9v4MH/IAEbkUlXRkWAGPe6urqvwEAjWVrCgDd3d0oKCiIWkxJZzxRIc/74oAuER0cxNV9W3Hz1F8hYMBg82n07NmMWCAEziV9MsTZtbCAyWTaxRiL3q4amzpATk4Odu/eLU0m07FEVf24tp9jKKaTlAQyGCFVDboQEIoGSkyCLiXCXODULY6IoE8cdvsRAGhtbb3/EgDA2bNnrzLIPwzEZfjIDc5UIaHr9KUhBeGfQ5xdCukwJxn/smjhwlsA4Ha77x/g4MGDAIBPOz49ojK0vTsk0RYURLqAzr8YggsEozod8AokGbTWWQ5HQ+Vrr9FE/icEWL9+PUZrmO10vhoXMlTrE8wflaRzCc4ldC4R45Kq+gWLEIWtKSl7m5qaeiaT3QkBfD4f9uzZAwA4ferUaavVWnk5LNAUEIwLASEEpBA4MyTxnwjBwNjbFy5cqJnsCTshgM1mQ1lZ2dj6xRdfOJCSktJ5IgR0hwmSS3SFJZpGiEkiWVFR8RZjTIzat7S03N99oL6+HiUlJaivr1cqKyuX+gf9z2mqmkKAFo1G3JIpdpuB4YUUicPDDB2cQcbiItVqfVfXdZ3r+vn02el7z507F7xzoiIzM3NyAI1NjXjyiScBAO5vuwu8Xm9TmnPuQ9YZqSACNIMGHgmTt8/D7BowoBPSMzNJMyYxoQsQEXo7L0NyXr169eqyvfv2BkbLabPZxgc4fvw4Vq5ceXsfmJeTPTAwcMj9ne9+b/3LLyPZaiWAGJiC4cAQDpSXw9N7DelZWVi7+SXMmp0BgMAUhdrOn2dVO3YARLWlvy59btvvtw1N6R5YXFScbU2xXlq18hnyDQ5STBcyyjmNDi4ldXZ2UnFxMZ1pbCQuJd2lF0L+46OPaJ5zXtxus5cT0fj91tvbOzYverTIaZtpa3Y/8ij13BqQfYEAfeb3f2l4gkG6dKWLPIHgPfWfB0N04v0PKCMjU8x1zt1W8qMSAwCsembV3SXo6upCbm4uAGDZD5altrS0HDGazU9v2PoKrA4HhJC411ZOBKiqAinlPT+KCFAU0HvvvMPeO3ZsKDEx8Zfefm8dACxfvhwNDQ1390BxUfGC9vb2PyqKstxsscBosYAkYTrCGCClRNDvh9D1GBGVhYZD+0f12v8aP/b4Y4sXLlrYBWDfeEfo/YEwAGCapjnsdnvWzp07r48pm5ubH/gv3JYtW/6/XvTAgj/IWN98+S9tiGRBMpU45gAAAABJRU5ErkJggg=="; WMEURMPT.icon_blacklist = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94DFxYbAagU5scAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADGElEQVRYw+1Wz2tcZRQ959xvfmRmXqaZvDppaFeVwCwaCC4aEbswEA2oq1BdiP+CoFshUNRS3ApdiAih4M7NrIpkkY3ZCC4VAoVUE2USCAnOkDrJXBdv3us4tNTaNCjMhW9xv3t553zn/uABIxvZyP7H9r6k7/P5/FfFYnH8rMHfJPnALHihUPBSqfTt+fNTOivwCQA/SvJ8Pt8rlcY8iqIH1Wr1nbMi8AVJD7lcr1gc83K53KtWq16r1e7VJmsTzxv8dQBukkdR1FtfX/ednR1fWlryOI69Xp+68zzBKwB+I+m5XM5nZmbc3b3X6/nKyorX6/Xe9PQFv3Tx4ttP89GnaZzPQdQlc0koFApZwMxAkpJBsi8vv3h5+rQJLAB4TxQlUhIODw6zYKfTgckgyWV6geDNRqNhp0WgCOAWgIokmBkkotv9EwBAEu12GxQhiUlc7wJ447QIfATgJZOcEkhCMoBEq9XC8fFxokACDJFuZnkzuzk7OzvxrATmAXxCEpRoUio13B27u7tot9uJAiQkgTJKcklXQrCPn4XAOICvAUCSpy/sSw1R2N7eRqfTQafTgUzJfT+e5NuH8/NX3/q3BG4AmJHkopi+MCXicLRaLXS7XfzRbkPUQJyk6JJA2O1rr7z62FI8rlOvAfgUQFkSLRhCCJAMZg9PCAGHBwfY2NjAyclJRsAswCxQJjezSKZ4a2ur+SggPuJuDEATwIIktxAYzBAswILBQkAYIJDdp34IfyMYgsEsHEq6vra2dveflOADAAtEMlbqS5/VOPVlqFQqmIwnM1/ZlAjWzyflksbN7LPFxcXyk0pwDsB3A43HEELS+absVTJDHE9idXUVy8vL2Nvbwy/37w/Ek2kZ8GlmF0IIv25ubv4wCBiGCEwlywUwM2Zz3wdPfZMQQsDc3BwAII5jyB4qkIJLBEmmPslLwwoME/gZwF1Jr4kMNiS9KR01YX9/H41GA1EU4ejoKJuONCddWJJBlJP8neQ3TyIASddJvUwpBxJMj4RBP11Gg1uQQ/EsX3QA95rN5k+jP9mR/efsL/+DvMiiIfU+AAAAAElFTkSuQmCC"; WMEURMPT.icon_delete = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAIFElEQVRYhY2WXWwc1RXHf/fe2bHXWdY2dry249hmY9cmKnaSEqClReqH8lQnAtpKoRKV+GjFW1UUlUqlrUpT9QNeEEh9qYCH8kSCVJSkzYcigVpKA0F2nMRxkOO4tolDEvDa8e583dOHndmsvxBHGu3M7Nz7/51zzzn3Kqpst+vyZFcXodb33NbS8h0Jwxk3lXrtxrVrPHTuHMIXtxc6Orgvn6dYKn0vVVfX99nc3H8dY479+/Jl9i8sVL5Tyc0jtbX8qLubouP8qWvbtn3zs7PUpNNsaGiYXZyd7QkLheI3P/iA6AuI/zWfZ3s+j9648UN/aWnb0vw89R0dzJw7d9AJgoc/nJriF/PztwC+77o8ls+zpPULLfn8zy6cOIHruhhAiXDX7t1Xbs7M5KPFxeIDp059LsSr+TyDW7bg5HLDF44eHfB8HwF8z6Prvvsozs+/qYLgoZEYQjUBf+vrY8Fxns91dz89dvIkNXV1OCIorTGA+D5f3r37ys3p6QpEuIb4a1u2MJjP4+Zyw2PHjw+EQYA1BhEhFMEvFuncuZNiofCmG4YP/fH8efSg63Izih5o6e5+evTkSdx0GmUtVikUIEphUinO/f3vrZmOjgknk0m/s3Mnzhri2/J5Urnc8IXjxweiKEIZU54rDnWqpoaJU6eoq69/sBiGjw1mMmitNelsdujs229TU1uLQGWAAGItaI2uqeHcW2+1Zjo6JkwMoWPxV2Jxp7V1+OKxY2XxZHw8l43vndpaLr7/Ptp1v2uUQhvg6tTUjHYcRKnV4koRAVYE5bqcrYL4x44dvLh5M9vzeZxcbvji0aMDkbUorSviohRi7TIY4zhcm5qaIYpQ/cbwbEODXhC5bkQatNYowBFBa41WCp3ci4BSiO+zdWjoymeXL+cdY4obNm0avpiEXWustURKgbVYEcIYwsYOWmtJKZU7VCxeVQDPZbNsdpxGT2TSaJ3VcfY7WkMsbuJfJQIi2CBg69DQJQVXLxw9eq8VqeRMBGVxpYhElolH1opRql/B+OM3btzqA89ls3SugFjmeQyh4ghhLQCO6xL4PjoJe+J9WQyUwiYwIAb6gfGfXL+OT1UjAvhdfT2dxjR6Sk0ayAIVzxHBxOIKEBG0UkgMZa1FKYVUCS+LBIiGfgPjT8birARIIDY7TqMPyyCULue8EUGg4rGuqhprLRJ7nyReIu5Av4bxx69fJ6jSWwUA8PsYogSTCrJJR1RQLsmqgdVlpqqEk1yQzxFfFyCB6HCcxlIUTRpjsknoE5DE+8QqAPEyCGBFRCvV76wj/rkAAM9kMvTV1jZ4QTDmOE6usv6xePXuWN1sFBCGYTHluoM3Pe/iTwuFdfePlR11mdXW19PS2fmZaH156syZnDEGRXn9wxURiLi1BIG1tPf1XRVrp2p8n2hkZF0Nvd4ff+jo4P7eXpq6u4enL1y4R5QiuUKRygYTWrvs2SoFWvO/8+e72vr6Jhuy2fTBwcF1hdZcgv3t7ezo7aW+vX34/SNHBogijOPcCn9SCQBal0stnizZxKwIvufx1T17rlybns6XCoXiD0ZGVh1qVgH8tq2Nu3t7yba3D59aTzyuhLVyINlJBSCG+NqDD175ZGoqXywUio+cObNqXMV+09bG3T091Le3D7935MiARBE6Flci5fKL+8F6VQBxKcatV0QIPI/7E4j5+eIPz55dDfBsaytf6e2lsb19+D+HDw9IleeqqgVXC1c8EUHFDahSCVX9wMYQX48hlhYWio+OjkIy189bWtjR00N9W9vwvw4dGgjDEIzBilT6uI2TTJYnXlGsnROlyu+sRZJvlCqPi0FwXU4ePNja3Nk5UZPJpF/ZurUM0A7cs3kz6ebmD98+dGggCENslXgYZ30Y72phEl5rRawdUEp9KYyiQqVCrC2LJlUSvwMwrsuJAwdamzdtmkin02ZXXR36jlQKz9pHR959d1sURYgxZeFYPPFIkucykCil+j346FIYFlJKdYcihVCk/H/ieTI22RFF0KkU7xw+3Kpc99ddjoMjwNzMzOBioYAxprykcRarmFxBOfNFCOPeDoz/anGRENiXTn+aM6bbh8kIsgqI4kNIpUPGOaJjmEtjYwOBtWgRobi4+F4inghWDhexR3H4RYn0K5HxZ2JxgD8Xi8xa+6kj0i3WFkJrK4eQKI5aMieUO2ngeadsEJSP5c9mMsyLHAe+zVpWXgJRUdQfRtH4c3FkVtqPgY5UqtEaM4nW2aQy1rCxNNz5pueVob4B7AICrU9o1/2WqoqGWIstlcRpauq7rbf34gebNjEfRaRWTG4BH9i1sMDC6GhDcPXqpHbd+qRvJHOJ74/pKLrzEvAqoFKpFM+/9BK3A/OnT3PjwIF/hteu7VKuW26xYRjknnpqR2ZwcDS1cWMqZa1WUMPqLiqA52tto8XFaGl0tOXjF188SxjejjFIGKLS6TNNQ0MDme3bKW3cyC/37UN1dnby8ssvM7+wsEM5zl2kUk3X33jjyaWRkTtSTU1e8969p52mpiXxPAcRobyDNq4D8CkQohTKda0tFtUnr79+rz89vaG2p+fj5r17/6KMmZUgGM2k06f3799f3o5FRGNtk/h+F77f3rRnz0jzww9/JCJ14nmNUio1xiIbKHu/nrUAPiKL4nmijJHcE08MK61vShTdFM/LSxDUAB8Tn+ac6elpJiYmbEtLyzFr7TEA8X0tvq9jb90qgdoVz2tZAJQAQQQplQIpv7PxhVKKubk5xsfH+T+H8K+bjXuKEwAAAABJRU5ErkJggg=="; WMEURMPT.icon_priority = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8AogAA6dv1/QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94EHQghL5pOh38AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAADiklEQVRYw+2XT2xUVRTGf+e9N/PaqUw7rdOKItLYmnRIrTqhBklcTMLKhStcdAGGRjYluOgKFoQEF6QxbokmJg4sZOsGdyxM/BtRokgjJDYhVWkIf1pDoR3ePSzev3lvZuhQQTe9yc28+9695/vu951z3xvYaP9zk/Uu1JO4QAULsDgn77GynjjWusA/YpxV5jCcRTkLzOmnjP8nCugMeYRzOJRxUBzARrA5j1CR/Sw9WQVqTGMoY1AMEnRFKSNMP1EF9BglHH7DARwUG4muHQQbsNgu73Kp3ZjOI9E1nMEAHvzl9cmXS6/TkevgrYEfpcdcDfU8A7z82C3Qw0xjKGHQmmdx+KcyH37xBx98fomP/3yb+3YvgS0l/ax9K9oioNMMY5jCYGOQG9rPtVtx1V25epOau5UgH2xgSqsMPxYC+j4OhoN4DGIAAzlWcDN2NKfQ3YV9fxkMoIAyCBzUU2tbvLYCHmMYDgWBQSHv3SKfy0RTBjf3kLm7QEgQD4BDwNi/IqD7cfA4HQTWCMDAyOZOP4BlMdhrIauLMQEN5iqntfpwFaw16M2gjEQ1rxEAO3r/AaC3UGBr5m/qyUVnA4wgzKyLgO5jF4bJOl99aQOQHe7vvv893Ty/ejH2v56Ib8WkVtn1SAT0HVwMRzHk63aUACjcm6fYV6C/+DT5m+fr5Y9V8InnEY5qFbd9BWz2YKikZG3Y5c7SFl56dlNy517TNRWEPW0R0Am6geMYnHTipftoX40tnfeSxDTV/VxwgONapbsdBU4gbPPZJBMvoYJCuec2o4XllgQDNUL7tiGceOjLSCfYCXwTQEjE3X/lNl5nHTQrCLX4WXpufE8RBHhD9vJtAwGdIAdcAIYTBKxU4Iz/eweL75cKZLIwXryNm/Vag4cELAThCvCK7GU5bcERYCgCj5g1T8Bjc6NMfVfkwFdFqotvYjyal2K8VoIjaijAinNAJxgAdgfAkjCoSYYveHkuLG2Kpv2w+AwrT73YkCNNiEhgw249xUC9ArmgtziVkrvr7xCGXnguevzq2HbcTDZJtJUiIZ76eCGBeeByCjL9MRJ1WV7kZMVl9pefmb34K1Ov2VjXZ5uXYnwuaDRWLiPMp5OwBHwCTY7NMCvSCdaVRztzyN1rrSugcfw1Dgdkn//Zli7DLmAA6EuoEBKwmgTPNCnR+nvxWLC5QYYFmeTOxl+yjRa2B+5IidtmKn3pAAAAAElFTkSuQmCC"; WMEURMPT.icon_checked = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94FGw0UDITYgDwAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAC3UlEQVRYw8WXS0gVURjHf2fu9VXakAsXWmRFWFKbcFFIhQhREzKlBC4K2rUIIYKEoE0PCCIiaZctKrIiKJmCSRdtEoMeWiCIFr0QwQcZU5aPe+eeNufGcF/O9T46cBbnzDfz/f/f+f7fNwf+8xC5/LhumwVAEzDhGNbLRDZajgneAB4BF3TbLM4rAN02rwFH1fKrY1jzeQOg22YrcAIIALNAV95yQLfNGuAFUKG2+hzD2p3MPhcRuKWcS7U+mcpYyzL788AOT3SfO4Y1mOqdYMy6HtgJuOk6L9hdVSXdSJsIaDJ6tL/PvRoEmoHHfgH0AivTph7UKGhYgwhoSCkRQhDqGyc8MHkaiADbgOGlABQA80Ah0A189HtEhfvWbQjWVbQAQSEE0pVueHimh7BsBEJAiZ8IRJMmBNwFniaIUNxYcaauOFhfeUdo4p+tCIj+yPhsO9CvpOg7B6IjmgPhJc9+V1U1cMhDIgTcC7+dcvxELxsquOxxLoAvwE2/L2sZym4LsD9m+5JjWG5eAABnY9hPO4Z1Oy0BxSFaW6qVduzpFMXBSuAX8Bp4AHQ7hvXdw74cOOBxDnAxXQZxESg5tb1QOQcoAxqBTuCNbpuHPaatMfL6o9STGQBRFKcaqeZ6oEu3zStqf6+qGdHxUHW+zADMdbxflK6cT9AxpSpWbbptdgO1Mc97HcNazBiAO/oj8rPpSYtjWAKoVjkg1JSK9UFgk6d4fQaGlpPFKVXgGNY31aCeJfl/iK5HgNGsA1AgwsDxFAwjwJCyyz4ABWIMaFfNSsY8XgDeLbeQ+C5EjmH1AJYnF/A0r5GcA1CjTTn0KsMFxvICwDGsaeB6TPuOOIY1k00Acok2fFUVnKg0O5PYhdK9mgWBCWAVYCttJ4xQoLZ8dVHzxq3uJ2dq4f6H0SQkyoAjwCLQAAz4ATTpKb3ZmnPAZr/d8BhQk0BqmVx+J9X/pe+bUbZvSynJ/AUWE+o2p0KuHwAAAABJRU5ErkJggg=="; WMEURMPT.icon_unchecked = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94FGw0UMdywzC0AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAy0lEQVRYw+3WMWoCQRTG8Z9BhRR6BUuDbargBWy8g0WqHE4PZJFaEISQoLjK2qywCMrorkTw/eHBzMCb+d6bgfkIguDZaZzMh/jAvqb9X/CNaWrCL/KaY4/BuQObpXELG7Qxw7yo4BZydPGJDK8pSU0s8Ydxae2WaKCHFX7wntKBMsc3sKtw/7vUR/KvhIAQEAJCQAgIAQ8pIK/4DR/JUk3IKW18YVTREXUKJ7S9JnFxB0+4xltqByboF4l1ue5F4S+TbPm5tSpcLOYAHptFzbynhPsAAAAASUVORK5CYII="; WMEURMPT.icon_ge = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAYCAYAAACbU/80AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB94HFgoXEUEWIh4AAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAJNElEQVRIx4WWaXDV5RXGn/N//+vdcm/2/Q5JzEIICASERnEBHGilY0dGg9hRqaV2iq2tVWudlnE6Mk7VDqPWGZUySl0KBavV1mVwSQUpBBoJCVkEzEq2m4R7c+/97+/bD06rXdTz8Xw485vnzDnPQysX78VUADhz+AY0rvgjWcKhs0c3cwA4+OY5ZXw2XZKY5TWpObvEdiwxmTClscm52c6u4Y+HTj09AvRmAUAIQUXxn9Lk0KMcAOrqfoC+vt/iq0quXB7Akac2IK92N3Ud2SiISABA5aIXl2/f+dHG5kWx1fPrQ+W1VSE5GIpxiTyyTEcMjxYljn9U+cGhE+P7O/92/wdEZAIQlY0/k4a6H+KrrlkGm+7CQO+jXwpAAADjNwTzJ+LT1r0Fwcr6Lfm52lZZZlWaypAbZSguUFFYoKKyVEFtdQgVJTpUFejuS8wcfOfc3t2/63gM/uO9ABAu2kZzE0+Ihqa70XPq4a8C+DmEeJCISBhFT85rXl76YCxqbMqPGfB9wuiYieFRS8ykbOiah1CAI2g4aF4UoY1fj6M6HsInQ0m89c6Zo7t/337v1PDOtk9HXw9gH4or7sT48M4vBGC7XtrJljaVcuCB/B/eufzhG79Vc+Pm6y7CN9fFsX51sVhzeQHmxUNkuQxT05wyGYFk0qbu3mlxsmsCBfkqNS8qQGGeXp4T0RYe6yk+7mePjwHdANYjnXr+SxVgfz7wtACA79/1ix/fdlPdj1a1VCAv10DAkIWhM8SiMubXGtRYG4RtSjQ46kKWiVRF0PBoEj0fT6KyzMDShQWk61JJ0GCx9qOJ94HRbNWCVTQ72YHiys1IJ0/9fwAAWLfx5ZYtm2sfbqzLDZuWj6mEKSzbIcCH4B4ATqWFGqriGiXTPnrPZUnAR0AjOj82S5lMFgvq86iyLISsaTc6Imf0bP/7R2cnOwD9JrhMh5/p+CKAtYFbb1t/f8283FVvt83gqedHxeHjGYxMcmKShGiYwMDJsjzEcoiqKxUk53zqO5OG8FyoqofB4SkEDQkXLyikgC5heiaVf+RDqQ34eHply3oaOP34F65A2nb3HcVZ01/9zAvn8MyLQzjdb2J0wqe+T1y8d8LH+ycI56cAwX3YtoeSQobvtBbg2qsLIDEJHpfgcaJX/tqLt97tRzikoKw4tOyKNfMXA8BTD1+NHb/ei8HBQQBAZ2cnRkZGPvsDp3tn15BkFg6eB4hFRGWFhryYAl1jMC3CqbMCYxM+FszzUBfn0AM+KooZttxQAkWxceD1NByLYXR8hp59qV3Mzk7T+YkZjE8mFgPagYXLV3uPP7Fb6e7uFm1tbcK2bV5WViYAoL29HXIy49yTTNoaSWEEDQm+58OxfXgOh2fbyLg+psY99PZZaKzmWLEYKC+UUFmq4ZaNFQhpDva/msHAMMfp/nGMnR8FkQ3T8moAWweQvmPbFvfzsh88eJANDg768Xgcspm1qgEGJnHh+y6ZpiMyaQeyLMF1fciyBNvxMZu0cLrfQnuHj3WXa1jaGEBpoYpbNs5DbpjjD6+Y6Oy6QCMj05AVjnBYi3/71l9etmf3A6cOHf57oLgoP1lTUzNDRO6aNWv8rVu34uzZs6DaJY8IDg1MjnCmhCRVDYpgwKBgSIOuK4IxBo9zylqOmE5YNJfMiryYRVeu0LH20hjq5gUAAEf/MYx9Lx/Dh8d6MD2TgqJI7rbbVyeuumK+nUrZvqoqA6qqnggGgwebmpoORyKRLABQ44pHsqYNTZbDkqKFwVhAMKaSLGtQFEVIEsEXnGzHF55jk2WaIp1OkyzNoSZOWNOSh5VL8hCNykimTHScHBBth3vFqdMj0vqrG7C8eR7SGQeMSVBVFeFw+EI0Gt1dVlb2UENDwxQrqbiy1DSdhabpydmsL0zHhRAgiQDX9WE5DmzLJtexwD2TCCYUZpNlZTAyNo2TXSPo7BpFMpVEMMRQXBhCYX6IJhNpMgwJsZiGdDoLx7Fh2zZc19WFECuFEH3PPfdch3xhOvECJ/26vBxVLyzSyHIYpmczmJnOQlVVaIYMRgB8D5zb4J4D37egqjYIPlKpNI6fHEdPbx/ycxmqq/IoFDCgKAx5uUEILiBJBCKC53k8nU5LsiwjEoksEUI8Lw/1H+hpWra58+ZNF629oqUK0zO2eO/QGB1qT2AikULqgg/BAVkBFMYhkQsIB+BZSDARDgg4jof0XBqJaQv95yahqQxrr6pFSXEOXI+DiABAEJFgjEGWZTDGJgG4MjAwW1mqvtrUEFsbLw+itEBFaZGCy1bk4Uj7JI59NI3RiTRMy4WVdeDYJnzfghAWuG/B87LwnTRIuAiHdbgeRyQko6IsAl1jyGR9AcAXQpAkScwwDITD4Xej0eg+IuIMAGyzbLC8vGChYag1miKTIoMX5WvUVB+lry3Nx/zqIEUjAprikSTZUCSTVNmDxlxoiotIkCFeHkFNdQFUWcb8ukI0LSgWAvB9X3AiKIwxSdd1RCKRfWVlZfe0tLT0AIAMAENDL0y+uDf8kK6iYdmSeGU0x5AyGZtz4UuKTLSgLoy6KgMZpwKptIPZmRQuJOdgmzZ87kFmABEXvf2TggTnDQ2FXDdU2TRdWZIIjDFomjYSDoefra2tfeySSy6ZAoD9+/cTa73pV1JX53ticvz4gO2Vj2q6dFk0Rw+Zpo09e9u919/uwVRiDh53QfCFLHEoCoSmCqEbjJMk+FQi5Z/qHudjE3Osob6QxeNR5rqciIgrijJsGMbeWCx2/+bNm/fs2rUrCwB79uyhTZs2CQKAv7zyOn3j2msEADTM33TztRuWPBkIqoG9f+pA/5kpRCI6AgEZAU1C0FChqAoAH1nTwdycBe5xFBSEsay5Ag31+T4XIul74rSqqm8EAoG3WltbO4PB4L/f8WuvvYYNGzZ8LhMCaHvzDbp83XoBgC6++Pp7AuHQdxMz2fyxsVnJdrni+xyAAJMkSBIDQfi+L1xZIq+hvsBZdWlVtqYm/6wssw+zpnvE0ANdt9/+vbHPe8B9992HHTt2/Osq/hMAqAfQ+1lQ0FsaK8pzW8ys1+JzquWQJAH4nAuQ4IoEPpETMQbqakvOrL6qurd5afFIJKKPLG3eeOG/Pb+1tRXbt29HQ0PD/+SBfwLs6UJD9IUzMgAAAABJRU5ErkJggg=="; WMEURMPT.icon_export = "iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wgBFAggT+iJkgAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAADUklEQVR42u2dTWsTURSGn5lOrEoJVYsff0AqUhHEreBW40IR/FiJKze6cV2NuhFdiFgQXLgQf0ARXIk7t3UhLYp/QBTFEksbmibjYk4kxHSMucn96JwXhtAmTU6fOfecc++cuYmwoxIQ459aQMPkDSILRk4CN4EZDwEuAQ+BZTxVCbgH/ACaHh4/gUdykr3UODAvxqaeHkYQY1STwBXg9iAQEwcG14AFYMXBZ1c2ifttiAB3/icmugC4AFwWI1OLoeRlF7waUDaF6ALgihhXd1CydOo5cNUUoqsYmDr63E6I0wKxZhITi5xEGsB9U4hFz8LLMlQHhqhljCFEBWgIUQEaQlSAhhAVoCHEpMCgJoBdspjQrTUpccgptleBapEBHpPpXd6cvJQzYzkMxEUGWAZO9vG6U3klYJEBDpIDWt1/U5Qk0iJbvq8N+42L4oENsmsfMNi1mRjYAM4UFWC7PKkOOOrGgRdF9sBOT3QaRFUKUAEqQAWoUoAKUAH2rW3ADux0km05gBGwBzgnj5ECHGwadR64AUz5BjEEgBGwl2xR87pvEENJIjFwwEeIIWVhLyGOejVmA7jI8DqxOiECPAG+465ZaeQA273Io/JE5xCTnMA9JsZGjkfIPmB7DsQImAO+uYDYC+AYWe9cBTgC7HQIMQH2AwdzPPGaQL4FfLUNMenhedPAXeAE2fVP14km/sdzU8AF+XnWticmPbyvIvCmAsrQZeCseOBjiYlOzm4sw2UiwHn9buAScBqL13q6AbaAz7i5BcFU68Ai8H4Emb9vgE3gNfBOhsFGIPDqwBuJ3R9dxsBUDJjtysKuEsmYZNhDYkcevCrwwfZJTzYpfpeAT/IPuJ4pzQBPgaO+wcsrpFMxxvUQXpfMWvcRXmiLCd7BswGw1+2ur+T3wcML0QO9gmdjNWaYWgXe+gQvJIBrHXWeN/BCAdiUwn7eN3ghAEzJGiOfAV9sTtG2kgf+kiP10bgQAKY+G6e9MQpQASpABahSgApQASpAlQJUgApQAaoUoAIMSC7WA/M2vPFVk2zSseYCYD8b3vimCeB4rxHrAmC/G94EEe4Sn4zRJPK3RrbhjWPVyJo5W6P2QNMNb3zVIvAAaNi6faHE1iqZ/nyNxm/UEhZ+/DhJcwAAAABJRU5ErkJggg=="; WMEURMPT.icon_pur = "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gYGDREP9s0XhwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAWzSURBVFjDzVd9TFNXFP/d19cBpVihrciHUgSKiG4NCihqRqJuE0Ezif6x4BKTOVMxMWY6TbZsKjNmuKBGjXMsMZv4hyLOqMNPwA/8WLIqujEUQa1SX41ALcVS2vfe2R+MRjY+xRlvcnPvu7/zzvm9c8499z5gGM1ut/cY34i2Z8+eIcmzwQrW1dUhKSnJ/5ydnZ0sCMJYWZaVHMeJer3+z1OnTj3sxktKSpCXl/dqvurIkSP++ZIlS0YbjcbdCUbjk3jj+Pa4xPHP44yJz+MTEh4nJiaWZmZmpnTLrl69+tV5AACmTp2a29LS8nMgr1CNDeIgh72P6wHzuzD7SjxwS3BLcmeIWl24bNmyArPZ7Dt06BAWL148PAKlpaXsm4KCj1wdnr0Jaj64JnK3H4vkWhCpaMXvvgQAQMaTlbjlFH1qVeCa/PwVOzdu3EQ2m61P3YrBEGhqanrb4Xq+NzZYEX4rqst4BGtGCHNDIB2ICCHMjXao8EidhenyKcV9V2fKvcbGS7W1tbby8nIcOHCgV91cf4avX7+OOXPmvOX1+cyM5HFS9Co/VrEKEEgHoGus/DwIEQoHAKBKvwu6AC7c4Xi2kYiQlZXVp41+CaSkpMBkMundnd65U0KVMChb/VjI5HdhP5EJAHh8ZBpCZ86DIIX68fFqHl6fd9aWLVti+rPBDeR+p9MZ0uHpjKnS78JJ71T/+pgltZC9HthPZIIpeIzOPt/jvdPanVAw8BaL5cNhEXC73UREvYP+depDOYPT6WTDIqDX60nJ8/LH7at6rD/6KQlcQBBGZ58HSaI/HC82kQgGg8E+LAL19fVNgW8pT15u9XXlBX8XAOC6ednv9siF1+C4+GsPfIqQDzAmFBcX/9LlLBo6gcbGRiQnJ3vUqqCzNo8kA4AghQEAJhSF9ZBNKgzu2jliVz144JagUqm2MMY8AMAYGzqBuLg4FBYWyiqV6liAQnEz1roCAmkHrBsZQj46JPpDr9MdBICampqXDwEAVFZW3meQv232yu7ByN9wiQgOCvxh0sSJTwHAZDK9PIF9+/YBAG7X3T6oYLilv2fuP2kbzQhS8jWj9Pryom3baCD9AxJYunQpumMYYzB87ZVk15Sm3klMt5nRQeTWjBixvaKi4t5gvDUggZaWFmzduhUAcOb06TMajabojlvqVfavDoKSsf1Xr14t+d9uPCUl+6NTJk++k5SYSOHzqvw9dUIiGY1G6fDhwxkvylsslpe7D5SVlSE3NxdlZWVcUVFRpqPVsZxXKEYQwHs8HSaZcTqtksEa+z1SrctR52OQO73SSI3mvCiKok8Ur0RERmyvqqpq++dERXR09OAInKs4h9mzZgMATO+YkgVBqBhtiA3XhI4EEcArefg63CQ02ZiOB5pFQkR0NPGBQUwSJRARrPV3IPt8xYsWLVq7fcd2Z3c4tVpt/wSOHz+OnJycrjowLi6mubn5gGlaxvSl69YhRKMhgBgYh3bnM/xYUACb9QEixoxB3mdrMCoyCgCBcRzdunKF7dm0CSA6ZF5pXr7hqw3PhhTr9LT0GM0IzY0FOfOppbWVOkVJ9vh81N19skz19fWUnp5OZ8+dI58sUw9ckuTfrl2jcYZxXp1WV0BE/Se81Wr1z9NS0wzaMG21aUoq3XvaLDc5nfTQ4fhPt7W10Y27DWRztvWKP25z0cmLlygqKlqKNcRuyF2YqwSABfMX9AxBQ0MD4uPjAQBzP5g70mKxHAwMDn7vky++hEavhyTJ6K2UEwEKBQdZlvs8rTkOdOHoUXbh2LFnAQEBnwp2oRQAsrKyUF5e3jMH0tPSk2pra7/jOC4rWK1GoFoNkmlY25YxQJZltDkckESxk4jWutpdO7tx/kXhGTNnTJ44aWIDgB39HaEvR4QBAON5Xq/T6cZs3rz5kR+srq5+7b9w69ev/3e86LUZf5223vz2N1n2qCrgsdjvAAAAAElFTkSuQmCC"; WMEURMPT.shuffleArray = function(array) { for (var i = array.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = array[i]; array[i] = array[j]; array[j] = temp; } return array; }; WMEURMPT.getElementsByClassName = function(classname, node) { if (!node) { node = document.getElementsByTagName("body")[0]; } var a = []; var re = new RegExp("\\b" + classname + "\\b"); var els = node.getElementsByTagName("*"); for (var i = 0, j = els.length; i < j; i++) { if (re.test(els[i].className)) { a.push(els[i]); } } return a; }; WMEURMPT.getElementByDataID = function(dID, node) { if (!node) { node = document.getElementsByTagName("body")[0]; } var a = []; var re = new RegExp("\\b" + dID + "\\b"); var els = node.getElementsByTagName("*"); for (var i = 0, j = els.length; i < j; i++) { if (re.test(els[i].getAttribute("data-id"))) { a.push(els[i]); } } return a; }; WMEURMPT.removeChildElements = function(node) { if (node.id != "") { delete WMEURMPT.dom[node.id]; } while (node.firstChild) { WMEURMPT.removeChildElements(node.firstChild); node.removeChild(node.firstChild); } }; WMEURMPT.createElement = function(type, id) { var el = document.createElement(type); if (typeof id !== "undefined" && id != null) { el.id = id; WMEURMPT.dom[id] = el; } return el; }; WMEURMPT.getId = function(node) { if (WMEURMPT.dom.hasOwnProperty(node) == true && WMEURMPT.dom[node] != null) { return WMEURMPT.dom[node]; } var el = document.getElementById(node); if (el != null) { WMEURMPT.dom[node] = el; } return el; }; WMEURMPT.logDebug = function(msg, obj) { if (WMEURMPT.isDebug) { WMEURMPT.log("UR-MP Tracking - DEBUG - " + msg, obj); } }; WMEURMPT.log = function(msg, obj) { if (obj == null) { console.log("UR-MP Tracking v" + WMEURMPT.urmpt_version + " - " + msg); } else { console.debug("UR-MP Tracking v" + WMEURMPT.urmpt_version + " - " + msg + " ", obj); } }; WMEURMPT.setTimeoutArgs = function(func, args, delay) { window.setTimeout(function() { var json_args = JSON.stringify(args); return function() { var args = JSON.parse(json_args); func.apply(this, args); }; }(), delay); }; WMEURMPT.getFunctionWithArgs = function(func, args) { return function() { var json_args = JSON.stringify(args); return function() { var args = JSON.parse(json_args); func.apply(this, args); }; }(); }; WMEURMPT.invertObject = function(obj) { var new_obj = {}; for (var prop in obj) { if (obj.hasOwnProperty(prop)) { new_obj[obj[prop]] = prop; } } return new_obj; }; WMEURMPT.listToObject = function(arr) { var o = {}; for (var i = 0; i < arr.length; ++i) { o[arr[i].id] = i; } return o; }; WMEURMPT.objectToList = function(arr) { var l = []; for (var i in arr) { l.push(arr[i]); } l.sort(); return l; }; WMEURMPT.getDuration = function(ts) { var aDate = new Date; var now = aDate.getTime(); var duration = now - ts; aDate.setHours(0); aDate.setMinutes(0); aDate.setSeconds(0); aDate.setMilliseconds(0); var startOfDay = aDate.getTime(); if (duration < now - startOfDay) { return 0; } return Math.ceil((duration - (now - startOfDay)) / 86400000); }; WMEURMPT.escapeHtml = function(text) { return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'"); }; WMEURMPT.decimalToHex = function(d, padding) { var hex = Number(d).toString(16); padding = typeof padding === "undefined" || padding === null ? padding = 2 : padding; while (hex.length < padding) { hex = "0" + hex; } return hex; }; WMEURMPT.isDescendant = function(parent, child) { var node = child.parentNode; while (node != null) { if (node == parent) { return true; } node = node.parentNode; } return false; }; WMEURMPT.restackUR = function() { WMEURMPT.logDebug("restackUR - stackedURList", WMEURMPT.stackedURList); if (WMEURMPT.stackedURList.length === 0) { return; } for (var i = 0; i < WMEURMPT.stackedURList.length; i++) { var id = parseInt(WMEURMPT.stackedURList[i].id); var URAtt = WMEURMPT.wazeModel.mapUpdateRequests.objects[id].attributes; URAtt.geometry.x = WMEURMPT.stackedURList[i].oriX; URAtt.geometry.y = WMEURMPT.stackedURList[i].oriY; if (URAtt.geometry.oriX !== undefined) { delete URAtt.geometry.oriX; } if (URAtt.geometry.oriY !== undefined) { delete URAtt.geometry.oriY; } } WMEURMPT.stackedURList = []; }; WMEURMPT.bootstrapURT = function() { window.setTimeout(WMEURMPT.initialize, 500); }; WMEURMPT.initialize = function() { WMEURMPT.log("init"); WMEURMPT.initializeWazeObjects(); WMEURMPT.log("init done"); }; WMEURMPT.initializeElements = function() { var userInfo = WMEURMPT.getId("user-info"); if (userInfo == null) { window.setTimeout(WMEURMPT.initializeElements, 500); return; } var navTabs = userInfo.getElementsByTagName("ul"); if (navTabs.length == 0) { window.setTimeout(WMEURMPT.initializeElements, 500); return; } if (typeof navTabs[0] === "undefined") { window.setTimeout(WMEURMPT.initializeElements, 500); return; } var tabContents = userInfo.getElementsByTagName("div"); if (tabContents.length == 0) { window.setTimeout(WMEURMPT.initializeElements, 500); return; } if (typeof tabContents[0] === "undefined") { window.setTimeout(WMEURMPT.initializeElements, 500); return; } WMEURMPT.load(); W.prefs.on("change:isImperial", function() { WMEURMPT.unregisterEvents(); }); }; WMEURMPT.waitForObject = function(varName, shortcutName) { var obj = null; obj = eval("typeof(" + varName + ")"); if (obj === "undefined") { WMEURMPT.log(varName + " KO"); window.setTimeout(WMEURMPT.waitForObject.caller, 1000); return false; } WMEURMPT.logDebug(varName + " OK"); if (shortcutName != null) { eval("WMEURMPT." + shortcutName + "=" + varName); } return true; }; WMEURMPT.initializeWazeObjects = function() { var objectToCheck = [{o:"W.map", s:"wazeMap"}, {o:"W.model", s:"wazeModel"}, {o:"W.loginManager", s:"loginManager"}, {o:"W.controller", s:"wazeController"}, {o:"W.Config.api_base", s:"wazeConfigApiBase"}, {o:"W.Config.paths.features", s:"wazeConfigApiFeatures"}, {o:"W.Config.paths.updateRequestSessions", s:"wazeConfigApiUpdateRequestSessions"}, {o:"OL", s:"OpenLayers"}, {o:"W.loginManager.user", s:"me"}, {o:"W.loginManager.user.rank", s:"ul"}, {o:"W.loginManager.user.isAreaManager", s:"uam"}]; for (var i = 0; i < objectToCheck.length; i++) { var path = objectToCheck[i].o.split("."); var object = window; for (var j = 0; j < path.length; j++) { object = object[path[j]]; if (typeof object == "undefined" || object == null) { window.setTimeout(WMEURMPT.initializeWazeObjects, 1000); return; } else { WMEURMPT[objectToCheck[i].s] = object; } } } WMEURMPT.ul = (WMEURMPT.ul + 1) * 2; WMEURMPT.initializeElements(); }; WMEURMPT.registerEvents = function() { WMEURMPT.wazeMap.olMap.events.register("moveend", null, WMEURMPT.mapMoveEnd); WMEURMPT.wazeMap.olMap.events.register("zoomend", null, WMEURMPT.mapZoomEnd); WMEURMPT.wazeModel.events.register("mergeend", null, WMEURMPT.setupListener); WMEURMPT.wazeController.events.register("savestart", null, WMEURMPT.saveStarted); WMEURMPT.wazeController.events.register("saveend", null, WMEURMPT.saveEnded); WMEURMPT.wazeModel.mapUpdateRequests.on("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapUpdateRequests.on("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapUpdateRequests.on("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.problems.on("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.problems.on("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.problems.on("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapComments.on("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapComments.on("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapComments.on("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.venues.on("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.venues.on("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.venues.on("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.actionManager.events.register("afteraction", null, WMEURMPT.newActionAdded); WMEURMPT.wazeModel.actionManager.events.register("afterundoaction", null, WMEURMPT.newActionAdded); WMEURMPT.wazeModel.actionManager.events.register("afterclearaction", null, WMEURMPT.newActionAdded); window.setTimeout(WMEURMPT.setupListener, 500); }; WMEURMPT.unregisterEvents = function() { WMEURMPT.wazeMap.olMap.events.unregister("moveend", null, WMEURMPT.mapMoveEnd); WMEURMPT.wazeMap.olMap.events.unregister("zoomend", null, WMEURMPT.mapZoomEnd); WMEURMPT.wazeModel.events.unregister("mergeend", null, WMEURMPT.setupListener); WMEURMPT.wazeController.events.unregister("savestart", null, WMEURMPT.saveStarted); WMEURMPT.wazeController.events.unregister("saveend", null, WMEURMPT.saveEnded); WMEURMPT.wazeModel.mapUpdateRequests.off("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapUpdateRequests.off("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapUpdateRequests.off("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.problems.off("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.problems.off("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.problems.off("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapComments.off("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapComments.off("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.mapComments.off("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.venues.off("objectschanged", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.venues.off("objectsadded", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.venues.off("objectsremoved", WMEURMPT.newDataAvailableStarts); WMEURMPT.wazeModel.actionManager.events.unregister("afteraction", null, WMEURMPT.newActionAdded); WMEURMPT.wazeModel.actionManager.events.unregister("afterundoaction", null, WMEURMPT.newActionAdded); WMEURMPT.wazeModel.actionManager.events.unregister("afterclearaction", null, WMEURMPT.newActionAdded); }; WMEURMPT.initManagedArea = function() { for (var a = 0; a < WMEURMPT.loginManager.user.areas.length; a++) { if (WMEURMPT.loginManager.user.areas[a].type == "drive") { for (var c = 0; c < WMEURMPT.loginManager.user.areas[a].geometry.components.length; c++) { WMEURMPT.loginManager.user.areas[a].geometry.components[c].calculateBounds(); WMEURMPT.driveArea.push(WMEURMPT.loginManager.user.areas[a].geometry.components[c]); } } if (WMEURMPT.loginManager.user.areas[a].type == "managed") { for (var c = 0; c < WMEURMPT.loginManager.user.areas[a].geometry.components.length; c++) { WMEURMPT.loginManager.user.areas[a].geometry.components[c].calculateBounds(); WMEURMPT.managedAreas.push(WMEURMPT.loginManager.user.areas[a].geometry.components[c]); } } } WMEURMPT.logDebug("WMEURMPT.driveArea", WMEURMPT.driveArea); WMEURMPT.logDebug("WMEURMPT.managedAreas", WMEURMPT.managedAreas); }; WMEURMPT.initCountryList = function() { var countryList = new WMEURMPT.URT_AREA; countryList.category = "country"; countryList.getCategoryElementsFromServer(WMEURMPT.newCountryListAvailable); }; WMEURMPT.newCountryListAvailable = function(countryList) { var countryListSelect = WMEURMPT.getId("urmpt-countryList"); var optionList = ""; for (var c = 0; c < countryList.length; c++) { optionList += '<option value="' + countryList[c].name.replace(/ /g, "_") + '">' + countryList[c].name + "</option>"; optionList += WMEURMPT.rescurseSubset(countryList[c], ""); } countryListSelect.innerHTML += optionList; }; WMEURMPT.rescurseSubset = function(subset, parentPath) { var optionList = ""; if (typeof subset.set !== "undefined") { for (var i = 0; i < subset.set.length; i++) { var fullPath = parentPath + subset.name + "->" + subset.set[i].name; optionList += '<option value="' + fullPath.replace(/ /g, "_") + '">' + fullPath + "</option>"; optionList += WMEURMPT.rescurseSubset(subset.set[i], (parentPath == "" ? "" : parentPath + "->") + subset.name + "->"); } } else { for (var i = 0; i < subset.subset.length; i++) { optionList += WMEURMPT.rescurseSubset(subset.subset[i], (parentPath == "" ? "" : parentPath + "->") + subset.name + "->"); } } return optionList; }; WMEURMPT.errorOnCountryServer = function() { var countryListSelect = WMEURMPT.getId("urmpt-countryList"); var errorMessage = WMEURMPT.createElement("span"); errorMessage.style.color = "#FF0000"; errorMessage.innerHTML = "Error while getting list of countries<br/>You can try later by reloading WME<br/>Sorry for the inconvenience."; countryListSelect.parentNode.parentNode.replaceChild(errorMessage, countryListSelect.parentNode); }; WMEURMPT.wazeMapAreaToOLPolygons = function(geometry) { var polygons = []; if (geometry.type == "Polygon") { polygons.push(WMEURMPT.lonlatArrayToxyOpenLayersPolygons(geometry.coordinates)); polygons[polygons.length - 1].calculateBounds(); } if (geometry.type == "MultiPolygon") { for (var p = 0; p < geometry.coordinates.length; p++) { polygons.push(WMEURMPT.lonlatArrayToxyOpenLayersPolygons(geometry.coordinates[p])); polygons[polygons.length - 1].calculateBounds(); } } return polygons; }; WMEURMPT.bintreeGeometry = function(poly) { var pointList = null; if (poly.CLASS_NAME == "OpenLayers.Geometry.LinearRing") { pointList = poly.components; } else { pointList = poly.components[0].components; } if (pointList.length <= 15) { return; } var split = "x"; var notSplit = "y"; var splitValue = (poly.bounds.right + poly.bounds.left) / 2.0; if (poly.bounds.right - poly.bounds.left < poly.bounds.top - poly.bounds.bottom) { split = "y"; var notSplit = "x"; var splitValue = (poly.bounds.top + poly.bounds.bottom) / 2.0; } var intersection = []; for (var p = 0; p < pointList.length - 1; p++) { var point = pointList[p]; var next = pointList[p + 1]; if (point[split] <= splitValue && next[split] > splitValue || point[split] > splitValue && next[split] <= splitValue) { intersection.push(p); } } for (var j = 0; j < intersection.length; j++) { var olPoint = new OpenLayers.Geometry.Point(0, 0); var p1 = pointList[intersection[j]]; var p2 = pointList[intersection[j] + 1]; olPoint[split] = splitValue; if (p2[split] - p1[split] == 0) { olPoint[notSplit] = p1[notSplit]; } else { var ratio = (splitValue - p1[split]) / (p2[split] - p1[split]); olPoint[notSplit] = ratio * (p2[notSplit] - p1[notSplit]) + p1[notSplit]; } intersection[j] = {index:intersection[j], point:olPoint}; } intersection.sort(function(a, b) { return a.point[notSplit] > b.point[notSplit]; }); var bintree = [[], []]; var currentL = -1; var currentR = -1; var intersectionIndices = intersection.map(function(e) { return e.index; }); for (var p = 0; p < pointList.length - 1; p++) { var i = (p + intersection[0].index) % (pointList.length - 1); if (pointList[i][split] <= splitValue) { if (currentL == -1) { bintree[0].push({i:[], c:false}); currentL = 0; } bintree[0][currentL].i.push(i); var intersectionIndex = intersectionIndices.indexOf(i); if (intersectionIndex != -1) { bintree[0][currentL].i.push(intersectionIndex * -1 - 1); var found = false; for (b = 0; b < bintree[1].length; b++) { if (intersectionIndex % 2 == 0 && (bintree[1][b].i[bintree[1][b].i.length - 1] + 1) * -1 == intersectionIndex + 1 || intersectionIndex % 2 == 1 && (bintree[1][b].i[bintree[1][b].i.length - 1] + 1) * -1 == intersectionIndex - 1) { found = true; currentR = b; break; } } if (!found) { bintree[1].push({i:[], c:false}); currentR = bintree[1].length - 1; } bintree[1][currentR].i.push(intersectionIndex * -1 - 1); } } else { if (currentR == -1) { bintree[1].push({i:[], c:false}); currentR = 0; } bintree[1][currentR].i.push(i); var intersectionIndex = intersectionIndices.indexOf(i); if (intersectionIndex != -1) { bintree[1][currentR].i.push(intersectionIndex * -1 - 1); var found = false; for (b = 0; b < bintree[0].length; b++) { if (intersectionIndex % 2 == 0 && (bintree[0][b].i[bintree[0][b].i.length - 1] + 1) * -1 == intersectionIndex + 1 || intersectionIndex % 2 == 1 && (bintree[0][b].i[bintree[0][b].i.length - 1] + 1) * -1 == intersectionIndex - 1) { found = true; currentL = b; break; } } if (!found) { bintree[0].push({i:[], c:false}); currentL = bintree[0].length - 1; } bintree[0][currentL].i.push(intersectionIndex * -1 - 1); } } } var bintree2 = [[], []]; poly.bintree = {left:null, right:null}; for (var t = 0; t < 2; t++) { var olPolyList = []; for (var i = 0; i < bintree[t].length; i++) { bintree2[t].push([]); for (var j = 0; j < bintree[t][i].i.length; j++) { if (bintree[t][i].i[j] < 0) { var intersectionIndex = (bintree[t][i].i[j] + 1) * -1; var olPoint = intersection[intersectionIndex].point; bintree2[t][i].push(olPoint); } else { bintree2[t][i].push(pointList[bintree[t][i].i[j]]); } } bintree2[t][i].push(bintree2[t][i][0]); olPolyList.push(new OpenLayers.Geometry.Polygon(new OpenLayers.Geometry.LinearRing(bintree2[t][i]))); olPolyList[olPolyList.length - 1].calculateBounds(); WMEURMPT.bintreeGeometry(olPolyList[olPolyList.length - 1]); } if (t == 0) { poly.bintree.left = new OpenLayers.Geometry.MultiPolygon(olPolyList); } else { poly.bintree.right = new OpenLayers.Geometry.MultiPolygon(olPolyList); } } poly.bintreeContainsPoint = function(point) { if (point.x < this.bounds.left || point.x > this.bounds.right || point.y < this.bounds.bottom || point.y > this.bounds.top) { return false; } if (this.hasOwnProperty("bintree") == true) { for (var i = 0; i < this.bintree.left.components.length; i++) { if (this.bintree.left.components[i].hasOwnProperty("bintree") == true) { if (this.bintree.left.components[i].bintreeContainsPoint(point) == true) { return true; } } else { if (this.bintree.left.components[i].containsPoint(point) == true) { return true; } } } for (var i = 0; i < this.bintree.right.components.length; i++) { if (this.bintree.right.components[i].hasOwnProperty("bintree") == true) { if (this.bintree.right.components[i].bintreeContainsPoint(point) == true) { return true; } } else { if (this.bintree.right.components[i].containsPoint(point) == true) { return true; } } } return false; } return this.containsPoint(point); }; }; WMEURMPT.lonlatArrayToxyOpenLayersPolygons = function(lontalArray) { var ol_polygons = []; for (var p = 0; p < lontalArray.length; p++) { var ol_points = []; for (var pt = 0; pt < lontalArray[p].length - 1; pt++) { var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(lontalArray[p][pt][0], lontalArray[p][pt][1]); ol_points.push(new OpenLayers.Geometry.Point(xy.lon, xy.lat)); } ol_polygons.push(new OpenLayers.Geometry.LinearRing(ol_points)); } if (ol_polygons.length >= 1) { var ol_linearRing = ol_polygons[0]; return new OpenLayers.Geometry.Polygon([ol_linearRing]); } return null; }; WMEURMPT.isInAreas = function(lonlat) { for (var c = 0; c < WMEURMPT.areaList.country.length; c++) { if (WMEURMPT.areaList.country[c].isInside(lonlat)) { return true; } } for (var c = 0; c < WMEURMPT.areaList.custom.length; c++) { if (WMEURMPT.areaList.custom[c].isInside(lonlat)) { return true; } } return false; }; WMEURMPT.inScreenUpdatableArea = function(xy) { if (WMEURMPT.wazeModel.userAreas.objects.hasOwnProperty("managed")) { if (WMEURMPT.wazeModel.userAreas.objects.managed.geometry.containsPoint(xy)) { return true; } } if (WMEURMPT.wazeModel.userAreas.objects.hasOwnProperty("drives")) { if (WMEURMPT.wazeModel.userAreas.objects.drives.geometry.containsPoint(xy)) { return true; } } return false; }; WMEURMPT.isInsideDriveArea = function(lon, lat) { var lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(lon, lat); var xy = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); var inside = false; { for (var a = 0; a < WMEURMPT.driveArea.length; a++) { if (xy.x >= WMEURMPT.driveArea[a].bounds.left && xy.x <= WMEURMPT.driveArea[a].bounds.right && xy.y >= WMEURMPT.driveArea[a].bounds.bottom && xy.y <= WMEURMPT.driveArea[a].bounds.top && WMEURMPT.driveArea[a].containsPoint(xy)) { return true; } } } return false; }; WMEURMPT.isInsideManagedArea = function(lon, lat) { var lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(lon, lat); var xy = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); var inside = false; { for (var a = 0; a < WMEURMPT.managedAreas.length; a++) { if (xy.x >= WMEURMPT.managedAreas[a].bounds.left && xy.x <= WMEURMPT.managedAreas[a].bounds.right && xy.y >= WMEURMPT.managedAreas[a].bounds.bottom && xy.y <= WMEURMPT.managedAreas[a].bounds.top && WMEURMPT.managedAreas[a].containsPoint(xy)) { return true; } } } return false; }; WMEURMPT.getSelectedProblem = function() { try { for (var m in WMEURMPT.wazeMap.problemLayer.featureMarkers) { if (WMEURMPT.wazeMap.problemLayer.featureMarkers.hasOwnProperty(m)) { if (WMEURMPT.wazeMap.problemLayer.featureMarkers[m].marker.icon.imageDiv.className.indexOf("selected") != -1) { return m; } } } } catch (e) { WMEURMPT.log("error while getting selected problem: ", e); } return null; }; WMEURMPT.getSelectedUR = function() { try { for (var m in WMEURMPT.wazeMap.updateRequestLayer.featureMarkers) { if (WMEURMPT.wazeMap.updateRequestLayer.featureMarkers.hasOwnProperty(m)) { if (WMEURMPT.wazeMap.updateRequestLayer.featureMarkers[m].marker.icon.imageDiv.className.indexOf("selected") != -1) { return m; } } } } catch (e) { WMEURMPT.log("error while getting selected UR: ", e); } return null; }; WMEURMPT.getSelectedMC = function() { if (W.selectionManager.getSelectedFeatures().length == 1 && W.selectionManager.getSelectedFeatures()[0].model.type == "mapComment") { return W.selectionManager.getSelectedFeatures()[0].model.attributes.id; } return null; }; WMEURMPT.getSelectedPUR = function() { try { for (var m in W.map.placeUpdatesLayer.markers) { if (WMEURMPT.wazeMap.placeUpdatesLayer.markers.hasOwnProperty(m)) { if (WMEURMPT.wazeMap.placeUpdatesLayer.markers[m].model.selected === true) { return m; } } } for (var m in WMEURMPT.wazeMap.parkingPlaceUpdatesLayer.markers) { if (WMEURMPT.wazeMap.parkingPlaceUpdatesLayer.markers.hasOwnProperty(m)) { if (WMEURMPT.wazeMap.parkingPlaceUpdatesLayer.markers[m].model.selected === true) { return m; } } } for (var m in WMEURMPT.wazeMap.residentialPlaceUpdatesLayer.markers) { if (WMEURMPT.wazeMap.residentialPlaceUpdatesLayer.markers.hasOwnProperty(m)) { if (WMEURMPT.wazeMap.residentialPlaceUpdatesLayer.markers[m].model.selected === true) { return m; } } } } catch (e) { WMEURMPT.log("error while getting selected PUR: ", e); } return null; }; WMEURMPT.updateRequestSessions = function() { var ids = []; for (var i in WMEURMPT.wazeModel.mapUpdateRequests.objects) { if (WMEURMPT.wazeModel.updateRequestSessions.objects[i] == null) { ids.push(i); } } if (ids.length != 0) { url = "https://" + document.location.host + WMEURMPT.wazeConfigApiUpdateRequestSessions + "?ids=" + ids.join(","); if (XMLHttpRequest) { xhr3_object = new XMLHttpRequest; } else { if (ActiveXObject) { xhr3_object = new ActiveXObject("Microsoft.XMLHTTP"); } } var URcomments = null; xhr3_object.open("GET", url, false); xhr3_object.ontimeout = function() { URcomments = null; }; xhr3_object.onerror = function() { URcomments = null; }; xhr3_object.onreadystatechange = function() { if (xhr3_object.readyState == 4) { var r = xhr3_object.responseText; try { URcomments = JSON.parse(r); } catch (e) { WMEURMPT.log("Error: can't read server response: ", e); WMEURMPT.log("Response from server: ", r); WMEURMPT.log("Query: ", url); URcomments = null; } } else { URcomments = null; } }; xhr3_object.send(null); WMEURMPT.logDebug("UR comments: ", URcomments); if (URcomments != null) { for (var j = 0; j < URcomments.updateRequestSessions.objects.length; j++) { var urId = URcomments.updateRequestSessions.objects[j].id; var ur = WMEURMPT.getURFromId(urId); if (ur != null) { ur.data.session = URcomments.updateRequestSessions.objects[j]; ur.data.session.users = URcomments.users; for (var c = 0; c < ur.data.session.comments.length; c++) { var userID = ur.data.session.comments[c].userID; var userName = "Unknown"; if (userID == WMEURMPT.me.id) { userName = WMEURMPT.me.userName; if (c == ur.data.session.comments.length - 1) { ur.lastVisitCommentsCount = ur.data.session.comments.length; } } if (userID == -1) { userName = "Reporter"; } else { for (var u = 0; u < ur.data.session.users.objects.length; u++) { if (ur.data.session.users.objects[u].id == userID) { userName = ur.data.session.users.objects[u].userName; break; } } } ur.data.session.comments[c].userName = userName; } } } } } }; WMEURMPT.settingsSetURDescriptionWidth = function() { WMEURMPT.URDescriptionMaxLength = this.value; WMEURMPT.saveOptions(); }; WMEURMPT.settingsSetMPDescriptionWidth = function() { WMEURMPT.MPDescriptionMaxLength = this.value; WMEURMPT.saveOptions(); }; WMEURMPT.settingsSetMCSubjectWidth = function() { WMEURMPT.MCSubjectMaxLength = this.value; WMEURMPT.saveOptions(); }; WMEURMPT.settingsSetMCBodyWidth = function() { WMEURMPT.MCBodyMaxLength = this.value; WMEURMPT.saveOptions(); }; WMEURMPT.settingsSetURTagList = function() { WMEURMPT.taggedURList = this.value.split(";"); WMEURMPT.saveOptions(); }; WMEURMPT.settingsSetPURCategoriesWidth = function() { WMEURMPT.PURCategoriesMaxLength = this.value; WMEURMPT.saveOptions(); }; WMEURMPT.settingsSetPURNameWidth = function() { WMEURMPT.PURNameMaxLength = this.value; WMEURMPT.saveOptions(); }; WMEURMPT.isURFiltered = function(ur) { var invert = function(a) { return a; }; if (WMEURMPT.getId("urt-checkbox-filterInvert").checked == true) { invert = function(a) { return !a; }; } return invert(WMEURMPT.isURFiltered2(ur)); }; WMEURMPT.isURFiltered2 = function(ur) { var userId = WMEURMPT.loginManager.user.id; if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideClosed && ur.data.open == false) { return true; } if (ur.data.open == false && WMEURMPT.ul < WMEURMPT.rl4cp) { return true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideLastCommentFromEditor) { if (ur.data.session.comments.length == 0 || ur.data.session.comments[ur.data.session.comments.length - 1].userID != -1) { return true; } } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideNoNewComment) { if (ur.data.session.comments.length <= ur.lastVisitCommentsCount) { return true; } } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideWithCommentCount && ur.data.session.comments.length > WMEURMPT.currentURCommentsCount) { return true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideOutOfMyDriveArea) { if (!WMEURMPT.isInsideDriveArea(ur.lonlat.lon, ur.lonlat.lat)) { return true; } } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { if (!WMEURMPT.isInsideManagedArea(ur.lonlat.lon, ur.lonlat.lat)) { return true; } } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideVisited && ur.alreadyVisited) { return true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideBlacklisted && ur.blackListed) { return true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideWhitelisted && !ur.blackListed) { return true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideGE && ur.data.type == 10) { return true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideType && ur.data.type != WMEURMPT.currentUROnlyType) { return true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideTagged) { if (ur.data.description != null) { for (var i = 0; i < WMEURMPT.taggedURList.length; i++) { if (ur.data.description.toLowerCase().indexOf(WMEURMPT.taggedURList[i].toLowerCase()) != -1) { return true; } } } for (var c = 0; c < ur.data.session.comments.length; c++) { for (var i = 0; i < WMEURMPT.taggedURList.length; i++) { if (ur.data.session.comments[c].text.toLowerCase().indexOf(WMEURMPT.taggedURList[i].toLowerCase()) != -1) { return true; } } } } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideWithoutCommentFromMe) { var found = false; for (var c = 0; c < ur.data.session.comments.length; c++) { if (ur.data.session.comments[c].userID == userId) { found = true; break; } } if (!found) { return true; } } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideNotKW) { var found = false; if (ur.data.description != null && ur.data.description.toLowerCase().indexOf(WMEURMPT.currentURKeyWord.toLowerCase()) != -1) { found = true; } if (!found && ur.data.open == false && ur.data.hasOwnProperty("resolvedByName") && ur.data.resolvedByName.toLowerCase() == WMEURMPT.currentURKeyWord.toLowerCase()) { found = true; } if (!found && ur.data.session.comments.length > 0) { for (var i = 0; i < ur.data.session.comments.length; i++) { if (ur.data.session.comments[i].hasOwnProperty("userName") == false) { continue; } if (typeof ur.data.session.comments[i].userName != "string") { continue; } if (ur.data.session.comments[i].userName.toLowerCase() == WMEURMPT.currentURKeyWord.toLowerCase()) { found = true; break; } else { if (ur.data.session.comments[i].text.toLowerCase().indexOf(WMEURMPT.currentURKeyWord.toLowerCase()) != -1) { found = true; break; } } } } if (!found) { return true; } } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideArea) { var xy = new OpenLayers.Geometry.Point(ur.lonlat.lon, ur.lonlat.lat); for (var i = 0; i < WMEURMPT.areaList.custom.length; i++) { if (WMEURMPT.areaList.custom[i].name == WMEURMPT.currentUROnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.custom[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } for (var i = 0; i < WMEURMPT.areaList.country.length; i++) { if (WMEURMPT.areaList.country[i].name == WMEURMPT.currentUROnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.country[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } } return false; }; WMEURMPT.isMPFiltered = function(mp) { var userId = WMEURMPT.loginManager.user.id; if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideClosed && mp.data.open == false) { return true; } if (mp.data.open == false && WMEURMPT.ul < WMEURMPT.rl4cp) { return true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideOutOfMyDriveArea) { if (!WMEURMPT.isInsideDriveArea(mp.lonlat.lon, mp.lonlat.lat)) { return true; } } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { if (!WMEURMPT.isInsideManagedArea(mp.lonlat.lon, mp.lonlat.lat)) { return true; } } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideVisited && mp.alreadyVisited) { return true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideBlacklisted && mp.blackListed) { return true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideWhitelisted && !mp.blackListed) { return true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideType) { if (WMEURMPT.currentMPOnlyType == 0 && mp.type != "turnProblem") { return true; } if (WMEURMPT.currentMPOnlyType != 0 && mp.data.subType != WMEURMPT.currentMPOnlyType) { return true; } } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideArea) { var xy = new OpenLayers.Geometry.Point(mp.lonlat.lon, mp.lonlat.lat); for (var i = 0; i < WMEURMPT.areaList.custom.length; i++) { if (WMEURMPT.areaList.custom[i].name == WMEURMPT.currentMPOnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.custom[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } for (var i = 0; i < WMEURMPT.areaList.country.length; i++) { if (WMEURMPT.areaList.country[i].name == WMEURMPT.currentMPOnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.country[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } } return false; }; WMEURMPT.isMCFiltered = function(mc) { var userId = WMEURMPT.loginManager.user.id; if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideOutOfMyDriveArea) { if (!WMEURMPT.isInsideDriveArea(mc.lonlat.lon, mc.lonlat.lat)) { return true; } } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { if (!WMEURMPT.isInsideManagedArea(mc.lonlat.lon, mc.lonlat.lat)) { return true; } } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideVisited && mc.alreadyVisited) { return true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideBlacklisted && mc.blackListed) { return true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideWhitelisted && !mc.blackListed) { return true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideNotKW && (mc.data.subject != null && mc.data.subject.toLowerCase().indexOf(WMEURMPT.currentMCKeyWord.toLowerCase()) == -1) && (mc.data.body != null && mc.data.body.toLowerCase().indexOf(WMEURMPT.currentMCKeyWord.toLowerCase()) == -1)) { return true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideArea) { var xy = new OpenLayers.Geometry.Point(mc.lonlat.lon, mc.lonlat.lat); for (var i = 0; i < WMEURMPT.areaList.custom.length; i++) { if (WMEURMPT.areaList.custom[i].name == WMEURMPT.currentMCOnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.custom[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } for (var i = 0; i < WMEURMPT.areaList.country.length; i++) { if (WMEURMPT.areaList.country[i].name == WMEURMPT.currentMCOnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.country[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } } return false; }; WMEURMPT.isPURFiltered = function(pur) { var userId = WMEURMPT.loginManager.user.id; if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideOutOfMyDriveArea) { if (!WMEURMPT.isInsideDriveArea(pur.lonlat.lon, pur.lonlat.lat)) { return true; } } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { if (!WMEURMPT.isInsideManagedArea(pur.lonlat.lon, pur.lonlat.lat)) { return true; } } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideVisited && pur.alreadyVisited) { return true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideBlacklisted && pur.blackListed) { return true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideWhitelisted && !pur.blackListed) { return true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideNotKW && (pur.data.name != null && pur.data.name.toLowerCase().indexOf(WMEURMPT.currentPURKeyWord.toLowerCase()) == -1)) { return true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideCategorie && WMEURMPT.getPURCategoriesFromCategories(pur.data.categories) != WMEURMPT.currentPUROnlyCategorie) { return true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideArea) { var xy = new OpenLayers.Geometry.Point(pur.lonlat.lon, pur.lonlat.lat); for (var i = 0; i < WMEURMPT.areaList.custom.length; i++) { if (WMEURMPT.areaList.custom[i].name == WMEURMPT.currentPUROnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.custom[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } for (var i = 0; i < WMEURMPT.areaList.country.length; i++) { if (WMEURMPT.areaList.country[i].name == WMEURMPT.currentPUROnlyArea) { var inside = false; var filterArea = WMEURMPT.areaList.country[i].geometryOL.geometry.components; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (inside == false) { return true; } } } } return false; }; WMEURMPT.toggleURFilter = function(chkboxId, filter) { var chkbox = WMEURMPT.getId(chkboxId); if (chkbox == null) { return; } if (chkbox.checked) { WMEURMPT.currentURFilter = WMEURMPT.currentURFilter | filter; } else { WMEURMPT.currentURFilter = WMEURMPT.currentURFilter & ~filter; } WMEURMPT.logDebug("current UR filter: " + WMEURMPT.currentURFilter); WMEURMPT.saveOptions(); WMEURMPT.updateIHMFromURList(); }; WMEURMPT.toggleURFilterHideClosed = function() { WMEURMPT.log('Switch UR filter "hide closed"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideClosed", WMEURMPT.URFilterList.hideClosed); }; WMEURMPT.toggleURFilterHideWithoutCommentFromMe = function() { WMEURMPT.log('Switch UR filter "hide without comments from me"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideWithoutCommentFromMe", WMEURMPT.URFilterList.hideWithoutCommentFromMe); }; WMEURMPT.toggleURFilterHideWithCommentCount = function() { WMEURMPT.log('Switch UR filter "hide more than ' + WMEURMPT.currentURCommentsCount + ' comments"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideWithCommentCount", WMEURMPT.URFilterList.hideWithCommentCount); }; WMEURMPT.toggleURFilterHideNoNewComment = function() { WMEURMPT.log('Switch UR filter "hide no new comment"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideNoNewComment", WMEURMPT.URFilterList.hideNoNewComment); }; WMEURMPT.toggleURFilterHideOutOfMyDriveArea = function() { WMEURMPT.log('Switch UR filter "hide out of my drive area"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideOutOfMyDriveArea", WMEURMPT.URFilterList.hideOutOfMyDriveArea); }; WMEURMPT.toggleURFilterHideOutOfMyManagedArea = function() { WMEURMPT.log('Switch UR filter "hide out of my managed area"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideOutOfMyManagedArea", WMEURMPT.URFilterList.hideOutOfMyManagedArea); }; WMEURMPT.toggleURFilterHideVisited = function() { WMEURMPT.log('Switch UR filter "hide visited"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideVisited", WMEURMPT.URFilterList.hideVisited); }; WMEURMPT.toggleURFilterHideBlacklisted = function() { WMEURMPT.log('Switch UR filter "hide blacklisted"'); if (WMEURMPT.getId("urt-checkbox-filterHideBlacklisted").checked) { WMEURMPT.getId("urt-checkbox-filterHideWhitelisted").checked = false; WMEURMPT.toggleURFilterHideWhitelisted(); } WMEURMPT.toggleURFilter("urt-checkbox-filterHideBlacklisted", WMEURMPT.URFilterList.hideBlacklisted); }; WMEURMPT.toggleURFilterHideWhitelisted = function() { WMEURMPT.log('Switch UR filter "hide white listed"'); if (WMEURMPT.getId("urt-checkbox-filterHideWhitelisted").checked) { WMEURMPT.getId("urt-checkbox-filterHideBlacklisted").checked = false; WMEURMPT.toggleURFilterHideBlacklisted(); } WMEURMPT.toggleURFilter("urt-checkbox-filterHideWhitelisted", WMEURMPT.URFilterList.hideWhitelisted); }; WMEURMPT.toggleURFilterHideGE = function() { WMEURMPT.log('Switch UR filter "hide General Error"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideGE", WMEURMPT.URFilterList.hideGE); }; WMEURMPT.toggleURFilterHideNotKW = function() { WMEURMPT.log('Switch UR filter "hide not matching keyword": ' + WMEURMPT.currentURKeyWord); WMEURMPT.toggleURFilter("urt-checkbox-filterHideNotKW", WMEURMPT.URFilterList.hideNotKW); }; WMEURMPT.toggleURFilterHideLimitTo = function() { WMEURMPT.log('Switch UR filter "hide over limit: "' + WMEURMPT.currentURLimitTo); WMEURMPT.toggleURFilter("urt-checkbox-filterHideLimitTo", WMEURMPT.URFilterList.hideLimitTo); }; WMEURMPT.toggleURFilterHideOnlyType = function() { WMEURMPT.log('Switch UR filter "hide all but type: "' + WMEURMPT.currentUROnlyType); WMEURMPT.toggleURFilter("urt-checkbox-filterHideOnlyType", WMEURMPT.URFilterList.hideType); }; WMEURMPT.toggleURFilterHideOnlyArea = function() { WMEURMPT.log('Switch UR filter "hide all but area: "' + WMEURMPT.currentUROnlyArea); WMEURMPT.toggleURFilter("urt-checkbox-filterHideOnlyArea", WMEURMPT.URFilterList.hideArea); }; WMEURMPT.toggleURFilterHideLastCommentFromEditor = function() { WMEURMPT.log('Switch UR filter "hide last comment from editor"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideLastCommentFromEditor", WMEURMPT.URFilterList.hideLastCommentFromEditor); }; WMEURMPT.toggleURFilterHideTagged = function() { WMEURMPT.log('Switch UR filter "hide tagged"'); WMEURMPT.toggleURFilter("urt-checkbox-filterHideTagged", WMEURMPT.URFilterList.hideTagged); }; WMEURMPT.toggleMPFilter = function(chkboxId, filter) { var chkbox = WMEURMPT.getId(chkboxId); if (chkbox == null) { return; } if (chkbox.checked) { WMEURMPT.currentMPFilter = WMEURMPT.currentMPFilter | filter; } else { WMEURMPT.currentMPFilter = WMEURMPT.currentMPFilter & ~filter; } WMEURMPT.log("current MP filter: " + WMEURMPT.currentMPFilter); WMEURMPT.updateIHMFromMPList(); }; WMEURMPT.toggleMPFilterHideClosed = function() { WMEURMPT.log('Switch MP filter "hide closed"'); WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideClosed", WMEURMPT.MPFilterList.hideClosed); }; WMEURMPT.toggleMPFilterHideOutOfMyDriveArea = function() { WMEURMPT.log('Switch MP filter "hide out of my drive area"'); WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideOutOfMyDriveArea", WMEURMPT.MPFilterList.hideOutOfMyDriveArea); }; WMEURMPT.toggleMPFilterHideOutOfMyManagedArea = function() { WMEURMPT.log('Switch MP filter "hide out of my managed area"'); WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideOutOfMyManagedArea", WMEURMPT.MPFilterList.hideOutOfMyManagedArea); }; WMEURMPT.toggleMPFilterHideVisited = function() { WMEURMPT.log('Switch MP filter "hide visited"'); WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideVisited", WMEURMPT.MPFilterList.hideVisited); }; WMEURMPT.toggleMPFilterHideBlacklisted = function() { WMEURMPT.log('Switch MP filter "hide blacklisted"'); if (WMEURMPT.getId("mpt-checkbox-filterHideBlacklisted").checked) { WMEURMPT.getId("mpt-checkbox-filterHideWhitelisted").checked = false; WMEURMPT.toggleMPFilterHideWhitelisted(); } WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideBlacklisted", WMEURMPT.MPFilterList.hideBlacklisted); }; WMEURMPT.toggleMPFilterHideWhitelisted = function() { WMEURMPT.log('Switch MP filter "hide whitelisted"'); if (WMEURMPT.getId("mpt-checkbox-filterHideWhitelisted").checked) { WMEURMPT.getId("mpt-checkbox-filterHideBlacklisted").checked = false; WMEURMPT.toggleMPFilterHideBlacklisted(); } WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideWhitelisted", WMEURMPT.MPFilterList.hideWhitelisted); }; WMEURMPT.toggleMPFilterHideLimitTo = function() { WMEURMPT.log('Switch MP filter "hide over limit: "' + WMEURMPT.currentMPLimitTo); WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideLimitTo", WMEURMPT.MPFilterList.hideLimitTo); }; WMEURMPT.toggleMPFilterHideOnlyType = function() { WMEURMPT.log('Switch MP filter "hide all but type: "' + WMEURMPT.currentMPOnlyType); WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideOnlyType", WMEURMPT.MPFilterList.hideType); }; WMEURMPT.toggleMPFilterHideOnlyArea = function() { WMEURMPT.log('Switch MP filter "hide all but area: "' + WMEURMPT.currentMPOnlyArea); WMEURMPT.toggleMPFilter("mpt-checkbox-filterHideOnlyArea", WMEURMPT.MPFilterList.hideArea); }; WMEURMPT.toggleMCFilter = function(chkboxId, filter) { var chkbox = WMEURMPT.getId(chkboxId); if (chkbox == null) { return; } if (chkbox.checked) { WMEURMPT.currentMCFilter = WMEURMPT.currentMCFilter | filter; } else { WMEURMPT.currentMCFilter = WMEURMPT.currentMCFilter & ~filter; } WMEURMPT.log("current MC filter: " + WMEURMPT.currentMCFilter); WMEURMPT.updateIHMFromMCList(); }; WMEURMPT.toggleMCFilterHideOutOfMyDriveArea = function() { WMEURMPT.log('Switch MC filter "hide out of my drive area"'); WMEURMPT.toggleMCFilter("mct-checkbox-filterHideOutOfMyDriveArea", WMEURMPT.MCFilterList.hideOutOfMyDriveArea); }; WMEURMPT.toggleMCFilterHideOutOfMyManagedArea = function() { WMEURMPT.log('Switch MC filter "hide out of my managed area"'); WMEURMPT.toggleMCFilter("mct-checkbox-filterHideOutOfMyManagedArea", WMEURMPT.MCFilterList.hideOutOfMyManagedArea); }; WMEURMPT.toggleMCFilterHideVisited = function() { WMEURMPT.log('Switch MC filter "hide visited"'); WMEURMPT.toggleMCFilter("mct-checkbox-filterHideVisited", WMEURMPT.MCFilterList.hideVisited); }; WMEURMPT.toggleMCFilterHideBlacklisted = function() { WMEURMPT.log('Switch MC filter "hide blacklisted"'); if (WMEURMPT.getId("mct-checkbox-filterHideBlacklisted").checked) { WMEURMPT.getId("mct-checkbox-filterHideWhitelisted").checked = false; WMEURMPT.toggleMCFilterHideWhitelisted(); } WMEURMPT.toggleMCFilter("mct-checkbox-filterHideBlacklisted", WMEURMPT.MCFilterList.hideBlacklisted); }; WMEURMPT.toggleMCFilterHideWhitelisted = function() { WMEURMPT.log('Switch MC filter "hide whitelisted"'); if (WMEURMPT.getId("mct-checkbox-filterHideWhitelisted").checked) { WMEURMPT.getId("mct-checkbox-filterHideBlacklisted").checked = false; WMEURMPT.toggleMCFilterHideBlacklisted(); } WMEURMPT.toggleMCFilter("mct-checkbox-filterHideWhitelisted", WMEURMPT.MCFilterList.hideWhitelisted); }; WMEURMPT.toggleMCFilterHideNotKW = function() { WMEURMPT.log('Switch MC filter "hide not matching keyword": ' + WMEURMPT.currentMCKeyWord); WMEURMPT.toggleMCFilter("mct-checkbox-filterHideNotKW", WMEURMPT.MCFilterList.hideNotKW); }; WMEURMPT.toggleMCFilterHideLimitTo = function() { WMEURMPT.log('Switch MC filter "hide over limit: "' + WMEURMPT.currentMCLimitTo); WMEURMPT.toggleMCFilter("mct-checkbox-filterHideLimitTo", WMEURMPT.MCFilterList.hideLimitTo); }; WMEURMPT.toggleMCFilterHideOnlyArea = function() { WMEURMPT.log('Switch MC filter "hide all but area: "' + WMEURMPT.currentMCOnlyArea); WMEURMPT.toggleMCFilter("mct-checkbox-filterHideOnlyArea", WMEURMPT.MCFilterList.hideArea); }; WMEURMPT.togglePURFilter = function(chkboxId, filter) { var chkbox = WMEURMPT.getId(chkboxId); if (chkbox == null) { return; } if (chkbox.checked) { WMEURMPT.currentPURFilter = WMEURMPT.currentPURFilter | filter; } else { WMEURMPT.currentPURFilter = WMEURMPT.currentPURFilter & ~filter; } WMEURMPT.log("current PUR filter: " + WMEURMPT.currentPURFilter); WMEURMPT.updateIHMFromPURList(); }; WMEURMPT.togglePURFilterHideOutOfMyDriveArea = function() { WMEURMPT.log('Switch PUR filter "hide out of my drive area"'); WMEURMPT.togglePURFilter("purt-checkbox-filterHideOutOfMyDriveArea", WMEURMPT.PURFilterList.hideOutOfMyDriveArea); }; WMEURMPT.togglePURFilterHideOutOfMyManagedArea = function() { WMEURMPT.log('Switch PUR filter "hide out of my managed area"'); WMEURMPT.togglePURFilter("purt-checkbox-filterHideOutOfMyManagedArea", WMEURMPT.PURFilterList.hideOutOfMyManagedArea); }; WMEURMPT.togglePURFilterHideVisited = function() { WMEURMPT.log('Switch PUR filter "hide visited"'); WMEURMPT.togglePURFilter("purt-checkbox-filterHideVisited", WMEURMPT.PURFilterList.hideVisited); }; WMEURMPT.togglePURFilterHideBlacklisted = function() { WMEURMPT.log('Switch PUR filter "hide blacklisted"'); if (WMEURMPT.getId("purt-checkbox-filterHideBlacklisted").checked) { WMEURMPT.getId("purt-checkbox-filterHideWhitelisted").checked = false; WMEURMPT.togglePURFilterHideWhitelisted(); } WMEURMPT.togglePURFilter("purt-checkbox-filterHideBlacklisted", WMEURMPT.PURFilterList.hideBlacklisted); }; WMEURMPT.togglePURFilterHideWhitelisted = function() { WMEURMPT.log('Switch PUR filter "hide whitelisted"'); if (WMEURMPT.getId("purt-checkbox-filterHideWhitelisted").checked) { WMEURMPT.getId("purt-checkbox-filterHideBlacklisted").checked = false; WMEURMPT.togglePURFilterHideBlacklisted(); } WMEURMPT.togglePURFilter("purt-checkbox-filterHideWhitelisted", WMEURMPT.PURFilterList.hideWhitelisted); }; WMEURMPT.togglePURFilterHideNotKW = function() { WMEURMPT.log('Switch PUR filter "hide not matching keyword": ' + WMEURMPT.currentPURKeyWord); WMEURMPT.togglePURFilter("purt-checkbox-filterHideNotKW", WMEURMPT.PURFilterList.hideNotKW); }; WMEURMPT.togglePURFilterHideOnlyCategorie = function() { WMEURMPT.log('Switch PUR filter "hide only categorie: "' + WMEURMPT.currentPUROnlyCategorie); WMEURMPT.togglePURFilter("purt-checkbox-filterHideOnlyCategorie", WMEURMPT.PURFilterList.hideCategorie); }; WMEURMPT.togglePURFilterHideLimitTo = function() { WMEURMPT.log('Switch PUR filter "hide over limit: "' + WMEURMPT.currentPURLimitTo); WMEURMPT.togglePURFilter("purt-checkbox-filterHideLimitTo", WMEURMPT.PURFilterList.hideLimitTo); }; WMEURMPT.togglePURFilterHideOnlyArea = function() { WMEURMPT.log('Switch PUR filter "hide all but area: "' + WMEURMPT.currentPUROnlyArea); WMEURMPT.togglePURFilter("purt-checkbox-filterHideOnlyArea", WMEURMPT.PURFilterList.hideArea); }; WMEURMPT.URCommentsCountChanged = function() { WMEURMPT.currentURCommentsCount = this.value; if (WMEURMPT.getId("urt-checkbox-filterHideWithCommentCount").checked) { WMEURMPT.log("Hide UR comments greater than: " + WMEURMPT.currentURCommentsCount); WMEURMPT.updateIHMFromURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.URKeywordChanged = function() { WMEURMPT.currentURKeyWord = this.value; if (WMEURMPT.getId("urt-checkbox-filterHideNotKW").checked) { WMEURMPT.updateIHMFromURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.MCKeywordChanged = function() { WMEURMPT.currentMCKeyWord = this.value; if (WMEURMPT.getId("mct-checkbox-filterHideNotKW").checked) { WMEURMPT.updateIHMFromMCList(); } WMEURMPT.saveOptions(); }; WMEURMPT.PURKeywordChanged = function() { WMEURMPT.currentPURKeyWord = this.value; if (WMEURMPT.getId("purt-checkbox-filterHideNotKW").checked) { WMEURMPT.updateIHMFromPURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.URLimitToChanged = function() { WMEURMPT.currentURLimitTo = parseInt(this.value); if (isNaN(WMEURMPT.currentURLimitTo)) { WMEURMPT.currentURLimitTo = 100; } if (WMEURMPT.getId("urt-checkbox-filterHideLimitTo").checked) { WMEURMPT.log("Limit UR list to: " + WMEURMPT.currentURLimitTo); WMEURMPT.updateIHMFromURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.MPLimitToChanged = function() { WMEURMPT.currentMPLimitTo = parseInt(this.value); if (isNaN(WMEURMPT.currentMPLimitTo)) { WMEURMPT.currentMPLimitTo = 100; } if (WMEURMPT.getId("mpt-checkbox-filterHideLimitTo").checked) { WMEURMPT.log("Limit MP list to: " + WMEURMPT.currentMPLimitTo); WMEURMPT.updateIHMFromMPList(); } WMEURMPT.saveOptions(); }; WMEURMPT.MCLimitToChanged = function() { WMEURMPT.currentMCLimitTo = parseInt(this.value); if (isNaN(WMEURMPT.currentMCLimitTo)) { WMEURMPT.currentMCLimitTo = 100; } if (WMEURMPT.getId("mct-checkbox-filterHideLimitTo").checked) { WMEURMPT.log("Limit MC list to: " + WMEURMPT.currentMCLimitTo); WMEURMPT.updateIHMFromMCList(); } WMEURMPT.saveOptions(); }; WMEURMPT.PURLimitToChanged = function() { WMEURMPT.currentPURLimitTo = parseInt(this.value); if (isNaN(WMEURMPT.currentPURLimitTo)) { WMEURMPT.currentPURLimitTo = 100; } if (WMEURMPT.getId("purt-checkbox-filterHideLimitTo").checked) { WMEURMPT.log("Limit PUR list to: " + WMEURMPT.currentPURLimitTo); WMEURMPT.updateIHMFromPURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.UROnlyTypeChanged = function() { WMEURMPT.currentUROnlyType = parseInt(this.value); if (WMEURMPT.getId("urt-checkbox-filterHideOnlyType").checked) { WMEURMPT.log("Hide all UR but type: " + WMEURMPT.currentUROnlyType); WMEURMPT.updateIHMFromURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.MPOnlyTypeChanged = function() { WMEURMPT.currentMPOnlyType = parseInt(this.value); if (WMEURMPT.getId("mpt-checkbox-filterHideOnlyType").checked) { WMEURMPT.log("Hide all MP but type: " + WMEURMPT.currentMPOnlyType); WMEURMPT.updateIHMFromMPList(); } WMEURMPT.saveOptions(); }; WMEURMPT.PUROnlyCategorieChanged = function() { WMEURMPT.currentPUROnlyCategorie = this.value; if (WMEURMPT.getId("purt-checkbox-filterHideOnlyCategorie").checked) { WMEURMPT.log("Hide all PUR but type: " + WMEURMPT.currentPUROnlyCategorie); WMEURMPT.updateIHMFromPURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.UROnlyAreaChanged = function() { WMEURMPT.currentUROnlyArea = this.value; if (WMEURMPT.getId("urt-checkbox-filterHideOnlyArea").checked) { WMEURMPT.log("Hide all UR but area: " + WMEURMPT.currentUROnlyArea); WMEURMPT.updateIHMFromURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.MPOnlyAreaChanged = function() { WMEURMPT.currentMPOnlyArea = this.value; if (WMEURMPT.getId("mpt-checkbox-filterHideOnlyArea").checked) { WMEURMPT.log("Hide all MP but area: " + WMEURMPT.currentMPOnlyArea); WMEURMPT.updateIHMFromMPList(); } WMEURMPT.saveOptions(); }; WMEURMPT.MCOnlyAreaChanged = function() { WMEURMPT.currentMCOnlyArea = this.value; if (WMEURMPT.getId("mct-checkbox-filterHideOnlyArea").checked) { WMEURMPT.log("Hide all MC but area: " + WMEURMPT.currentMCOnlyArea); WMEURMPT.updateIHMFromMCList(); } WMEURMPT.saveOptions(); }; WMEURMPT.PUROnlyAreaChanged = function() { WMEURMPT.currentPUROnlyArea = this.value; if (WMEURMPT.getId("purt-checkbox-filterHideOnlyArea").checked) { WMEURMPT.log("Hide all PUR but area: " + WMEURMPT.currentPUROnlyArea); WMEURMPT.updateIHMFromPURList(); } WMEURMPT.saveOptions(); }; WMEURMPT.refreshAreasCombolist = function(selectEl, defaultSelected) { if (selectEl == null) { WMEURMPT.log("Error no filter area"); return; } var content = ""; for (var i = 0; i < WMEURMPT.areaList.country.length; i++) { content += '<option value="' + WMEURMPT.areaList.country[i].name + '"' + (defaultSelected == WMEURMPT.areaList.country[i].name ? " selected" : "") + ">" + WMEURMPT.areaList.country[i].name + "</option>"; } for (var i = 0; i < WMEURMPT.areaList.custom.length; i++) { content += '<option value="' + WMEURMPT.areaList.custom[i].name + '"' + (defaultSelected == WMEURMPT.areaList.custom[i].name ? " selected" : "") + ">" + WMEURMPT.areaList.custom[i].name + "</option>"; } if (content == "") { selectEl.parentNode.style.display = "none"; } else { selectEl.parentNode.style.display = "block"; WMEURMPT.removeChildElements(selectEl); selectEl.innerHTML = content; } }; WMEURMPT.addCountryToAreaList = function() { var country = WMEURMPT.getId("urmpt-countryList").value; WMEURMPT.log("Add country to filter list: " + country); var area = new WMEURMPT.URT_AREA; area.category = "country"; var areaPath = country.split("->"); if (areaPath.length > 1) { area.subset = true; area.name = areaPath[areaPath.length - 1]; area.parent = areaPath[0]; for (var i = 1; i < areaPath.length - 1; i++) { if (i % 2 == 1) { area.parent += "."; } else { area.parent += "/"; } area.parent += areaPath[i]; } } else { area.name = country; } area.getGeometryFromServer(WMEURMPT.newCountryGeometryAvailable); }; WMEURMPT.newCountryGeometryAvailable = function(area) { if (area == null) { alert("Error while getting area from server.\nPlease, retry later."); return; } WMEURMPT.removeCountryFromAreaList(area); WMEURMPT.areaList.country.push(area); WMEURMPT.updateScanGroup(); }; WMEURMPT.removeCountryFromAreaList = function(country) { WMEURMPT.log("remove country: " + country); for (var i = 0; i < WMEURMPT.areaList.country.length; i++) { if (WMEURMPT.areaList.country[i].name == country.name && WMEURMPT.areaList.country[i].subset == country.subset && WMEURMPT.areaList.country[i].parent == country.parent) { WMEURMPT.areaList.country.splice(i, 1); break; } } WMEURMPT.updateScanGroup(); }; WMEURMPT.removeCountryIDFromAreaList = function(id) { WMEURMPT.areaList.country.splice(id, 1); WMEURMPT.updateScanGroup(); }; WMEURMPT.addCustomAreaFromWKTToFilterList = function() { var elName = WMEURMPT.getId("urmpt-areas-wktfile-name"); if (elName.value == "") { alert("The name of your custom area is empty.\nPlease, fill it."); return; } if (WMEURMPT.lastUploadedWKT === null) { alert("Please, choose a file before."); return; } var ca = new WMEURMPT.URT_AREA; ca.category = "custom"; ca.name = elName.value; WMEURMPT.log("Add CA to scan list: " + ca.name); ca.geometryWKT = WMEURMPT.lastUploadedWKT; WMEURMPT.removeCustomNameFromAreaList(ca.name); WMEURMPT.areaList.custom.push(ca); elName.value = ""; WMEURMPT.lastUploadedWKT = null; WMEURMPT.updateScanGroup(); }; WMEURMPT.handleFileSelectAddFromJSON = function(evt) { var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { var reader = new FileReader; reader.onload = function(theFile) { return function(e) { WMEURMPT.lastUploadedJSON = e.target.result; WMEURMPT.log("import JSON file read"); }; }(f); reader.readAsText(f); } }; WMEURMPT.addCustomAreaFromJSONToFilterList = function() { if (WMEURMPT.lastUploadedJSON === null) { alert("Please, choose a file before."); return; } var customAreas = JSON.parse(WMEURMPT.lastUploadedJSON); customAreas.forEach(function(a) { var ca = new WMEURMPT.URT_AREA; ca.category = "custom"; ca.name = a.name; WMEURMPT.log("Add CA to scan list: " + ca.name); ca.geometryWKT = a.geometryWKT; WMEURMPT.removeCustomNameFromAreaList(ca.name); WMEURMPT.areaList.custom.push(ca); }); WMEURMPT.lastUploadedJSON = null; WMEURMPT.updateScanGroup(); }; WMEURMPT.addCustomAreaFromPOIToFilterList = function() { var elName = WMEURMPT.getId("urmpt-areas-frompoi-name"); if (elName.value == "") { alert("The name of your custom area is empty.\nPlease, fill it."); return; } var theVenue = null; var count = 0; for (var v in WMEURMPT.wazeModel.venues.objects) { if (WMEURMPT.wazeModel.venues.objects.hasOwnProperty(v) == false) { continue; } var venue = WMEURMPT.wazeModel.venues.objects[v]; if (venue.isPoint() == true) { continue; } if (venue.attributes.id <= 0) { theVenue = venue; count++; } } if (count > 1) { alert("There must be only one unsaved venue.\n" + count + " detected.\nDraw only one venue to convert it in a custom area."); return; } if (count == 0) { alert("You must draw an area venue and not save it. Then you can add it as a custom area."); return; } var ca = new WMEURMPT.URT_AREA; ca.category = "custom"; ca.name = elName.value; WMEURMPT.log("Add CA to scan list: " + ca.name); if (theVenue.geometry.components.length != 1) { alert("Can't parse the geometry"); return; } ca.geometryWKT = "POLYGON (("; var lonlats = []; for (var i = 0; i < theVenue.geometry.components[0].components.length; i++) { var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(theVenue.geometry.components[0].components[i].x, theVenue.geometry.components[0].components[i].y); lonlats.push(lonlat.lon + " " + lonlat.lat); } ca.geometryWKT += lonlats.join(","); ca.geometryWKT += "))"; WMEURMPT.removeCustomNameFromAreaList(ca.name); WMEURMPT.areaList.custom.push(ca); elName.value = ""; if (confirm("Undo all edits?")) { while (WMEURMPT.wazeModel.actionManager.undo()) { } } WMEURMPT.updateScanGroup(); }; WMEURMPT.addCustomAreaToFilterList = function() { var elName = WMEURMPT.getId("urmpt-areas-name"); var elTLlon = WMEURMPT.getId("urmpt-areas-tl-lon"); var elBRlon = WMEURMPT.getId("urmpt-areas-br-lon"); var elTLlat = WMEURMPT.getId("urmpt-areas-tl-lat"); var elBRlat = WMEURMPT.getId("urmpt-areas-br-lat"); if (elName.value == "") { alert("The name of your custom area is empty.\nPlease, fill it."); return; } if (elTLlon.value == "" || elBRlon.value == "" || elTLlat.value == "" || elBRlat.value == "") { alert("The lon/lat coords are not filled correctly."); return; } var ca = new WMEURMPT.URT_AREA; ca.category = "custom"; ca.name = elName.value; WMEURMPT.log("Add CA to scan list: " + ca.name); var lonMin = elTLlon.value; var lonMax = elBRlon.value; var latMin = elTLlat.value; var latMax = elBRlat.value; ca.geometryWKT = "POLYGON ((" + lonMin + " " + latMin + "," + lonMax + " " + latMin + "," + lonMax + " " + latMax + "," + lonMin + " " + latMax + "," + lonMin + " " + latMin + "))"; WMEURMPT.removeCustomNameFromAreaList(ca.name); WMEURMPT.areaList.custom.push(ca); elName.value = ""; elTLlon.value = ""; elBRlon.value = ""; elTLlat.value = ""; elBRlat.value = ""; WMEURMPT.updateScanGroup(); }; WMEURMPT.removeCustomNameFromAreaList = function(areaName) { for (var c = 0; c < WMEURMPT.areaList.custom.length; c++) { if (WMEURMPT.areaList.custom[c].name == areaName) { WMEURMPT.areaList.custom.splice(c, 1); WMEURMPT.log("removed CA: " + areaName); break; } } WMEURMPT.updateScanGroup(); }; WMEURMPT.editCustomArea = function(areaName) { for (var c = 0; c < WMEURMPT.areaList.custom.length; c++) { WMEURMPT.getId("urmpt-area-custom-edit-" + WMEURMPT.areaList.custom[c].name).style.display = "none"; if (WMEURMPT.areaList.custom[c].name == areaName) { WMEURMPT.getId("urmpt-area-custom-save-" + WMEURMPT.areaList.custom[c].name).style.display = "inline"; var area = WMEURMPT.areaList.custom[c]; var featureLandmark = require("Waze/Feature/Vector/Landmark"); var landmark = new featureLandmark; var center = area.geometryOL.geometry.getCentroid(); var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(center.x, center.y); WMEURMPT.wazeMap.setCenter(xy); var geo = []; area.geometryOL.geometry.components[0].components.forEach(function(c) { var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(c.x, c.y); geo.push(new OpenLayers.Geometry.Point(xy.lon, xy.lat)); }); landmark.geometry = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(geo)]); landmark.attributes.categories = ["OTHER"]; var AddLandmark = require("Waze/Action/AddLandmark"); W.model.actionManager.add(new AddLandmark(landmark), _.defer(function() { W.selectionManager.setSelectedModels([landmark]); })); } } }; WMEURMPT.saveEditedCustomArea = function(areaName) { var theVenue = null; var count = 0; for (var v in WMEURMPT.wazeModel.venues.objects) { if (WMEURMPT.wazeModel.venues.objects.hasOwnProperty(v) == false) { continue; } var venue = WMEURMPT.wazeModel.venues.objects[v]; if (venue.isPoint() == true) { continue; } if (venue.attributes.id <= 0) { theVenue = venue; count++; } } if (count > 1) { alert("There must be only one unsaved venue.\n" + count + " detected.\nDraw only one venue to convert it in a custom area."); WMEURMPT.updateScanGroup(); return; } if (count == 0) { alert("You must draw an area venue and not save it. Then you can add it as a custom area."); WMEURMPT.updateScanGroup(); return; } if (theVenue.geometry.components.length != 1) { alert("Can't parse the geometry"); WMEURMPT.updateScanGroup(); return; } WMEURMPT.removeCustomNameFromAreaList(areaName); var ca = new WMEURMPT.URT_AREA; ca.category = "custom"; ca.name = areaName; ca.geometryWKT = "POLYGON (("; var lonlats = []; for (var i = 0; i < theVenue.geometry.components[0].components.length; i++) { var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(theVenue.geometry.components[0].components[i].x, theVenue.geometry.components[0].components[i].y); lonlats.push(lonlat.lon + " " + lonlat.lat); } ca.geometryWKT += lonlats.join(","); ca.geometryWKT += "))"; WMEURMPT.areaList.custom.push(ca); if (confirm("Undo all edits?")) { while (WMEURMPT.wazeModel.actionManager.undo()) { } } WMEURMPT.updateScanGroup(); }; WMEURMPT.exportAllCAToJSON = function() { this.setAttribute("download", "URMPT_CustomAreas_" + WMEURMPT.me.userName + ".json"); this.href = "data:application/octet-stream;charset=utf-8;base64," + btoa(JSON.stringify(WMEURMPT.areaList.custom.map(function(e) { return {name:e.name, geometryWKT:e.geometryWKT}; }))); }; WMEURMPT.updateScanGroup = function() { var scanGroup = WMEURMPT.getId("urt-a-scanGroup"); var countryScanList = WMEURMPT.getId("urmpt-countryscanlist"); var customAreaScanList = WMEURMPT.getId("urmpt-custom-scan-list"); WMEURMPT.removeChildElements(scanGroup); scanGroup.innerHTML = "SCAN: "; if (countryScanList != null) { WMEURMPT.removeChildElements(countryScanList); countryScanList.innerHTML = ""; } WMEURMPT.removeChildElements(customAreaScanList); customAreaScanList.innerHTML = ""; var elt = document.createElement("a", "urt-a-DriveArea"); elt.innerHTML = "Drive area"; elt.href = "#"; elt.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScan, [{type:"driveArea"}]); scanGroup.appendChild(elt); if (WMEURMPT.uam) { elt = document.createElement("span"); elt.innerHTML = " | "; scanGroup.appendChild(elt); var elt = document.createElement("a", "urt-a-ManagedArea"); elt.innerHTML = "Managed area"; elt.href = "#"; elt.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScan, [{type:"managedArea"}]); scanGroup.appendChild(elt); } if (WMEURMPT.areaList.country.length == 0 && (WMEURMPT.ul >= 8 || WMEURMPT.me.isCountryManager())) { scanGroup.insertAdjacentHTML("beforeend", '<br/><font color="#C00000">You are a rank 4+ editor. In the areas tab, you can select a country or a subset for state managers in the list and add it to your scan list!'); } for (var c = 0; c < WMEURMPT.areaList.country.length; c++) { if (WMEURMPT.areaList.country[c].geometryOL == null) { WMEURMPT.areaList.country[c].geometryOL = (new OpenLayers.Format.WKT).read(WMEURMPT.areaList.country[c].geometryWKT); if (WMEURMPT.areaList.country[c].geometryOL == null || WMEURMPT.areaList.country[c].geometryOL.hasOwnProperty("geometry") == false) { WMEURMPT.log("Error on area " + WMEURMPT.areaList.country[c].name + ". Removing it... :("); WMEURMPT.areaList.country.splice(c, 1); c--; continue; } for (var j = 0; j < WMEURMPT.areaList.country[c].geometryOL.geometry.components.length; j++) { WMEURMPT.areaList.country[c].geometryOL.geometry.components[j].calculateBounds(); WMEURMPT.bintreeGeometry(WMEURMPT.areaList.country[c].geometryOL.geometry.components[j]); } } elt = WMEURMPT.createElement("span"); elt.innerHTML = " | "; scanGroup.appendChild(elt); elt = WMEURMPT.createElement("a", "urt-a-scan" + WMEURMPT.areaList.country[c].name); elt.innerHTML = WMEURMPT.areaList.country[c].name.replace(/_/g, " "); elt.href = "#"; elt.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScan, [{type:"country", name:WMEURMPT.areaList.country[c].name}]); scanGroup.appendChild(elt); if (countryScanList != null) { var elt = WMEURMPT.createElement("div"); elt.innerHTML = WMEURMPT.areaList.country[c].name.replace(/_/g, " ") + " "; var GELink = WMEURMPT.createElement("a"); GELink.href = "#"; GELink.innerHTML = '<img style="height: 15px;" src="data:image/png;base64,' + WMEURMPT.icon_ge + '" />'; GELink.title = "Show in google earth"; GELink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.showAreaInGoogleEarth, [{type:"country", name:WMEURMPT.areaList.country[c].name}]); elt.appendChild(GELink); var WKTLink = WMEURMPT.createElement("a"); WKTLink.href = "#"; WKTLink.innerHTML = "WKT"; WKTLink.title = "Export to WKT"; WKTLink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.showAreaInWKT, [{type:"country", name:WMEURMPT.areaList.country[c].name}]); elt.appendChild(WKTLink); elt.insertAdjacentHTML("beforeend", " ("); var removeLink = WMEURMPT.createElement("a"); removeLink.innerHTML = "remove"; removeLink.href = "#"; removeLink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.removeCountryIDFromAreaList, [c]); elt.appendChild(removeLink); elt.insertAdjacentHTML("beforeend", ")"); countryScanList.appendChild(elt); } } for (var c = 0; c < WMEURMPT.areaList.custom.length; c++) { if (WMEURMPT.areaList.custom[c].geometryOL == null) { WMEURMPT.areaList.custom[c].geometryOL = (new OpenLayers.Format.WKT).read(WMEURMPT.areaList.custom[c].geometryWKT); if (WMEURMPT.areaList.custom[c].geometryOL == null || WMEURMPT.areaList.custom[c].geometryOL.hasOwnProperty("geometry") == false) { WMEURMPT.log("Error on area " + WMEURMPT.areaList.custom[c].name + ". Removing it... :("); WMEURMPT.areaList.custom.splice(c, 1); c--; continue; } for (var j = 0; j < WMEURMPT.areaList.custom[c].geometryOL.geometry.components.length; j++) { WMEURMPT.areaList.custom[c].geometryOL.geometry.components[j].calculateBounds(); WMEURMPT.bintreeGeometry(WMEURMPT.areaList.custom[c].geometryOL.geometry.components[j]); } } elt = WMEURMPT.createElement("span"); elt.innerHTML = " | "; scanGroup.appendChild(elt); elt = WMEURMPT.createElement("a", "urt-a-scan" + WMEURMPT.areaList.custom[c].name); elt.innerHTML = WMEURMPT.areaList.custom[c].name.replace(/_/g, " "); elt.href = "#"; elt.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScan, [{type:"custom", name:WMEURMPT.areaList.custom[c].name}]); scanGroup.appendChild(elt); if (customAreaScanList != null) { var elt = WMEURMPT.createElement("div"); elt.innerHTML = WMEURMPT.areaList.custom[c].name.replace(/_/g, " ") + " "; var GELink = WMEURMPT.createElement("a"); GELink.href = "#"; GELink.innerHTML = '<img style="height: 15px;" src="data:image/png;base64,' + WMEURMPT.icon_ge + '" />'; GELink.title = "Show in google earth"; GELink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.showAreaInGoogleEarth, [{type:"custom", name:WMEURMPT.areaList.custom[c].name}]); elt.appendChild(GELink); var WKTLink = WMEURMPT.createElement("a"); WKTLink.href = "#"; WKTLink.innerHTML = "WKT"; WKTLink.title = "Export to WKT"; WKTLink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.showAreaInWKT, [{type:"custom", name:WMEURMPT.areaList.custom[c].name}]); elt.appendChild(WKTLink); elt.insertAdjacentHTML("beforeend", " "); var editLink = WMEURMPT.createElement("a"); editLink.href = "#"; editLink.id = "urmpt-area-custom-edit-" + WMEURMPT.areaList.custom[c].name; editLink.innerHTML = "Edit"; editLink.title = "Edit as unsaved landmark"; editLink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.editCustomArea, [WMEURMPT.areaList.custom[c].name]); elt.appendChild(editLink); elt.insertAdjacentHTML("beforeend", " "); var saveLink = WMEURMPT.createElement("a"); saveLink.href = "#"; saveLink.id = "urmpt-area-custom-save-" + WMEURMPT.areaList.custom[c].name; saveLink.style.display = "none"; saveLink.innerHTML = "Save"; saveLink.title = "Save landmark"; saveLink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.saveEditedCustomArea, [WMEURMPT.areaList.custom[c].name]); elt.appendChild(saveLink); elt.insertAdjacentHTML("beforeend", " ("); var removeLink = WMEURMPT.createElement("a"); removeLink.innerHTML = "remove"; removeLink.href = "#"; removeLink.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.removeCustomNameFromAreaList, [WMEURMPT.areaList.custom[c].name]); elt.appendChild(removeLink); elt.insertAdjacentHTML("beforeend", ")"); customAreaScanList.appendChild(elt); } } var ael = WMEURMPT.createElement("a"); ael.href = "#"; ael.innerHTML = "Export to JSON"; ael.onclick = WMEURMPT.exportAllCAToJSON; customAreaScanList.appendChild(ael); WMEURMPT.refreshAreasCombolist(WMEURMPT.getId("urt-filterOnlyArea"), WMEURMPT.currentUROnlyArea); WMEURMPT.refreshAreasCombolist(WMEURMPT.getId("mpt-filterOnlyArea"), WMEURMPT.currentMPOnlyArea); WMEURMPT.refreshAreasCombolist(WMEURMPT.getId("mct-filterOnlyArea"), WMEURMPT.currentMCOnlyArea); WMEURMPT.refreshAreasCombolist(WMEURMPT.getId("purt-filterOnlyArea"), WMEURMPT.currentPUROnlyArea); WMEURMPT.currentUROnlyArea = WMEURMPT.getId("urt-filterOnlyArea").value; WMEURMPT.currentMPOnlyArea = WMEURMPT.getId("mpt-filterOnlyArea").value; WMEURMPT.currentMCOnlyArea = WMEURMPT.getId("mct-filterOnlyArea").value; WMEURMPT.currentPUROnlyArea = WMEURMPT.getId("purt-filterOnlyArea").value; WMEURMPT.saveAreas(); }; WMEURMPT.showAreaInGoogleEarth = function(area) { var template = '<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"><Document> <name>#AREANAME#</name> <Style id="hl"> <IconStyle> <scale>1.2</scale> </IconStyle> <LineStyle> <color>ff000000</color> <width>2</width> </LineStyle> <PolyStyle> <color>7f0000ff</color> </PolyStyle> </Style> <Style id="default"> <LineStyle> <color>ff000000</color> <width>2</width> </LineStyle> <PolyStyle> <color>7f0000ff</color> </PolyStyle> </Style> <StyleMap id="default0"> <Pair> <key>normal</key> <styleUrl>#default</styleUrl> </Pair> <Pair> <key>highlight</key> <styleUrl>#hl</styleUrl> </Pair> </StyleMap> <Placemark> <name>#AREANAME#</name> <styleUrl>#default0</styleUrl>#GEOMETRY#</Placemark></Document></kml>'; var kmlGeometry = ""; var geometry = null; function geomToKML(geom) { var output = ""; for (var i = 0; i < geom.length; i++) { output += "<Polygon><outerBoundaryIs><LinearRing><coordinates>"; for (var p = 0; p < geom[i].components.length; p++) { output += geom[i].components[p].x + "," + geom[i].components[p].y + " "; } output += "</coordinates></LinearRing></outerBoundaryIs></Polygon>"; } return output; } for (var i = 0; i < WMEURMPT.areaList[area.type].length; i++) { if (WMEURMPT.areaList[area.type][i].name == area.name) { geometry = WMEURMPT.areaList[area.type][i].geometryOL.geometry; break; } } if (geometry) { if (geometry.CLASS_NAME == "OpenLayers.Geometry.MultiPolygon") { kmlGeometry += "<MultiGeometry>"; for (var p = 0; p < geometry.components.length; p++) { kmlGeometry += geomToKML(geometry.components[p].components); } kmlGeometry += "</MultiGeometry>"; } else { kmlGeometry += geomToKML(geometry.components); } template = template.replace(/#AREANAME#/g, area.name); template = template.replace("#GEOMETRY#", kmlGeometry); this.setAttribute("download", area.name + ".kml"); this.href = "data:application/octet-stream;charset=utf-8;base64," + btoa(template); } return false; }; WMEURMPT.computeStats = function(fromURList, fromMPList, fromDate, toDate) { var out = ""; out += "URs: " + fromURList.length + "<br/>"; out += "MPs: " + fromMPList.length + "<br/>"; var closedUR = fromURList.filter(function(value) { return value.data.open === false; }).length; var closedMP = fromMPList.filter(function(value) { return value.data.open === false; }).length; var niUR = fromURList.filter(function(value) { return value.data.open === false && value.data.resolution == 1; }).length; var soUR = closedUR - niUR; var niMP = fromMPList.filter(function(value) { return value.data.open === false && value.data.resolution == 1; }).length; var soMP = closedMP - niMP; out += "URs closed: " + closedUR + " (" + Math.round(closedUR * 100 / fromURList.length) + "%) " + (fromURList.length - closedUR) + " remaining<br/>"; out += " Not identified: " + niUR + " (" + Math.round(niUR * 100 / closedUR) + "%)<br/>"; out += " Solved: " + soUR + " (" + Math.round(soUR * 100 / closedUR) + "%)<br/>"; out += "MPs closed: " + closedMP + " (" + Math.round(closedMP * 100 / fromMPList.length) + "%) " + (fromMPList.length - closedMP) + " remaining<br/>"; out += " Not identified: " + niMP + " (" + Math.round(niMP * 100 / closedMP) + "%)<br/>"; out += " Solved: " + soMP + " (" + Math.round(soMP * 100 / closedMP) + "%)<br/>"; var urWithComment = fromURList.filter(function(value) { return value.data.hasComments === true; }).length; var urWithCommentFromReporter = fromURList.filter(function(value) { return value.data.hasComments === true && value.data.session.comments.filter(function(c) { return c.userName == "Reporter"; }).length != 0; }).length; out += "URs with reporter comment: " + urWithCommentFromReporter + " (" + Math.round(urWithCommentFromReporter * 100 / urWithComment) + "% of commented URs)<br/>"; WMEURMPT.statsCSV += "UR;Count;Percent\n"; WMEURMPT.statsCSV += "Count;" + fromURList.length + "\n"; WMEURMPT.statsCSV += "Closed;" + closedUR + ";" + closedUR * 100 / fromURList.length + "\n"; WMEURMPT.statsCSV += "Not identified;" + niUR + ";" + niUR * 100 / closedUR + "\n"; WMEURMPT.statsCSV += "Solved;" + soUR + ";" + soUR * 100 / closedUR + "\n"; WMEURMPT.statsCSV += "With comment;" + urWithComment + ";" + urWithComment * 100 / fromURList.length + "\n"; WMEURMPT.statsCSV += "With reporter comment;" + urWithCommentFromReporter + ";" + urWithCommentFromReporter * 100 / urWithComment + "\n"; WMEURMPT.statsCSV += "MP;Count;Percent\n"; WMEURMPT.statsCSV += "Count;" + fromMPList.length + "\n"; WMEURMPT.statsCSV += "Closed;" + closedMP + ";" + closedMP * 100 / fromMPList.length + "\n"; WMEURMPT.statsCSV += "Not identified;" + niMP + ";" + niMP * 100 / closedMP + "\n"; WMEURMPT.statsCSV += "Solved;" + soMP + ";" + soMP * 100 / closedMP + "\n"; var bestPipeletteList = []; var bestURCloserList = []; var bestMPCloserList = []; for (var i = 0; i < fromURList.length; i++) { var ur = fromURList[i]; if (ur.data.hasComments == true) { for (var c = 0; c < ur.data.session.comments.length; c++) { var userName = ur.data.session.comments[c].userName; if (userName == "Reporter" || userName == "Unknown") { continue; } if (bestPipeletteList.hasOwnProperty(userName)) { bestPipeletteList[userName]++; } else { bestPipeletteList[userName] = 1; } } } if (!ur.data.open) { if (bestURCloserList.hasOwnProperty(ur.data.resolvedByName)) { bestURCloserList[ur.data.resolvedByName].total++; } else { bestURCloserList[ur.data.resolvedByName] = {total:1, solved:0}; } if (ur.data.resolution != 1) { bestURCloserList[ur.data.resolvedByName].solved++; } } } for (var i = 0; i < fromMPList.length; i++) { var mp = fromMPList[i]; if (!mp.data.open) { if (bestMPCloserList.hasOwnProperty(mp.data.resolvedByName)) { bestMPCloserList[mp.data.resolvedByName].total++; } else { bestMPCloserList[mp.data.resolvedByName] = {total:1, solved:0}; } if (mp.data.resolution != 1) { bestMPCloserList[mp.data.resolvedByName].solved++; } } } var sortablePipelettes = []; for (var p in bestPipeletteList) { if (bestPipeletteList.hasOwnProperty(p)) { sortablePipelettes.push([p, bestPipeletteList[p]]); } } var sortableURClosers = []; for (var c in bestURCloserList) { if (bestURCloserList.hasOwnProperty(c)) { sortableURClosers.push([c, bestURCloserList[c]]); } } var sortableMPClosers = []; for (var c in bestMPCloserList) { if (bestMPCloserList.hasOwnProperty(c)) { sortableMPClosers.push([c, bestMPCloserList[c]]); } } sortablePipelettes.sort(function(a, b) { return b[1] - a[1]; }); sortableURClosers.sort(function(a, b) { return b[1].total - a[1].total; }); sortableMPClosers.sort(function(a, b) { return b[1].total - a[1].total; }); WMEURMPT.statsCSV += "Bests\n"; out += "Best UR closer:<ol>"; WMEURMPT.statsCSV += "UR Closer;count;solved;not identified\n"; for (var i = 0; i < 3 && i < sortableURClosers.length; i++) { out += "<li>" + sortableURClosers[i][0] + " (" + sortableURClosers[i][1].total + " URs closed, " + sortableURClosers[i][1].solved + " solved and " + (sortableURClosers[i][1].total - sortableURClosers[i][1].solved) + " not identified)</li>"; WMEURMPT.statsCSV += sortableURClosers[i][0] + ";" + sortableURClosers[i][1].total + ";" + sortableURClosers[i][1].solved + ";" + (sortableURClosers[i][1].total - sortableURClosers[i][1].solved) + "\n"; } out += "</ol>"; out += "Best MP closer:<ol>"; WMEURMPT.statsCSV += "MP Closer;count;solved;not identified\n"; for (var i = 0; i < 3 && i < sortableMPClosers.length; i++) { out += "<li>" + sortableMPClosers[i][0] + " (" + sortableMPClosers[i][1].total + " MPs closed, " + sortableMPClosers[i][1].solved + " solved and " + (sortableMPClosers[i][1].total - sortableMPClosers[i][1].solved) + " not identified)</li>"; WMEURMPT.statsCSV += sortableMPClosers[i][0] + ";" + sortableMPClosers[i][1].total + ";" + sortableMPClosers[i][1].solved + ";" + (sortableMPClosers[i][1].total - sortableMPClosers[i][1].solved) + "\n"; } out += "</ol>"; out += "Best pipelette:<ol>"; WMEURMPT.statsCSV += "Pipelette;Message count\n"; for (var i = 0; i < 3 && i < sortablePipelettes.length; i++) { out += "<li>" + sortablePipelettes[i][0] + " (" + sortablePipelettes[i][1] + " comments)</li>"; WMEURMPT.statsCSV += sortablePipelettes[i][0] + ";" + sortablePipelettes[i][1] + "\n"; } out += "</ol>"; return out; }; WMEURMPT.refreshStats = function(fromDate, toDate) { WMEURMPT.log("refreshStats from: ", fromDate); WMEURMPT.log("refreshStats to: ", toDate); var pb = new WMEURMPT.ProgressBar(WMEURMPT.getId("urt-progressBar")); if (pb.isShown() == false) { pb.update(-1); pb.show(); WMEURMPT.showPBInfo(true); WMEURMPT.info("Refreshing stats, please wait..."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.refreshStats, [fromDate, toDate])); return; } WMEURMPT.statsCSV = ""; var div = WMEURMPT.getId("urmpt-stats"); WMEURMPT.removeChildElements(div); div.innerHTML = '<font style="font-size: larger; font-weight: bold;">Statistics</font><hr/>'; div.innerHTML += '<div style="display: flex;"><span style="margin: 5px; display: table;" >From: </span><input value="' + fromDate + '" type="text" id="urmpt-stat-from" size="9"/><span style="margin: 5px; display: table;" > to </span><input value="' + toDate + '" type="text" id="urmpt-stat-to" size="9"/><button id="urmpt-stat-refresh" style="display: table; width: 40px; padding: 0px;">OK</button></div><hr/>'; div.innerHTML += '<a id="urmpt-stat-export_csv" href="#">Export to CSV</a><hr/>'; var dateFilteredURList = WMEURMPT.URList; var dateFilteredMPList = WMEURMPT.MPList; if (fromDate != "" && toDate != "") { var df = (new Date(fromDate)).getTime(); var dt = (new Date(toDate)).getTime(); dateFilteredURList = WMEURMPT.URList.filter(function(value) { return value.data.resolvedOn != null && value.data.resolvedOn >= df && value.data.resolvedOn <= dt || value.data.updatedOn != null && value.data.updatedOn >= df && value.data.updatedOn <= dt || value.data.driveDate != null && value.data.driveDate >= df && value.data.driveDate <= dt; }); dateFilteredMPList = WMEURMPT.MPList.filter(function(value) { return value.data.resolvedOn != null && value.data.resolvedOn >= df && value.data.resolvedOn <= dt; }); } div.innerHTML += "General:<br/><br/>"; WMEURMPT.statsCSV += "General\n"; div.innerHTML += WMEURMPT.computeStats(dateFilteredURList, dateFilteredMPList, fromDate, toDate); div.innerHTML += "<hr/>"; div.innerHTML += "You:<br/><br/>"; var closedURbyMe = dateFilteredURList.filter(function(value) { return value.data.resolvedBy === WMEURMPT.me.id; }).length; var closedMPbyMe = dateFilteredMPList.filter(function(value) { return value.data.resolvedBy === WMEURMPT.me.id; }).length; var niURbyMe = dateFilteredURList.filter(function(value) { return value.data.resolvedBy === WMEURMPT.me.id && value.data.open === false && value.data.resolution == 1; }).length; var soURbyMe = closedURbyMe - niURbyMe; var niMPbyMe = dateFilteredMPList.filter(function(value) { return value.data.resolvedBy === WMEURMPT.me.id && value.data.open === false && value.data.resolution == 1; }).length; var soMPbyMe = closedMPbyMe - niMPbyMe; div.innerHTML += "URs closed: " + closedURbyMe + " (" + Math.round(closedURbyMe * 100 / dateFilteredURList.length) + "%)<br/>"; div.innerHTML += " Not identified: " + niURbyMe + " (" + Math.round(niURbyMe * 100 / closedURbyMe) + "%)<br/>"; div.innerHTML += " Solved: " + soURbyMe + " (" + Math.round(soURbyMe * 100 / closedURbyMe) + "%)<br/>"; div.innerHTML += "MPs closed: " + closedMPbyMe + " (" + Math.round(closedMPbyMe * 100 / dateFilteredMPList.length) + "%)<br/>"; div.innerHTML += " Not identified: " + niMPbyMe + " (" + Math.round(niMPbyMe * 100 / closedMPbyMe) + "%)<br/>"; div.innerHTML += " Solved: " + soMPbyMe + " (" + Math.round(soMPbyMe * 100 / closedMPbyMe) + "%)<br/>"; div.innerHTML += "<hr/>"; div.innerHTML += "Per area:<br/><br/>"; div.innerHTML += "<ul>"; WMEURMPT.statsCSV += "You\n"; WMEURMPT.statsCSV += "UR;Count;Percent\n"; WMEURMPT.statsCSV += "Closed;" + closedURbyMe + ";" + closedURbyMe * 100 / dateFilteredURList.length + "\n"; WMEURMPT.statsCSV += "Not identified;" + niURbyMe + ";" + niURbyMe * 100 / closedURbyMe + "\n"; WMEURMPT.statsCSV += "Solved;" + soURbyMe + ";" + soURbyMe * 100 / closedURbyMe + "\n"; WMEURMPT.statsCSV += "MP;Count;Percent\n"; WMEURMPT.statsCSV += "Closed;" + closedMPbyMe + ";" + closedMPbyMe * 100 / dateFilteredMPList.length + "\n"; WMEURMPT.statsCSV += "Not identified;" + niMPbyMe + ";" + niMPbyMe * 100 / closedMPbyMe + "\n"; WMEURMPT.statsCSV += "Solved;" + soMPbyMe + ";" + soMPbyMe * 100 / closedMPbyMe + "\n"; WMEURMPT.statsCSV += "Your drive area\n"; var fromURList = dateFilteredURList.filter(function(value) { return WMEURMPT.isInsideDriveArea(value.lonlat.lon, value.lonlat.lat); }); var fromMPList = dateFilteredMPList.filter(function(value) { return WMEURMPT.isInsideDriveArea(value.lonlat.lon, value.lonlat.lat); }); div.innerHTML += "<li>Your drive area<br/>" + WMEURMPT.computeStats(fromURList, fromMPList, fromDate, toDate) + "</li>"; if (WMEURMPT.uam) { WMEURMPT.statsCSV += "Your managed area\n"; var fromURList = dateFilteredURList.filter(function(value) { return WMEURMPT.isInsideManagedArea(value.lonlat.lon, value.lonlat.lat); }); var fromMPList = dateFilteredMPList.filter(function(value) { return WMEURMPT.isInsideManagedArea(value.lonlat.lon, value.lonlat.lat); }); div.innerHTML += "<li>Your managed area<br/>" + WMEURMPT.computeStats(fromURList, fromMPList, fromDate, toDate) + "</li>"; } for (var a = 0; a < WMEURMPT.areaList.country.length; a++) { WMEURMPT.statsCSV += WMEURMPT.areaList.country[a].name + "\n"; var fromURList = dateFilteredURList.filter(function(value) { return WMEURMPT.areaList.country[a].isInside(value.lonlat); }); var fromMPList = dateFilteredMPList.filter(function(value) { return WMEURMPT.areaList.country[a].isInside(value.lonlat); }); div.innerHTML += "<li>" + WMEURMPT.areaList.country[a].name + "<br/>" + WMEURMPT.computeStats(fromURList, fromMPList, fromDate, toDate) + "</li>"; } for (var a = 0; a < WMEURMPT.areaList.custom.length; a++) { WMEURMPT.statsCSV += WMEURMPT.areaList.custom[a].name + "\n"; var fromURList = dateFilteredURList.filter(function(value) { return WMEURMPT.areaList.custom[a].isInside(value.lonlat); }); var fromMPList = dateFilteredMPList.filter(function(value) { return WMEURMPT.areaList.custom[a].isInside(value.lonlat); }); div.innerHTML += "<li>" + WMEURMPT.areaList.custom[a].name + "<br/>" + WMEURMPT.computeStats(fromURList, fromMPList, fromDate, toDate) + "</li>"; } div.innerHTML += "</ul>"; WMEURMPT.showPBInfo(false); pb.hide(); pb.update(0); WMEURMPT.info(); window.setTimeout(WMEURMPT.setupStatHandlers); }; WMEURMPT.setupStatHandlers = function() { if (typeof $.fn.datepicker !== "undefined") { $("#urmpt-stat-from,#urmpt-stat-to").datepicker(); } else { if (typeof $.fn.daterangepicker !== "undefined") { $("#urmpt-stat-from,#urmpt-stat-to").daterangepicker({singleDatePicker:!0, locale:{format:"YYYY-MM-DD"}}); } } WMEURMPT.getId("urmpt-stat-refresh").onclick = function() { var dateFrom = WMEURMPT.getId("urmpt-stat-from").value; var dateTo = WMEURMPT.getId("urmpt-stat-to").value; WMEURMPT.refreshStats(dateFrom, dateTo); }; WMEURMPT.getId("urmpt-stat-export_csv").onclick = WMEURMPT.exportStatsToCSV; }; WMEURMPT.exportStatsToCSV = function() { this.setAttribute("download", "URMPT_Stats_" + (new Date).toISOString().substr(0, 10) + "_" + WMEURMPT.me.userName + ".csv"); this.href = "data:application/octet-stream;charset=utf-8;base64," + btoa(WMEURMPT.statsCSV); }; WMEURMPT.connectStatHandler = function() { WMEURMPT.getId("urmp-tabstitle-stat").onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.refreshStats, ["", ""]); }; WMEURMPT.exportURMPs = function(t, button) { button.setAttribute("download", t + "s.bbcode.txt"); var data = ""; var displayedCount = 0; var src = WMEURMPT.URList; var filterFunc = WMEURMPT.isURFiltered; var limit = WMEURMPT.currentURLimitTo; var typeFunc = WMEURMPT.getFullURTypeFromType; if (t == "MP") { src = WMEURMPT.MPList; filterFunc = WMEURMPT.isMPFiltered; limit = WMEURMPT.currentMPLimitTo; typeFunc = WMEURMPT.getFullMPTypeFromType; } for (var i = 0; i < src.length; i++) { if (WMEURMPT.getId(t.toLowerCase() + "t-checkbox-filterHideLimitTo").checked) { if (displayedCount >= limit) { break; } } if (filterFunc(src[i])) { continue; } displayedCount++; var number = t == "UR" ? WMEURMPT.getDuration(src[i].data.driveDate) : src[i].data.weight; var type = typeFunc(t == "UR" ? src[i].data.type : src[i].data.subType); var url = location.protocol + "//" + location.host + location.pathname + "?lon=" + src[i].lonlat.lon + "&lat=" + src[i].lonlat.lat + "&zoom=5" + (t == "UR" ? "&mapUpdateRequest=" : "&mapProblem=") + src[i].id; data += "[url=" + url + "]" + (t == "MP" ? "Severity: " : "") + number + (t == "UR" ? " days" : "") + " " + " | " + type + (t == "UR" ? src[i].data.hasOwnProperty("description") && src[i].data.description ? " | " + src[i].data.description : " | N/A" : "") + "[/url]\n"; } button.href = "data:text/plain;base64," + btoa(unescape(encodeURIComponent(data))); }; WMEURMPT.exportKML_URMPs = function(t, button, start) { var kml = ""; var src = WMEURMPT.URList; var filterFunc = WMEURMPT.isURFiltered; var typeFunc = WMEURMPT.getFullURTypeFromType; if (t == "MP") { src = WMEURMPT.MPList; filterFunc = WMEURMPT.isMPFiltered; typeFunc = WMEURMPT.getFullMPTypeFromType; } var finished = true; var displayedCount = 0; var data = {}; for (var i = start; i < src.length; i++) { if (displayedCount == 2500) { start = i; finished = false; break; } if (filterFunc(src[i])) { continue; } displayedCount++; var number = t == "UR" ? WMEURMPT.getDuration(src[i].data.driveDate) : src[i].data.weight; var type = typeFunc(t == "UR" ? src[i].data.type : src[i].data.subType); var color = "green"; if (src[i].data.open) { if (t == "UR") { if (number < 15) { color = "yellow"; } else { if (number < 30) { color = "orange"; } else { color = "red"; } } } else { if (number < 51) { color = "yellow"; } else { if (number < 100) { color = "orange"; } else { color = "red"; } } } } if (data.hasOwnProperty(type) == false) { data[type] = []; } data[type].push({lonlat:src[i].lonlat, color:color}); } kml = '<?xml version="1.0" encoding="UTF-8"?><kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom"><Document><name>' + t + 's</name><Style id="sn_red"><IconStyle><color>7f0000ff</color><scale>0.5</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><Style id="sh_red"><IconStyle><color>7f0000ff</color><scale>0.6</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><StyleMap id="msn_red"><Pair><key>normal</key><styleUrl>#sn_red</styleUrl></Pair><Pair><key>highlight</key><styleUrl>#sh_red</styleUrl></Pair></StyleMap><Style id="sn_orange"><IconStyle><color>7f0080ff</color><scale>0.5</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><Style id="sh_orange"><IconStyle><color>7f0080ff</color><scale>0.6</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><StyleMap id="msn_orange"><Pair><key>normal</key><styleUrl>#sn_orange</styleUrl></Pair><Pair><key>highlight</key><styleUrl>#sh_orange</styleUrl></Pair></StyleMap><Style id="sn_yellow"><IconStyle><color>7f00ffff</color><scale>0.5</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><Style id="sh_yellow"><IconStyle><color>7f00ffff</color><scale>0.6</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><StyleMap id="msn_yellow"><Pair><key>normal</key><styleUrl>#sn_yellow</styleUrl></Pair><Pair><key>highlight</key><styleUrl>#sh_yellow</styleUrl></Pair></StyleMap><Style id="sn_green"><IconStyle><color>7f00ff00</color><scale>0.5</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><Style id="sh_green"><IconStyle><color>7f00ff00</color><scale>0.6</scale><Icon><href>http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png</href></Icon></IconStyle><LabelStyle><scale>0</scale></LabelStyle><ListStyle></ListStyle></Style><StyleMap id="msn_green"><Pair><key>normal</key><styleUrl>#sn_green</styleUrl></Pair><Pair><key>highlight</key><styleUrl>#sh_green</styleUrl></Pair></StyleMap>'; for (var type in data) { kml += "<Folder><name>"; kml += type; kml += "</name><open>0</open>"; data[type].forEach(function(r) { kml += "<Placemark><name></name><description></description><LookAt><longitude>" + r.lonlat.lon + "</longitude><latitude>" + r.lonlat.lat + "</latitude><altitude>0</altitude><heading>0</heading><tilt>0</tilt><range>1000.000000</range><gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode></LookAt><styleUrl>#msn_" + r.color + "</styleUrl><Point><gx:drawOrder>1</gx:drawOrder><coordinates>" + r.lonlat.lon + "," + r.lonlat.lat + ",0</coordinates></Point></Placemark>"; }); kml += "</Folder>"; } kml += "</Document></kml>"; var element = document.createElement("a"); element.style.display = "none"; element.setAttribute("href", encodeURI("data:text/plain," + kml)); element.setAttribute("download", t + "s_" + start + ".kml"); document.body.appendChild(element); element.click(); document.body.removeChild(element); if (finished == false) { window.setTimeout(function() { WMEURMPT.exportKML_URMPs(t, button, start); }); } }; WMEURMPT.initialiseURT = function() { WMEURMPT.initManagedArea(); var addon = WMEURMPT.createElement("section", "urt-addon"); var divpbi = WMEURMPT.createElement("div", "urt-progressBarInfo"); divpbi.className = "urt-progressBarInfo"; var elt = WMEURMPT.createElement("div", "urt-progressBar"); elt.style.width = "100%"; elt.style.display = "none"; elt.innerHTML = '<div class="urt-progressBarBG"></div><span class="urt-progressBarFG">100%</span>'; divpbi.appendChild(elt); elt = WMEURMPT.createElement("div", "urt-info"); divpbi.appendChild(elt); addon.appendChild(divpbi); var section = WMEURMPT.createElement("p", "urt-main-title"); section.style.paddingTop = "0px"; section.style.marginTop = "-15px"; section.style.textIndent = "8px"; var title = '<b><a target="_blank" href="https://greasyfork.org/fr/scripts/368141-wme-ur-mp-tracking"><u>UR-MP Tracking</u></a> <a target="_blank" href="https://www.waze.com/forum/viewtopic.php?f=68&t=91786">Fr</a> <a target="_blank" href="https://www.waze.com/forum/viewtopic.php?f=819&t=125216">En</a> </b> v' + WMEURMPT.urmpt_version + '<span style="padding-left: 20px;"><a href="#" id="urmpt-onoff"><img class="urt-chkbox" src="data:image/png;base64,' + (WMEURMPT.isEnabled ? WMEURMPT.icon_checked : WMEURMPT.icon_unchecked) + '" /></a></span>'; section.innerHTML = title; if (WMEURMPT.displayLegend) { section.innerHTML += '<img id="urt-close-legend" style="display: block; position: relative; left: 5px; top: 10px; float: right; z-index: 99; width: 16px; height: 16px;" src="data:image/png;base64,' + WMEURMPT.icon_delete + '" /><div id="urt-legend" ><table class="urt-table"><tr><td class="urt-bg-selected">Last visited</td><td>Visited</td></tr><tr><td class="urt-bg-ifollow">I follow</td><td class="urt-bg-highlighted">Never visited</td></tr></table></div>'; } addon.appendChild(section); var quickOptions = WMEURMPT.createElement("span", "urmpt-qoptions"); var qohtml = ""; qohtml = '<font style="font-size: smaller; font-weight: 600;">Quick options:</font><hr style="margin: 0px;" />'; qohtml += '<table style="border: 0px; width: 100%;"><tr>'; qohtml += '<td style="width: 50%;">'; qohtml += '<a href="#" id="urmpt-donoff"><img class="urt-chkbox" src="data:image/png;base64,' + (WMEURMPT.isComputeDistances ? WMEURMPT.icon_checked : WMEURMPT.icon_unchecked) + '" /></a>Distances<br/>'; qohtml += '<a href="#" id="urmpt-asonoff"><img class="urt-chkbox" src="data:image/png;base64,' + (WMEURMPT.isAutoScan ? WMEURMPT.icon_checked : WMEURMPT.icon_unchecked) + '" /></a>Auto scan'; qohtml += "</td><td>"; qohtml += '<a href="#" id="urmpt-suronoff"><img class="urt-chkbox" src="data:image/png;base64,' + (WMEURMPT.scanUR ? WMEURMPT.icon_checked : WMEURMPT.icon_unchecked) + '" /></a>Scan UR<br/>'; qohtml += '<a href="#" id="urmpt-smponoff"><img class="urt-chkbox" src="data:image/png;base64,' + (WMEURMPT.scanMP ? WMEURMPT.icon_checked : WMEURMPT.icon_unchecked) + '" /></a>Scan MP<br/>'; qohtml += '<a href="#" id="urmpt-smconoff"><img class="urt-chkbox" src="data:image/png;base64,' + (WMEURMPT.scanMC ? WMEURMPT.icon_checked : WMEURMPT.icon_unchecked) + '" /></a>Scan MC<br/>'; qohtml += '<a href="#" id="urmpt-spuronoff"><img class="urt-chkbox" src="data:image/png;base64,' + (WMEURMPT.scanPUR ? WMEURMPT.icon_checked : WMEURMPT.icon_unchecked) + '" /></a>Scan PUR'; qohtml += "</td>"; qohtml += "</tr></table>"; quickOptions.innerHTML = qohtml; addon.appendChild(quickOptions); var generalMenu = WMEURMPT.createElement("center"); generalMenu.style.marginBottom = "10px"; addon.appendChild(generalMenu); var elt; var scanGroup = WMEURMPT.createElement("div", "urt-a-scanGroup"); generalMenu.appendChild(scanGroup); var urmpTabs = WMEURMPT.createElement("ul", "urmp-tabs"); addon.appendChild(urmpTabs); urmpTabs.className = "nav nav-tabs"; urmpTabs.innerHTML = '<li class="active" style="width: 13.75%; text-align: center; height: 30px;"><a id="urmp-tabstitle-ur" style="height: 30px;" href="#urmp-tabs-ur" data-toggle="tab">UR</a></li>'; urmpTabs.innerHTML += '<li class="" style="width: 13.75%; text-align: center; height: 30px;"><a id="urmp-tabstitle-mp" style="height: 30px;" href="#urmp-tabs-mp" data-toggle="tab">MP</a></li>'; urmpTabs.innerHTML += '<li class="" style="width: 13.75%; text-align: center; height: 30px;"><a id="urmp-tabstitle-mc" style="height: 30px;" href="#urmp-tabs-mc" data-toggle="tab">MC</a></li>'; urmpTabs.innerHTML += '<li class="" style="width: 13.75%; text-align: center; height: 30px;"><a id="urmp-tabstitle-pur" style="height: 30px;" href="#urmp-tabs-pur" data-toggle="tab">PUR</a></li>'; urmpTabs.innerHTML += '<li class="" style="width: 13.75%; text-align: center; height: 30px;"><a class="fa fa-bar-chart icon-bar-chart" id="urmp-tabstitle-stat" style="height: 30px;" href="#urmp-tabs-os" data-toggle="tab"></a></li>'; urmpTabs.innerHTML += '<li class="" style="width: 13.75%; text-align: center; height: 30px;"><a class="fa fa-pencil-square-o" style="height: 30px;" href="#urmp-tabs-areas" data-toggle="tab"></a></li>'; urmpTabs.innerHTML += '<li class="" style="width: 13.75%; text-align: center; height: 30px;"><a class="fa fa-gear" style="height: 30px;" href="#urmp-tabs-settings" data-toggle="tab"></a></li>'; window.setTimeout(WMEURMPT.connectStatHandler); window.setTimeout(WMEURMPT.connectURTabHandler); window.setTimeout(WMEURMPT.connectMPTabHandler); window.setTimeout(WMEURMPT.connectMCTabHandler); window.setTimeout(WMEURMPT.connectPURTabHandler); var urmp_tab_content = WMEURMPT.createElement("div", "urmpt-tab-content"); urmp_tab_content.className = "tab-content"; urmp_tab_content.style.paddingBottom = "10px"; urmp_tab_content.style.paddingTop = "10px"; urmp_tab_content.style.paddingLeft = "5px"; urmp_tab_content.style.paddingRight = "5px"; addon.appendChild(urmp_tab_content); var ur_tab_pane = WMEURMPT.createElement("section", "urmp-tabs-ur"); ur_tab_pane.className = "tab-pane active"; ur_tab_pane.style.paddingLeft = "0px"; ur_tab_pane.style.paddingRight = "0px"; urmp_tab_content.appendChild(ur_tab_pane); var urMenu = WMEURMPT.createElement("center"); ur_tab_pane.appendChild(urMenu); elt = WMEURMPT.createElement("a", "urt-a-markallvisited"); elt.innerHTML = "Mark all as visited"; elt.href = "#"; elt.onclick = WMEURMPT.markAllURAsVisited; urMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; urMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "urt-a-clearAll"); elt.innerHTML = "Clear all"; elt.href = "#"; elt.onclick = WMEURMPT.clearAllUR; urMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; urMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "urt-a-export"); elt.href = "#"; elt.innerHTML = '<img src="data:image/png;base64,' + WMEURMPT.icon_export + '" width="14px" height="14px" />'; elt.onclick = function() { var that = this; WMEURMPT.exportURMPs("UR", that); }; urMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; urMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "urt-a-export-kml"); elt.href = "#"; elt.innerHTML = '<img src="data:image/png;base64,' + WMEURMPT.icon_ge + '" height="14px" />'; elt.onclick = function() { var that = this; WMEURMPT.exportKML_URMPs("UR", that, 0); return false; }; urMenu.appendChild(elt); elt = WMEURMPT.createElement("div"); var content = '<ul class="urt-filter-list">'; content += '<li><input type="checkbox" id="urt-checkbox-filterInvert"><b>Invert filters</b></li>'; content += '<li title="Show URs I have already commented"><input type="checkbox" id="urt-checkbox-filterHideWithoutCommentFromMe"> Hide without comment from me</li>'; content += '<li title="Show URs with last comment from Reporter"><input type="checkbox" id="urt-checkbox-filterHideLastCommentFromEditor"> Hide last comment from an editor</li>'; content += '<li title="Show only URs from 0 to n comments"><input type="checkbox" id="urt-checkbox-filterHideWithCommentCount"> Hide with more than <input size="2" maxlength="2" type="text" id="urt-filterHideWithCommentCount" value="' + WMEURMPT.currentURCommentsCount + '"></input> comment(s)</li>'; content += '<li title="Show URs with unread comment(s)"><input type="checkbox" id="urt-checkbox-filterHideNoNewComment"> Hide no new comment</li>'; content += '<li title="Show URs in my drive areas"><input type="checkbox" id="urt-checkbox-filterHideOutOfMyDriveArea"> Hide out of my drive area</li>'; if (WMEURMPT.uam) { content += '<li title="Show URs in my managed areas"><input type="checkbox" id="urt-checkbox-filterHideOutOfMyManagedArea"> Hide out of my managed area</li>'; } content += '<li title="Show URs I have never seen"><input type="checkbox" id="urt-checkbox-filterHideVisited"> Hide visited</li>'; if (WMEURMPT.ul >= WMEURMPT.rl4cp) { content += '<li title="Show only pendings URs"><input type="checkbox" id="urt-checkbox-filterHideClosed"> Hide closed</li>'; } content += '<li title="Show white listed URs"><input type="checkbox" id="urt-checkbox-filterHideBlacklisted"> Hide black listed</li>'; content += '<li title="Show black listed URs"><input type="checkbox" id="urt-checkbox-filterHideWhitelisted"> Hide white listed</li>'; content += '<li title="Show all but General Error"><input type="checkbox" id="urt-checkbox-filterHideGE"> Hide General Error</li>'; content += '<li title="Show UR if description contains keyword"><input type="checkbox" id="urt-checkbox-filterHideNotKW"> Description keyword: <input type="text" id="urt-filterKW" value="' + WMEURMPT.currentURKeyWord + '"></input></li>'; content += '<li title="Show only nth first URs"><input type="checkbox" id="urt-checkbox-filterHideLimitTo"> Limit to: <input type="text" id="urt-filterLimitTo" value="' + WMEURMPT.currentURLimitTo + '"></input></li>'; content += '<li title="Show tagged URs"><input type="checkbox" id="urt-checkbox-filterHideTagged"> Hide tagged</li>'; content += '<li title="Show only one type"><input type="checkbox" id="urt-checkbox-filterHideOnlyType"> Hide all but: <select style="height: 25px" id="urt-filterOnlyType">'; var URTypes = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 21, 22, 23]; for (var i = 0; i < URTypes.length; i++) { content += '<option value="' + URTypes[i] + '"' + (WMEURMPT.currentUROnlyType == URTypes[i] ? " selected" : "") + ">" + WMEURMPT.getFullURTypeFromType(URTypes[i]) + "</option>"; } content += "</select></li>"; content += '<li title="Show only inside area"><input type="checkbox" id="urt-checkbox-filterHideOnlyArea"> Hide all but: <select style="height: 25px" id="urt-filterOnlyArea">'; content += "</select></li>"; content += "</ul>"; ur_tab_pane.appendChild(elt); var pannel = new WMEURMPT.PopupPannel("FilterUR", "100%", "100%", "#93c4d3"); pannel.setTriggerInnerHTML("Filters"); pannel.setContentsInnerHTML(content); pannel.installInside(elt); elt = WMEURMPT.createElement("div", "urt-list"); ur_tab_pane.appendChild(elt); var mp_tab_pane = WMEURMPT.createElement("section", "urmp-tabs-mp"); mp_tab_pane.className = "tab-pane"; mp_tab_pane.style.paddingLeft = "0px"; mp_tab_pane.style.paddingRight = "0px"; urmp_tab_content.appendChild(mp_tab_pane); var mpMenu = WMEURMPT.createElement("center"); mp_tab_pane.appendChild(mpMenu); elt = WMEURMPT.createElement("a", "mpt-a-markallvisited"); elt.innerHTML = "Mark all as visited"; elt.href = "#"; elt.onclick = WMEURMPT.markAllMPAsVisited; mpMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; mpMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "mpt-a-clearAll"); elt.innerHTML = "Clear all"; elt.href = "#"; elt.onclick = WMEURMPT.clearAllMP; mpMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; mpMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "mpt-a-export"); elt.href = "#"; elt.innerHTML = '<img src="data:image/png;base64,' + WMEURMPT.icon_export + '" width="14px" height="14px" />'; elt.onclick = function() { var that = this; WMEURMPT.exportURMPs("MP", that); }; mpMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; mpMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "mpt-a-export-kml"); elt.href = "#"; elt.innerHTML = '<img src="data:image/png;base64,' + WMEURMPT.icon_ge + '" height="14px" />'; elt.onclick = function() { var that = this; WMEURMPT.exportKML_URMPs("MP", that, 0); return false; }; mpMenu.appendChild(elt); elt = WMEURMPT.createElement("div"); content = '<ul class="urt-filter-list">'; content += '<li title="Show MPs in my drive areas"><input type="checkbox" id="mpt-checkbox-filterHideOutOfMyDriveArea"> Hide out of my drive area</li>'; if (WMEURMPT.uam) { content += '<li title="Show MPs in my managed areas"><input type="checkbox" id="mpt-checkbox-filterHideOutOfMyManagedArea"> Hide out of my managed area</li>'; } content += '<li title="Show MPs I have never seen"><input type="checkbox" id="mpt-checkbox-filterHideVisited"> Hide visited</li>'; if (WMEURMPT.ul >= WMEURMPT.rl4cp) { content += '<li title="Show only pendings MPs"><input type="checkbox" id="mpt-checkbox-filterHideClosed"> Hide closed</li>'; } content += '<li title="Show white listed MPs"><input type="checkbox" id="mpt-checkbox-filterHideBlacklisted"> Hide black listed</li>'; content += '<li title="Show black listed MPs"><input type="checkbox" id="mpt-checkbox-filterHideWhitelisted"> Hide white listed</li>'; content += '<li title="Show only nth first MPs"><input type="checkbox" id="mpt-checkbox-filterHideLimitTo"> Limit to: <input type="text" id="mpt-filterLimitTo" value="' + WMEURMPT.currentMPLimitTo + '"></input></li>'; content += '<li title="Show only one type"><input type="checkbox" id="mpt-checkbox-filterHideOnlyType"> Hide all but: <select style="height: 25px" id="mpt-filterOnlyType">'; var MPTypes = [1, 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17, 19, 20, 21, 22, 23, 50, 51, 52, 53, 70, 71, 101, 102, 103, 104, 105, 106, 200, 300]; for (var i = 0; i < MPTypes.length; i++) { content += '<option value="' + MPTypes[i] + '"' + (WMEURMPT.currentMPOnlyType == MPTypes[i] ? " selected" : "") + ">" + WMEURMPT.getFullMPTypeFromType(MPTypes[i]) + "</option>"; } content += "</select></li>"; content += '<li title="Show only one area"><input type="checkbox" id="mpt-checkbox-filterHideOnlyArea"> Hide all but: <select style="height: 25px" id="mpt-filterOnlyArea">'; content += "</select></li>"; content += "</ul>"; mp_tab_pane.appendChild(elt); var pannelMP = new WMEURMPT.PopupPannel("FilterMP", "100%", "100%", "#93c4d3"); pannelMP.setTriggerInnerHTML("Filters"); pannelMP.setContentsInnerHTML(content); pannelMP.installInside(elt); elt = WMEURMPT.createElement("div", "mpt-list"); mp_tab_pane.appendChild(elt); var mc_tab_pane = WMEURMPT.createElement("section", "urmp-tabs-mc"); mc_tab_pane.className = "tab-pane"; mc_tab_pane.style.paddingLeft = "0px"; mc_tab_pane.style.paddingRight = "0px"; urmp_tab_content.appendChild(mc_tab_pane); var mcMenu = WMEURMPT.createElement("center"); mc_tab_pane.appendChild(mcMenu); elt = WMEURMPT.createElement("a", "mct-a-markallvisited"); elt.innerHTML = "Mark all as visited"; elt.href = "#"; elt.onclick = WMEURMPT.markAllMCAsVisited; mcMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; mcMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "mct-a-clearAll"); elt.innerHTML = "Clear all"; elt.href = "#"; elt.onclick = WMEURMPT.clearAllMC; mcMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; mcMenu.appendChild(elt); elt = WMEURMPT.createElement("div"); var content = '<ul class="urt-filter-list">'; content += '<li title="Show MCs in my drive areas"><input type="checkbox" id="mct-checkbox-filterHideOutOfMyDriveArea"> Hide out of my drive area</li>'; if (WMEURMPT.uam) { content += '<li title="Show MCs in my managed areas"><input type="checkbox" id="mct-checkbox-filterHideOutOfMyManagedArea"> Hide out of my managed area</li>'; } content += '<li title="Show MCs I have never seen"><input type="checkbox" id="mct-checkbox-filterHideVisited"> Hide visited</li>'; content += '<li title="Show white listed MCs"><input type="checkbox" id="mct-checkbox-filterHideBlacklisted"> Hide black listed</li>'; content += '<li title="Show black listed MCs"><input type="checkbox" id="mct-checkbox-filterHideWhitelisted"> Hide white listed</li>'; content += '<li title="Show only nth first MCs"><input type="checkbox" id="mct-checkbox-filterHideLimitTo"> Limit to: <input type="text" id="mct-filterLimitTo" value="' + WMEURMPT.currentMCLimitTo + '"></input></li>'; content += '<li title="Show MC if subject or body contains keyword"><input type="checkbox" id="mct-checkbox-filterHideNotKW"> Subject/Body keyword: <input type="text" id="mct-filterKW" value="' + WMEURMPT.currentMCKeyWord + '"></input></li>'; content += '<li title="Show only inside area"><input type="checkbox" id="mct-checkbox-filterHideOnlyArea"> Hide all but: <select style="height: 25px" id="mct-filterOnlyArea">'; content += "</select></li>"; content += "</ul>"; mc_tab_pane.appendChild(elt); var pannel = new WMEURMPT.PopupPannel("FilterMC", "100%", "100%", "#93c4d3"); pannel.setTriggerInnerHTML("Filters"); pannel.setContentsInnerHTML(content); pannel.installInside(elt); elt = WMEURMPT.createElement("div", "mct-list"); mc_tab_pane.appendChild(elt); var pur_tab_pane = WMEURMPT.createElement("section", "urmp-tabs-pur"); pur_tab_pane.className = "tab-pane"; pur_tab_pane.style.paddingLeft = "0px"; pur_tab_pane.style.paddingRight = "0px"; urmp_tab_content.appendChild(pur_tab_pane); var purMenu = WMEURMPT.createElement("center"); pur_tab_pane.appendChild(purMenu); elt = WMEURMPT.createElement("a", "purt-a-markallvisited"); elt.innerHTML = "Mark all as visited"; elt.href = "#"; elt.onclick = WMEURMPT.markAllPURAsVisited; purMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; purMenu.appendChild(elt); elt = WMEURMPT.createElement("a", "purt-a-clearAll"); elt.innerHTML = "Clear all"; elt.href = "#"; elt.onclick = WMEURMPT.clearAllPUR; purMenu.appendChild(elt); elt = WMEURMPT.createElement("span"); elt.innerHTML = "|"; purMenu.appendChild(elt); elt = WMEURMPT.createElement("div"); var content = '<ul class="urt-filter-list">'; content += '<li title="Show PURs in my drive areas"><input type="checkbox" id="purt-checkbox-filterHideOutOfMyDriveArea"> Hide out of my drive area</li>'; if (WMEURMPT.uam) { content += '<li title="Show PURs in my managed areas"><input type="checkbox" id="purt-checkbox-filterHideOutOfMyManagedArea"> Hide out of my managed area</li>'; } content += '<li title="Show PURs I have never seen"><input type="checkbox" id="purt-checkbox-filterHideVisited"> Hide visited</li>'; content += '<li title="Show white listed PURs"><input type="checkbox" id="purt-checkbox-filterHideBlacklisted"> Hide black listed</li>'; content += '<li title="Show black listed PURs"><input type="checkbox" id="purt-checkbox-filterHideWhitelisted"> Hide white listed</li>'; content += '<li title="Show only nth first PURs"><input type="checkbox" id="purt-checkbox-filterHideLimitTo"> Limit to: <input type="text" id="purt-filterLimitTo" value="' + WMEURMPT.currentPURLimitTo + '"></input></li>'; content += '<li title="Show PUR if subject or body contains keyword"><input type="checkbox" id="purt-checkbox-filterHideNotKW"> Subject/Body keyword: <input type="text" id="purt-filterKW" value="' + WMEURMPT.currentPURKeyWord + '"></input></li>'; content += '<li title="Show only one categorie"><input type="checkbox" id="purt-checkbox-filterHideOnlyCategorie"> Hide all but: <select style="height: 25px" id="purt-filterOnlyCategorie">'; var PURCategories = WMEURMPT.objectToList(WMEURMPT.getFullPURCategoriesFromCategories()); for (var i = 0; i < PURCategories.length; i++) { content += '<option value="' + PURCategories[i] + '"' + (WMEURMPT.currentPUROnlyCategorie == PURCategories[i] ? " selected" : "") + ">" + PURCategories[i] + "</option>"; } content += "</select></li>"; content += '<li title="Show only inside area"><input type="checkbox" id="purt-checkbox-filterHideOnlyArea"> Hide all but: <select style="height: 25px" id="purt-filterOnlyArea">'; content += "</select></li>"; content += "</ul>"; pur_tab_pane.appendChild(elt); var pannel = new WMEURMPT.PopupPannel("FilterPUR", "100%", "100%", "#93c4d3"); pannel.setTriggerInnerHTML("Filters"); pannel.setContentsInnerHTML(content); pannel.installInside(elt); elt = WMEURMPT.createElement("div", "purt-list"); pur_tab_pane.appendChild(elt); var os_tab_pane = WMEURMPT.createElement("section", "urmp-tabs-os"); os_tab_pane.className = "tab-pane"; os_tab_pane.style.paddingLeft = "0px"; os_tab_pane.style.paddingRight = "0px"; urmp_tab_content.appendChild(os_tab_pane); var divStats = WMEURMPT.createElement("div", "urmpt-stats"); os_tab_pane.appendChild(divStats); var areas_tab_pane = WMEURMPT.createElement("section", "urmp-tabs-areas"); areas_tab_pane.className = "tab-pane"; areas_tab_pane.style.paddingLeft = "0px"; areas_tab_pane.style.paddingRight = "0px"; urmp_tab_content.appendChild(areas_tab_pane); if (WMEURMPT.ul >= 8 || WMEURMPT.me.isCountryManager()) { var divCM = WMEURMPT.createElement("div"); divCM.innerHTML = "Add country(ies) or subset(s) to scan list.<br/>"; var divInput = WMEURMPT.createElement("div"); divInput.style.whiteSpace = "nowrap"; var countryList = WMEURMPT.createElement("select", "urmpt-countryList"); countryList.style.width = "calc(100% - 45px)"; divInput.appendChild(countryList); window.setTimeout(WMEURMPT.initCountryList); var addButton = WMEURMPT.createElement("button"); addButton.innerHTML = "Add"; addButton.onclick = WMEURMPT.addCountryToAreaList; divInput.appendChild(addButton); divCM.appendChild(divInput); divCM.insertAdjacentHTML("beforeend", "<br/>Your country scan list:<br/>"); var divCountryScanList = WMEURMPT.createElement("div", "urmpt-countryscanlist"); divCM.appendChild(divCountryScanList); areas_tab_pane.appendChild(divCM); areas_tab_pane.appendChild(WMEURMPT.createElement("hr")); } var divCA = WMEURMPT.createElement("div"); var divAddCA = WMEURMPT.createElement("div"); divAddCA.style.display = "none"; divAddCA.style.paddingLeft = "10px"; var elAddCAmenu = WMEURMPT.createElement("a"); elAddCAmenu.innerHTML = "\u25b6 Add custom area"; elAddCAmenu.href = "#"; elAddCAmenu.onclick = function() { if (divAddCA.style.display == "none") { divAddCA.style.display = "block"; this.innerHTML = "\u25bc Add custom area"; } else { divAddCA.style.display = "none"; this.innerHTML = "\u25b6 Add custom area"; } }; var inputFromPOI = WMEURMPT.createElement("div"); inputFromPOI.innerHTML = "FROM AN UNSAVED POI AREA"; var inputFromPOI_name = WMEURMPT.createElement("div"); inputFromPOI_name.innerHTML = 'Give a name to your area:<input type="text" id="urmpt-areas-frompoi-name" />'; var inputFromPOI_button = WMEURMPT.createElement("div"); inputFromPOI_button.innerHTML = 'Then, <a href="#" id="urmpt-areas-frompoi-add"/>add</a>'; inputFromPOI.appendChild(inputFromPOI_name); inputFromPOI.appendChild(inputFromPOI_button); divAddCA.appendChild(inputFromPOI); divAddCA.appendChild(WMEURMPT.createElement("hr")); var inputFromLL = WMEURMPT.createElement("div"); inputFromLL.innerHTML = "FROM LON/LAT BOUNDING BOX"; var input1 = WMEURMPT.createElement("div"); input1.innerHTML = 'Fill lon/lat top left corner<br/>or <a href="#" id="urmpt-areas-fill-tl">get it from your top left screen</a><br/>lon:<input type="text" size="10" maxlentgh="10" id="urmpt-areas-tl-lon" />lat:<input type="text" size="10" maxlentgh="10" id="urmpt-areas-tl-lat" />'; var input2 = WMEURMPT.createElement("div"); input2.innerHTML = 'Fill lon/lat bottom right corner<br/>or <a href="#" id="urmpt-areas-fill-br">get it from your bottom right screen</a><br/>lon:<input type="text" size="10" maxlentgh="10" id="urmpt-areas-br-lon" />lat:<input type="text" size="10" maxlentgh="10" id="urmpt-areas-br-lat" />'; var input3 = WMEURMPT.createElement("div"); input3.innerHTML = 'Give a name to your area:<input type="text" id="urmpt-areas-name" />'; var input4 = WMEURMPT.createElement("div"); input4.innerHTML = 'Then, <a href="#" id="urmpt-areas-name-add"/>add</a>'; inputFromLL.appendChild(input1); inputFromLL.appendChild(input2); inputFromLL.appendChild(input3); inputFromLL.appendChild(input4); divAddCA.appendChild(inputFromLL); divAddCA.appendChild(WMEURMPT.createElement("hr")); var inputFromWKT = WMEURMPT.createElement("div"); inputFromWKT.innerHTML = "FROM WKT"; var inputFromWKTFile = WMEURMPT.createElement("div"); inputFromWKTFile.innerHTML = '<input type="file" id="urmpt-areas-wktfile" name="files[]" />'; var inputFromWKTName = WMEURMPT.createElement("div"); inputFromWKTName.innerHTML = 'Give a name to your area:<input type="text" id="urmpt-areas-wktfile-name" />'; var inputFromWKTAdd = WMEURMPT.createElement("div"); inputFromWKTAdd.innerHTML = 'Then, <a href="#" id="urmpt-areas-wktfile-add"/>add</a>'; inputFromWKT.appendChild(inputFromWKTName); inputFromWKT.appendChild(inputFromWKTFile); inputFromWKT.appendChild(inputFromWKTAdd); divAddCA.appendChild(inputFromWKT); divAddCA.appendChild(WMEURMPT.createElement("hr")); var inputFromJSON = WMEURMPT.createElement("div"); inputFromJSON.innerHTML = "FROM JSON"; var inputFromJSONFile = WMEURMPT.createElement("div"); inputFromJSONFile.innerHTML = '<input type="file" id="urmpt-areas-jsonfile" name="files[]" />'; var inputFromJSONAdd = WMEURMPT.createElement("div"); inputFromJSONAdd.innerHTML = 'Then, <a href="#" id="urmpt-areas-jsonfile-add"/>add</a>'; inputFromJSON.appendChild(inputFromJSONFile); inputFromJSON.appendChild(inputFromJSONAdd); divAddCA.appendChild(inputFromJSON); divCA.appendChild(elAddCAmenu); divCA.appendChild(divAddCA); divCA.insertAdjacentHTML("beforeend", "<br/>Your custom area scan list:<br/>"); var divCustomAreaScanList = WMEURMPT.createElement("div", "urmpt-custom-scan-list"); divCA.appendChild(divCustomAreaScanList); areas_tab_pane.appendChild(divCA); var settings_tab_pane = WMEURMPT.createElement("section", "urmp-tabs-settings"); settings_tab_pane.className = "tab-pane"; urmp_tab_content.appendChild(settings_tab_pane); var ur_description_column_width = WMEURMPT.createElement("span"); ur_description_column_width.innerHTML = 'UR description column width: <input style="height:20px" type="text" size="3" id="urmpt-setting-urdescriptionwidth" value="' + WMEURMPT.URDescriptionMaxLength + '"/><br>'; settings_tab_pane.appendChild(ur_description_column_width); var mp_description_column_width = WMEURMPT.createElement("span"); mp_description_column_width.innerHTML = 'MP description column width: <input style="height:20px" type="text" size="3" id="urmpt-setting-mpdescriptionwidth" value="' + WMEURMPT.MPDescriptionMaxLength + '"/><br>'; settings_tab_pane.appendChild(mp_description_column_width); var mc_subject_column_width = WMEURMPT.createElement("span"); mc_subject_column_width.innerHTML = 'MC subject column width: <input style="height:20px" type="text" size="3" id="urmpt-setting-mcsubjectwidth" value="' + WMEURMPT.MCSubjectMaxLength + '"/><br>'; settings_tab_pane.appendChild(mc_subject_column_width); var mc_body_column_width = WMEURMPT.createElement("span"); mc_body_column_width.innerHTML = 'MC body column width: <input style="height:20px" type="text" size="3" id="urmpt-setting-mcbodywidth" value="' + WMEURMPT.MCBodyMaxLength + '"/><br>'; settings_tab_pane.appendChild(mc_body_column_width); var pur_categories_column_width = WMEURMPT.createElement("span"); pur_categories_column_width.innerHTML = 'PUR categories column width: <input style="height:20px" type="text" size="3" id="urmpt-setting-purcategorieswidth" value="' + WMEURMPT.PURCategoriesMaxLength + '"/><br>'; settings_tab_pane.appendChild(pur_categories_column_width); var pur_name_column_width = WMEURMPT.createElement("span"); pur_name_column_width.innerHTML = 'PUR name column width: <input style="height:20px" type="text" size="3" id="urmpt-setting-purnamewidth" value="' + WMEURMPT.PURNameMaxLength + '"/><br>'; settings_tab_pane.appendChild(pur_name_column_width); var ur_tagged_list_span = WMEURMPT.createElement("span"); ur_tagged_list_span.innerHTML = 'UR Tag keywords: <input style="height:20px;width:100%;" type="text" id="urmpt-setting-urtaglist" value="' + WMEURMPT.taggedURList.join(";") + '"/>'; settings_tab_pane.appendChild(ur_tagged_list_span); var ur_ageColumn_span = WMEURMPT.createElement("span"); ur_ageColumn_span.innerHTML = '<input type="checkbox" id="urmpt-setting-uragecolislastcomment" ' + (WMEURMPT.URAgeColIsLastComment ? "checked " : "") + "/> UR age column is last comment age"; settings_tab_pane.appendChild(ur_ageColumn_span); window.setTimeout(WMEURMPT.setupCAEvents); window.setTimeout(WMEURMPT.updateScanGroup); var userTabs = WMEURMPT.getId("user-tabs"); var userInfo = WMEURMPT.getId("user-info"); var sidePanelPrefs = WMEURMPT.getId("sidepanel-prefs"); var navTabs = WMEURMPT.getElementsByClassName("nav-tabs", userTabs)[0]; var tabContent = sidePanelPrefs.parentNode; newtab = WMEURMPT.createElement("li"); newtab.innerHTML = '<a title="UR-MP Tracking" href="#sidepanel-urt" data-toggle="tab"><span class="fa fa-map-marker icon-map-marker" style="color: red;"></span></a>'; navTabs.appendChild(newtab); addon.id = "sidepanel-urt"; addon.className = "tab-pane"; addon.style.marginLeft = "-10px"; tabContent.appendChild(addon); if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideClosed && WMEURMPT.ul >= WMEURMPT.rl4cp) { WMEURMPT.getId("urt-checkbox-filterHideClosed").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideWithoutCommentFromMe) { WMEURMPT.getId("urt-checkbox-filterHideWithoutCommentFromMe").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideWithCommentCount) { WMEURMPT.getId("urt-checkbox-filterHideWithCommentCount").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideNoNewComment) { WMEURMPT.getId("urt-checkbox-filterHideNoNewComment").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideOutOfMyDriveArea) { WMEURMPT.getId("urt-checkbox-filterHideOutOfMyDriveArea").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { WMEURMPT.getId("urt-checkbox-filterHideOutOfMyManagedArea").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideVisited) { WMEURMPT.getId("urt-checkbox-filterHideVisited").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideBlacklisted) { WMEURMPT.getId("urt-checkbox-filterHideBlacklisted").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideWhitelisted) { WMEURMPT.getId("urt-checkbox-filterHideWhitelisted").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideGE) { WMEURMPT.getId("urt-checkbox-filterHideGE").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideNotKW) { WMEURMPT.getId("urt-checkbox-filterHideNotKW").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideLimitTo) { WMEURMPT.getId("urt-checkbox-filterHideLimitTo").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideType) { WMEURMPT.getId("urt-checkbox-filterHideOnlyType").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideArea) { WMEURMPT.getId("urt-checkbox-filterHideOnlyArea").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideLastCommentFromEditor) { WMEURMPT.getId("urt-checkbox-filterHideLastCommentFromEditor").checked = true; } if (WMEURMPT.currentURFilter & WMEURMPT.URFilterList.hideTagged) { WMEURMPT.getId("urt-checkbox-filterHideTagged").checked = true; } WMEURMPT.getId("urt-checkbox-filterInvert").onclick = WMEURMPT.updateIHMFromURList; if (WMEURMPT.ul >= WMEURMPT.rl4cp) { WMEURMPT.getId("urt-checkbox-filterHideClosed").onclick = WMEURMPT.toggleURFilterHideClosed; } WMEURMPT.getId("urt-checkbox-filterHideWithoutCommentFromMe").onclick = WMEURMPT.toggleURFilterHideWithoutCommentFromMe; WMEURMPT.getId("urt-checkbox-filterHideWithCommentCount").onclick = WMEURMPT.toggleURFilterHideWithCommentCount; WMEURMPT.getId("urt-checkbox-filterHideNoNewComment").onclick = WMEURMPT.toggleURFilterHideNoNewComment; WMEURMPT.getId("urt-checkbox-filterHideOutOfMyDriveArea").onclick = WMEURMPT.toggleURFilterHideOutOfMyDriveArea; if (WMEURMPT.uam) { WMEURMPT.getId("urt-checkbox-filterHideOutOfMyManagedArea").onclick = WMEURMPT.toggleURFilterHideOutOfMyManagedArea; } WMEURMPT.getId("urt-checkbox-filterHideVisited").onclick = WMEURMPT.toggleURFilterHideVisited; WMEURMPT.getId("urt-checkbox-filterHideBlacklisted").onclick = WMEURMPT.toggleURFilterHideBlacklisted; WMEURMPT.getId("urt-checkbox-filterHideWhitelisted").onclick = WMEURMPT.toggleURFilterHideWhitelisted; WMEURMPT.getId("urt-checkbox-filterHideGE").onclick = WMEURMPT.toggleURFilterHideGE; WMEURMPT.getId("urt-checkbox-filterHideNotKW").onclick = WMEURMPT.toggleURFilterHideNotKW; WMEURMPT.getId("urt-checkbox-filterHideLimitTo").onclick = WMEURMPT.toggleURFilterHideLimitTo; WMEURMPT.getId("urt-checkbox-filterHideOnlyType").onclick = WMEURMPT.toggleURFilterHideOnlyType; WMEURMPT.getId("urt-checkbox-filterHideOnlyArea").onclick = WMEURMPT.toggleURFilterHideOnlyArea; WMEURMPT.getId("urt-filterHideWithCommentCount").onkeypress = WMEURMPT.URCommentsCountChanged; WMEURMPT.getId("urt-filterHideWithCommentCount").onpaste = WMEURMPT.URCommentsCountChanged; WMEURMPT.getId("urt-filterHideWithCommentCount").oninput = WMEURMPT.URCommentsCountChanged; WMEURMPT.getId("urt-filterKW").onkeypress = WMEURMPT.URKeywordChanged; WMEURMPT.getId("urt-filterKW").onpaste = WMEURMPT.URKeywordChanged; WMEURMPT.getId("urt-filterKW").oninput = WMEURMPT.URKeywordChanged; WMEURMPT.getId("urt-filterLimitTo").onkeypress = WMEURMPT.URLimitToChanged; WMEURMPT.getId("urt-filterLimitTo").onpaste = WMEURMPT.URLimitToChanged; WMEURMPT.getId("urt-filterLimitTo").oninput = WMEURMPT.URLimitToChanged; WMEURMPT.getId("urt-filterOnlyType").onchange = WMEURMPT.UROnlyTypeChanged; WMEURMPT.getId("urt-filterOnlyArea").onchange = WMEURMPT.UROnlyAreaChanged; WMEURMPT.getId("urt-checkbox-filterHideLastCommentFromEditor").onclick = WMEURMPT.toggleURFilterHideLastCommentFromEditor; WMEURMPT.getId("urt-checkbox-filterHideTagged").onclick = WMEURMPT.toggleURFilterHideTagged; if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideClosed && WMEURMPT.ul >= WMEURMPT.rl4cp) { WMEURMPT.getId("mpt-checkbox-filterHideClosed").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideOutOfMyDriveArea) { WMEURMPT.getId("mpt-checkbox-filterHideOutOfMyDriveArea").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { WMEURMPT.getId("mpt-checkbox-filterHideOutOfMyManagedArea").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideVisited) { WMEURMPT.getId("mpt-checkbox-filterHideVisited").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideBlacklisted) { WMEURMPT.getId("mpt-checkbox-filterHideBlacklisted").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideWhitelisted) { WMEURMPT.getId("mpt-checkbox-filterHideWhitelisted").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideLimitTo) { WMEURMPT.getId("mpt-checkbox-filterHideLimitTo").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideType) { WMEURMPT.getId("mpt-checkbox-filterHideOnlyType").checked = true; } if (WMEURMPT.currentMPFilter & WMEURMPT.MPFilterList.hideArea) { WMEURMPT.getId("mpt-checkbox-filterHideOnlyArea").checked = true; } if (WMEURMPT.ul >= WMEURMPT.rl4cp) { WMEURMPT.getId("mpt-checkbox-filterHideClosed").onclick = WMEURMPT.toggleMPFilterHideClosed; } WMEURMPT.getId("mpt-checkbox-filterHideOutOfMyDriveArea").onclick = WMEURMPT.toggleMPFilterHideOutOfMyDriveArea; if (WMEURMPT.uam) { WMEURMPT.getId("mpt-checkbox-filterHideOutOfMyManagedArea").onclick = WMEURMPT.toggleMPFilterHideOutOfMyManagedArea; } WMEURMPT.getId("mpt-checkbox-filterHideVisited").onclick = WMEURMPT.toggleMPFilterHideVisited; WMEURMPT.getId("mpt-checkbox-filterHideBlacklisted").onclick = WMEURMPT.toggleMPFilterHideBlacklisted; WMEURMPT.getId("mpt-checkbox-filterHideWhitelisted").onclick = WMEURMPT.toggleMPFilterHideWhitelisted; WMEURMPT.getId("mpt-checkbox-filterHideLimitTo").onclick = WMEURMPT.toggleMPFilterHideLimitTo; WMEURMPT.getId("mpt-checkbox-filterHideOnlyType").onclick = WMEURMPT.toggleMPFilterHideOnlyType; WMEURMPT.getId("mpt-checkbox-filterHideOnlyArea").onclick = WMEURMPT.toggleMPFilterHideOnlyArea; WMEURMPT.getId("mpt-filterLimitTo").onkeypress = WMEURMPT.MPLimitToChanged; WMEURMPT.getId("mpt-filterLimitTo").onpaste = WMEURMPT.MPLimitToChanged; WMEURMPT.getId("mpt-filterLimitTo").oninput = WMEURMPT.MPLimitToChanged; WMEURMPT.getId("mpt-filterOnlyType").onchange = WMEURMPT.MPOnlyTypeChanged; WMEURMPT.getId("mpt-filterOnlyArea").onchange = WMEURMPT.MPOnlyAreaChanged; if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideOutOfMyDriveArea) { WMEURMPT.getId("mct-checkbox-filterHideOutOfMyDriveArea").checked = true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { WMEURMPT.getId("mct-checkbox-filterHideOutOfMyManagedArea").checked = true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideVisited) { WMEURMPT.getId("mct-checkbox-filterHideVisited").checked = true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideBlacklisted) { WMEURMPT.getId("mct-checkbox-filterHideBlacklisted").checked = true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideWhitelisted) { WMEURMPT.getId("mct-checkbox-filterHideWhitelisted").checked = true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideNotKW) { WMEURMPT.getId("mct-checkbox-filterHideNotKW").checked = true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideLimitTo) { WMEURMPT.getId("mct-checkbox-filterHideLimitTo").checked = true; } if (WMEURMPT.currentMCFilter & WMEURMPT.MCFilterList.hideArea) { WMEURMPT.getId("mct-checkbox-filterHideOnlyArea").checked = true; } WMEURMPT.getId("mct-checkbox-filterHideOutOfMyDriveArea").onclick = WMEURMPT.toggleMCFilterHideOutOfMyDriveArea; if (WMEURMPT.uam) { WMEURMPT.getId("mct-checkbox-filterHideOutOfMyManagedArea").onclick = WMEURMPT.toggleMCFilterHideOutOfMyManagedArea; } WMEURMPT.getId("mct-checkbox-filterHideVisited").onclick = WMEURMPT.toggleMCFilterHideVisited; WMEURMPT.getId("mct-checkbox-filterHideBlacklisted").onclick = WMEURMPT.toggleMCFilterHideBlacklisted; WMEURMPT.getId("mct-checkbox-filterHideWhitelisted").onclick = WMEURMPT.toggleMCFilterHideWhitelisted; WMEURMPT.getId("mct-checkbox-filterHideLimitTo").onclick = WMEURMPT.toggleMCFilterHideLimitTo; WMEURMPT.getId("mct-checkbox-filterHideNotKW").onclick = WMEURMPT.toggleMCFilterHideNotKW; WMEURMPT.getId("mct-checkbox-filterHideOnlyArea").onclick = WMEURMPT.toggleMCFilterHideOnlyArea; WMEURMPT.getId("mct-filterKW").onkeypress = WMEURMPT.MCKeywordChanged; WMEURMPT.getId("mct-filterKW").onpaste = WMEURMPT.MCKeywordChanged; WMEURMPT.getId("mct-filterKW").oninput = WMEURMPT.MCKeywordChanged; WMEURMPT.getId("mct-filterLimitTo").onkeypress = WMEURMPT.MCLimitToChanged; WMEURMPT.getId("mct-filterLimitTo").onpaste = WMEURMPT.MCLimitToChanged; WMEURMPT.getId("mct-filterLimitTo").oninput = WMEURMPT.MCLimitToChanged; WMEURMPT.getId("mct-filterOnlyArea").onchange = WMEURMPT.MCOnlyAreaChanged; if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideOutOfMyDriveArea) { WMEURMPT.getId("purt-checkbox-filterHideOutOfMyDriveArea").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideOutOfMyManagedArea && WMEURMPT.uam) { WMEURMPT.getId("purt-checkbox-filterHideOutOfMyManagedArea").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideVisited) { WMEURMPT.getId("purt-checkbox-filterHideVisited").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideBlacklisted) { WMEURMPT.getId("purt-checkbox-filterHideBlacklisted").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideWhitelisted) { WMEURMPT.getId("purt-checkbox-filterHideWhitelisted").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideCategorie) { WMEURMPT.getId("purt-checkbox-filterHideOnlyCategorie").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideNotKW) { WMEURMPT.getId("purt-checkbox-filterHideNotKW").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideLimitTo) { WMEURMPT.getId("purt-checkbox-filterHideLimitTo").checked = true; } if (WMEURMPT.currentPURFilter & WMEURMPT.PURFilterList.hideArea) { WMEURMPT.getId("purt-checkbox-filterHideOnlyArea").checked = true; } WMEURMPT.getId("purt-checkbox-filterHideOutOfMyDriveArea").onclick = WMEURMPT.togglePURFilterHideOutOfMyDriveArea; if (WMEURMPT.uam) { WMEURMPT.getId("purt-checkbox-filterHideOutOfMyManagedArea").onclick = WMEURMPT.togglePURFilterHideOutOfMyManagedArea; } WMEURMPT.getId("purt-checkbox-filterHideVisited").onclick = WMEURMPT.togglePURFilterHideVisited; WMEURMPT.getId("purt-checkbox-filterHideBlacklisted").onclick = WMEURMPT.togglePURFilterHideBlacklisted; WMEURMPT.getId("purt-checkbox-filterHideWhitelisted").onclick = WMEURMPT.togglePURFilterHideWhitelisted; WMEURMPT.getId("purt-checkbox-filterHideOnlyCategorie").onclick = WMEURMPT.togglePURFilterHideOnlyCategorie; WMEURMPT.getId("purt-checkbox-filterHideLimitTo").onclick = WMEURMPT.togglePURFilterHideLimitTo; WMEURMPT.getId("purt-checkbox-filterHideNotKW").onclick = WMEURMPT.togglePURFilterHideNotKW; WMEURMPT.getId("purt-checkbox-filterHideOnlyArea").onclick = WMEURMPT.togglePURFilterHideOnlyArea; WMEURMPT.getId("purt-filterKW").onkeypress = WMEURMPT.PURKeywordChanged; WMEURMPT.getId("purt-filterKW").onpaste = WMEURMPT.PURKeywordChanged; WMEURMPT.getId("purt-filterKW").oninput = WMEURMPT.PURKeywordChanged; WMEURMPT.getId("purt-filterLimitTo").onkeypress = WMEURMPT.PURLimitToChanged; WMEURMPT.getId("purt-filterLimitTo").onpaste = WMEURMPT.PURLimitToChanged; WMEURMPT.getId("purt-filterLimitTo").oninput = WMEURMPT.PURLimitToChanged; WMEURMPT.getId("purt-filterOnlyCategorie").onchange = WMEURMPT.PUROnlyCategorieChanged; WMEURMPT.getId("purt-filterOnlyArea").onchange = WMEURMPT.PUROnlyAreaChanged; if (WMEURMPT.displayLegend) { WMEURMPT.getId("urt-close-legend").onclick = WMEURMPT.closeLegend; } WMEURMPT.getId("urmpt-onoff").onclick = WMEURMPT.enableOrDisable; WMEURMPT.getId("urmpt-donoff").onclick = WMEURMPT.enableOrDisableDistance; WMEURMPT.getId("urmpt-asonoff").onclick = WMEURMPT.enableOrDisableAutoScan; WMEURMPT.getId("urmpt-suronoff").onclick = WMEURMPT.enableOrDisableScanUR; WMEURMPT.getId("urmpt-smponoff").onclick = WMEURMPT.enableOrDisableScanMP; WMEURMPT.getId("urmpt-smconoff").onclick = WMEURMPT.enableOrDisableScanMC; WMEURMPT.getId("urmpt-spuronoff").onclick = WMEURMPT.enableOrDisableScanPUR; WMEURMPT.getId("urmpt-setting-urdescriptionwidth").onkeypress = WMEURMPT.settingsSetURDescriptionWidth; WMEURMPT.getId("urmpt-setting-urdescriptionwidth").onpaste = WMEURMPT.settingsSetURDescriptionWidth; WMEURMPT.getId("urmpt-setting-urdescriptionwidth").oninput = WMEURMPT.settingsSetURDescriptionWidth; WMEURMPT.getId("urmpt-setting-mpdescriptionwidth").onkeypress = WMEURMPT.settingsSetMPDescriptionWidth; WMEURMPT.getId("urmpt-setting-mpdescriptionwidth").onpaste = WMEURMPT.settingsSetMPDescriptionWidth; WMEURMPT.getId("urmpt-setting-mpdescriptionwidth").oninput = WMEURMPT.settingsSetMPDescriptionWidth; WMEURMPT.getId("urmpt-setting-mcsubjectwidth").onkeypress = WMEURMPT.settingsSetMCSubjectWidth; WMEURMPT.getId("urmpt-setting-mcsubjectwidth").onpaste = WMEURMPT.settingsSetMCSubjectWidth; WMEURMPT.getId("urmpt-setting-mcsubjectwidth").oninput = WMEURMPT.settingsSetMCSubjectWidth; WMEURMPT.getId("urmpt-setting-mcbodywidth").onkeypress = WMEURMPT.settingsSetMCBodyWidth; WMEURMPT.getId("urmpt-setting-mcbodywidth").onpaste = WMEURMPT.settingsSetMCBodyWidth; WMEURMPT.getId("urmpt-setting-mcbodywidth").oninput = WMEURMPT.settingsSetMCBodyWidth; WMEURMPT.getId("urmpt-setting-purcategorieswidth").onkeypress = WMEURMPT.settingsSetPURCategoriesWidth; WMEURMPT.getId("urmpt-setting-purcategorieswidth").onpaste = WMEURMPT.settingsSetPURCategoriesWidth; WMEURMPT.getId("urmpt-setting-purcategorieswidth").oninput = WMEURMPT.settingsSetPURCategoriesWidth; WMEURMPT.getId("urmpt-setting-purnamewidth").onkeypress = WMEURMPT.settingsSetPURNameWidth; WMEURMPT.getId("urmpt-setting-purnamewidth").onpaste = WMEURMPT.settingsSetPURNameWidth; WMEURMPT.getId("urmpt-setting-purnamewidth").oninput = WMEURMPT.settingsSetPURNameWidth; WMEURMPT.getId("urmpt-setting-urtaglist").onkeypress = WMEURMPT.settingsSetURTagList; WMEURMPT.getId("urmpt-setting-urtaglist").onpaste = WMEURMPT.settingsSetURTagList; WMEURMPT.getId("urmpt-setting-urtaglist").oninput = WMEURMPT.settingsSetURTagList; WMEURMPT.getId("urmpt-setting-uragecolislastcomment").addEventListener("change", function(e) { WMEURMPT.URAgeColIsLastComment = e.target.checked; WMEURMPT.saveOptions(); }); WMEURMPT.updateLongTextCrop(); var cssElt = WMEURMPT.createElement("style"); cssElt.type = "text/css"; var css = ""; css += ".urt-table { border: 2px solid #3d3d3d; width: 100%; }"; css += ".urt-table tr { border: 1px solid #3d3d3d; }"; css += ".urt-table tr td { border: 1px solid #3d3d3d; font-size: smaller; }"; css += ".urt-table thead { border: 2px solid #3d3d3d; font-size: bigger; text-align: center; background-color: #93c4d3;}"; css += ".urt-table-head-icon { height: 32px; vertical-align: middle; display: table-cell; }"; css += ".urt-bg-pair { background-color: #93c4d3; }"; css += ".urt-bg-highlighted { background-color: #c9e1e9; }"; css += ".urt-bg-selected { background-color: #42FF9c; }"; css += ".urt-bg-ifollow { background-color: #e0e0e0; }"; css += ".urt-bg-odd { }"; css += ".urt-bg-newcomments { background-color: #FFc90E; }"; css += ".urt-filter-list { list-style-type: none; padding-left: 2px; overflow: hidden;}"; css += "#urt-filterHideWithCommentCount { display: inline; height: 20px; font-size: smaller; }"; css += "#urt-filterKW { display: inline; width: 30%; height: 20px; font-size: smaller; }"; css += "#mct-filterKW { display: inline; width: 30%; height: 20px; font-size: smaller; }"; css += "#purt-filterKW { display: inline; width: 30%; height: 20px; font-size: smaller; }"; css += "#urt-filterLimitTo { display: inline; width: 30%; height: 20px; font-size: smaller; }"; css += "#mpt-filterLimitTo { display: inline; width: 30%; height: 20px; font-size: smaller; }"; css += "#mct-filterLimitTo { display: inline; width: 30%; height: 20px; font-size: smaller; }"; css += "#purt-filterLimitTo { display: inline; width: 30%; height: 20px; font-size: smaller; }"; css += "#urt-progressBarInfo { display: none; width: 90%; float: left; position: absolute; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; margin-bottom: -100%; background-color: #c9e1e9; z-index: 999; margin: 5px; margin-right: 20px; }"; css += ".urt-progressBarBG { margin-top: 2px; margin-bottom: 2px; margin-left: 2px; margin-right: 2px; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; padding-right: 0px; width: 33%; background-color: #93c4d3; border: 3px rgb(147, 196, 211); border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; height: 22px;}"; css += ".urt-progressBarFG { float: left; position: relative; bottom: 22px; height: 0px; text-align: center; width: 100% }"; css += "#urt-info { margin: 5px; }"; css += ".urt-blacklist { background: transparent url(data:image/png;base64," + WMEURMPT.icon_blacklist + ") center top; background-size: 16px 16px; background-repeat: no-repeat; } "; css += "#urmpt-qoptions { display: block; width: 100%; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border: 1px solid #dddddd; }"; css += ".urt-chkbox { width: 16px; height: 16px; margin-top: -5px; }"; cssElt.innerHTML = css; document.body.appendChild(cssElt); WMEURMPT.updateScanGroup(); window.setInterval(WMEURMPT.save, 120000); if (WMEURMPT.isEnabled) { WMEURMPT.registerEvents(); WMEURMPT.updateIHMFromURList(); WMEURMPT.updateIHMFromMPList(); WMEURMPT.updateIHMFromMCList(); WMEURMPT.updateIHMFromPURList(); } if (!WMEURMPT.isEnabled) { WMEURMPT.disable(); } }; WMEURMPT.setupCAEvents = function() { var tl = WMEURMPT.getId("urmpt-areas-fill-tl"); var br = WMEURMPT.getId("urmpt-areas-fill-br"); var add = WMEURMPT.getId("urmpt-areas-name-add"); tl.onclick = WMEURMPT.getTLArea; br.onclick = WMEURMPT.getBRArea; add.onclick = WMEURMPT.addCustomAreaToFilterList; var addFromPOI = WMEURMPT.getId("urmpt-areas-frompoi-add"); addFromPOI.onclick = WMEURMPT.addCustomAreaFromPOIToFilterList; var addFromWKT = WMEURMPT.getId("urmpt-areas-wktfile"); addFromWKT.addEventListener("change", WMEURMPT.handleFileSelectAddFromWKT, false); var addFromWKTAdd = WMEURMPT.getId("urmpt-areas-wktfile-add"); addFromWKTAdd.onclick = WMEURMPT.addCustomAreaFromWKTToFilterList; var addFromJSON = WMEURMPT.getId("urmpt-areas-jsonfile"); addFromJSON.addEventListener("change", WMEURMPT.handleFileSelectAddFromJSON, false); var addFromJSONAdd = WMEURMPT.getId("urmpt-areas-jsonfile-add"); addFromJSONAdd.onclick = WMEURMPT.addCustomAreaFromJSONToFilterList; }; WMEURMPT.getTLArea = function() { var xy = WMEURMPT.wazeMap.getLonLatFromPixel({x:0, y:0}); var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(xy.lon, xy.lat); WMEURMPT.getId("urmpt-areas-tl-lon").value = lonlat.lon; WMEURMPT.getId("urmpt-areas-tl-lat").value = lonlat.lat; }; WMEURMPT.getBRArea = function() { var xy = WMEURMPT.wazeMap.getLonLatFromPixel({x:WMEURMPT.wazeMap.olMap.size.w, y:WMEURMPT.wazeMap.olMap.size.h}); var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(xy.lon, xy.lat); WMEURMPT.log("get BR", lonlat); WMEURMPT.getId("urmpt-areas-br-lon").value = lonlat.lon; WMEURMPT.getId("urmpt-areas-br-lat").value = lonlat.lat; }; WMEURMPT.closeLegend = function() { if (confirm("This legend will never be displayed anymore.\nAre you sure you want to do that?")) { WMEURMPT.getId("urt-legend").style.display = "none"; WMEURMPT.getId("urt-close-legend").style.display = "none"; WMEURMPT.displayLegend = false; WMEURMPT.log("Legend closed"); WMEURMPT.saveOptions(); } }; WMEURMPT.connectURTabHandler = function() { WMEURMPT.getId("urmp-tabstitle-ur").onclick = WMEURMPT.updateIHMFromURList; }; WMEURMPT.connectMPTabHandler = function() { WMEURMPT.getId("urmp-tabstitle-mp").onclick = WMEURMPT.updateIHMFromMPList; }; WMEURMPT.connectMCTabHandler = function() { WMEURMPT.getId("urmp-tabstitle-mc").onclick = WMEURMPT.updateIHMFromMCList; }; WMEURMPT.connectPURTabHandler = function() { WMEURMPT.getId("urmp-tabstitle-pur").onclick = WMEURMPT.updateIHMFromPURList; }; WMEURMPT.enableOrDisable = function() { if (WMEURMPT.isEnabled) { WMEURMPT.getId("urmpt-onoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_unchecked + '" />'; WMEURMPT.disable(); } else { WMEURMPT.getId("urmpt-onoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_checked + '" />'; WMEURMPT.enable(); } WMEURMPT.isEnabled = !WMEURMPT.isEnabled; }; WMEURMPT.enable = function() { WMEURMPT.registerEvents(); WMEURMPT.getId("urt-a-scanGroup").style.display = "inline"; WMEURMPT.getId("urmp-tabs").style.display = "block"; WMEURMPT.getId("urmpt-tab-content").style.display = "block"; WMEURMPT.getId("urmpt-qoptions").style.display = "block"; WMEURMPT.updateIHMFromURList(); WMEURMPT.updateIHMFromMPList(); WMEURMPT.updateIHMFromMCList(); WMEURMPT.updateIHMFromPURList(); }; WMEURMPT.disable = function() { WMEURMPT.unregisterEvents(); WMEURMPT.getId("urt-a-scanGroup").style.display = "none"; WMEURMPT.getId("urmp-tabs").style.display = "none"; WMEURMPT.getId("urmpt-tab-content").style.display = "none"; WMEURMPT.getId("urmpt-qoptions").style.display = "none"; }; WMEURMPT.enableOrDisableDistance = function() { if (WMEURMPT.isComputeDistances) { WMEURMPT.getId("urmpt-donoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_unchecked + '" />'; } else { WMEURMPT.getId("urmpt-donoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_checked + '" />'; } WMEURMPT.isComputeDistances = !WMEURMPT.isComputeDistances; WMEURMPT.saveOptions(); if (WMEURMPT.isComputeDistances) { WMEURMPT.mapMoveEnd(); } }; WMEURMPT.enableOrDisableAutoScan = function() { if (WMEURMPT.isAutoScan) { WMEURMPT.getId("urmpt-asonoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_unchecked + '" />'; } else { WMEURMPT.getId("urmpt-asonoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_checked + '" />'; } WMEURMPT.isAutoScan = !WMEURMPT.isAutoScan; WMEURMPT.saveOptions(); }; WMEURMPT.enableOrDisableScanUR = function() { if (WMEURMPT.scanUR) { WMEURMPT.getId("urmpt-suronoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_unchecked + '" />'; } else { WMEURMPT.getId("urmpt-suronoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_checked + '" />'; } WMEURMPT.scanUR = !WMEURMPT.scanUR; WMEURMPT.saveOptions(); }; WMEURMPT.enableOrDisableScanMP = function() { if (WMEURMPT.scanMP) { WMEURMPT.getId("urmpt-smponoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_unchecked + '" />'; } else { WMEURMPT.getId("urmpt-smponoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_checked + '" />'; } WMEURMPT.scanMP = !WMEURMPT.scanMP; WMEURMPT.saveOptions(); }; WMEURMPT.enableOrDisableScanMC = function() { if (WMEURMPT.scanMC) { WMEURMPT.getId("urmpt-smconoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_unchecked + '" />'; } else { WMEURMPT.getId("urmpt-smconoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_checked + '" />'; } WMEURMPT.scanMC = !WMEURMPT.scanMC; WMEURMPT.saveOptions(); }; WMEURMPT.enableOrDisableScanPUR = function() { if (WMEURMPT.scanPUR) { WMEURMPT.getId("urmpt-spuronoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_unchecked + '" />'; } else { WMEURMPT.getId("urmpt-spuronoff").innerHTML = '<img class="urt-chkbox" src="data:image/png;base64,' + WMEURMPT.icon_checked + '" />'; } WMEURMPT.scanPUR = !WMEURMPT.scanPUR; WMEURMPT.saveOptions(); }; WMEURMPT.handleFileSelectAddFromWKT = function(evt) { var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { var reader = new FileReader; reader.onload = function(theFile) { return function(e) { WMEURMPT.lastUploadedWKT = e.target.result; WMEURMPT.log("import WKT file read"); }; }(f); reader.readAsText(f); } }; WMEURMPT.showAreaInWKT = function(area) { var geometry = null; for (var i = 0; i < WMEURMPT.areaList[area.type].length; i++) { if (WMEURMPT.areaList[area.type][i].name == area.name) { geometry = WMEURMPT.areaList[area.type][i].geometryWKT; break; } } if (geometry) { this.setAttribute("download", area.name + ".wkt"); this.href = "data:application/octet-stream;charset=utf-8;base64," + btoa(geometry); } }; WMEURMPT.mapMoveEnd = function() { if (WMEURMPT.isComputeDistances) { WMEURMPT.mapCenterLonLat = OpenLayers.Layer.SphericalMercator.inverseMercator(WMEURMPT.wazeMap.olMap.center.lon, WMEURMPT.wazeMap.olMap.center.lat); for (var i = 0; i < WMEURMPT.URList.length; i++) { WMEURMPT.URList[i].updateDistanceToMapCenter(); } for (var i = 0; i < WMEURMPT.MPList.length; i++) { WMEURMPT.MPList[i].updateDistanceToMapCenter(); } for (var i = 0; i < WMEURMPT.MCList.length; i++) { WMEURMPT.MCList[i].updateDistanceToMapCenter(); } for (var i = 0; i < WMEURMPT.PURList.length; i++) { WMEURMPT.PURList[i].updateDistanceToMapCenter(); } WMEURMPT.updateIHMFromURList(); WMEURMPT.updateIHMFromMPList(); WMEURMPT.updateIHMFromMCList(); WMEURMPT.updateIHMFromPURList(); } }; WMEURMPT.mapZoomEnd = function() { WMEURMPT.mapMoveEnd(); }; WMEURMPT.showPBInfo = function(show) { if (show) { WMEURMPT.getId("urt-progressBarInfo").style.display = "block"; } else { WMEURMPT.getId("urt-progressBarInfo").style.display = "none"; } }; WMEURMPT.ProgressBar = function(div) { this.div = div; }; WMEURMPT.ProgressBar.prototype.isShown = function() { return this.div.style.display != "none"; }; WMEURMPT.ProgressBar.prototype.show = function() { this.div.style.display = "block"; }; WMEURMPT.ProgressBar.prototype.hide = function() { this.div.style.display = "none"; }; WMEURMPT.ProgressBar.prototype.update = function(value) { if (value == -1) { this.div.children[0].style.display = "none"; this.div.children[1].style.display = "none"; return; } this.div.children[0].style.display = "block"; this.div.children[1].style.display = "block"; this.div.children[0].style.width = value + "%"; this.div.children[1].innerHTML = value + "%"; }; WMEURMPT.clearAllUR = function() { WMEURMPT.URList = []; WMEURMPT.URMap = {}; WMEURMPT.log("UR list cleared"); WMEURMPT.saveURList(); WMEURMPT.updateIHMFromURList(); }; WMEURMPT.markAllURAsVisited = function() { for (var i = 0; i < WMEURMPT.URList.length; i++) { if (!WMEURMPT.isURFiltered(WMEURMPT.URList[i])) { WMEURMPT.URList[i].alreadyVisited = true; } } WMEURMPT.log("All UR marked as visited"); WMEURMPT.updateIHMFromURList(); }; WMEURMPT.blacklistUR = function(index) { var i = parseInt(index); if (i < 0 || i >= WMEURMPT.URList.length) { return; } WMEURMPT.log((WMEURMPT.URList[i].blackListed ? "Whitelist" : "Blacklist") + " UR: " + WMEURMPT.URList[i].id); WMEURMPT.URList[i].blackListed = !WMEURMPT.URList[i].blackListed; WMEURMPT.updateIHMFromURList(); }; WMEURMPT.URBlackListed = function(URId, value) { var ur = WMEURMPT.getURFromId(URId); if (ur != null) { WMEURMPT.log((value ? "Blacklist" : "Whitelist") + " UR: " + URId); ur.blackListed = value; } }; WMEURMPT.URVisited = function(URId) { var ur = WMEURMPT.getURFromId(URId); if (ur != null) { WMEURMPT.log("Mark UR " + URId + " as visited"); ur.lastVisitCommentsCount = ur.data.session.comments.length; ur.alreadyVisited = true; WMEURMPT.updateIHMFromURList(); } }; WMEURMPT.getURFromId = function(id) { if (typeof WMEURMPT.URMap[id] === "undefined") { return null; } return WMEURMPT.URList[WMEURMPT.URMap[id]]; }; WMEURMPT.clearAllMP = function() { WMEURMPT.MPList = []; WMEURMPT.MPMap = {}; WMEURMPT.log("MP list cleared"); WMEURMPT.saveMPList(); WMEURMPT.updateIHMFromMPList(); }; WMEURMPT.markAllMPAsVisited = function() { for (var i = 0; i < WMEURMPT.MPList.length; i++) { if (!WMEURMPT.isMPFiltered(WMEURMPT.MPList[i])) { WMEURMPT.MPList[i].alreadyVisited = true; } } WMEURMPT.log("All MP marked as visited"); WMEURMPT.updateIHMFromMPList(); }; WMEURMPT.blacklistMP = function(index) { var i = parseInt(index); if (i < 0 || i >= WMEURMPT.MPList.length) { return; } WMEURMPT.log((WMEURMPT.MPList[i].blackListed ? "Whitelist" : "Blacklist") + " MP: " + WMEURMPT.MPList[i].id); WMEURMPT.MPList[i].blackListed = !WMEURMPT.MPList[i].blackListed; WMEURMPT.updateIHMFromMPList(); }; WMEURMPT.MPVisited = function(MPId) { var mp = WMEURMPT.getMPFromId(MPId); if (mp != null) { WMEURMPT.log("Mark MP " + MPId + " as visited"); mp.alreadyVisited = true; WMEURMPT.updateIHMFromMPList(); } }; WMEURMPT.getMPFromId = function(id) { if (typeof WMEURMPT.MPMap[id] === "undefined") { return null; } return WMEURMPT.MPList[WMEURMPT.MPMap[id]]; }; WMEURMPT.clearAllMC = function() { WMEURMPT.MCList = []; WMEURMPT.MCMap = {}; WMEURMPT.log("MC list cleared"); WMEURMPT.saveMCList(); WMEURMPT.updateIHMFromMCList(); }; WMEURMPT.markAllMCAsVisited = function() { for (var i = 0; i < WMEURMPT.MCList.length; i++) { if (!WMEURMPT.isMCFiltered(WMEURMPT.MCList[i])) { WMEURMPT.MCList[i].alreadyVisited = true; } } WMEURMPT.log("All MC marked as visited"); WMEURMPT.updateIHMFromMCList(); }; WMEURMPT.blacklistMC = function(index) { var i = parseInt(index); if (i < 0 || i >= WMEURMPT.MCList.length) { return; } WMEURMPT.log((WMEURMPT.MCList[i].blackListed ? "Whitelist" : "Blacklist") + " MC: " + WMEURMPT.MCList[i].id); WMEURMPT.MCList[i].blackListed = !WMEURMPT.MCList[i].blackListed; WMEURMPT.updateIHMFromMCList(); }; WMEURMPT.MCBlackListed = function(MCId, value) { var mc = WMEURMPT.getMCFromId(MCId); if (mc != null) { WMEURMPT.log((value ? "Blacklist" : "Whitelist") + " MC: " + MCId); mc.blackListed = value; } }; WMEURMPT.MCVisited = function(MCId) { var mc = WMEURMPT.getMCFromId(MCId); if (mc != null) { WMEURMPT.log("Mark MC " + MCId + " as visited"); mc.lastVisitCommentsCount = mc.data.hasOwnProperty("conversation") ? mc.data.conversation.length : 0; mc.alreadyVisited = true; WMEURMPT.updateIHMFromMCList(); } }; WMEURMPT.getMCFromId = function(id) { if (typeof WMEURMPT.MCMap[id] === "undefined") { return null; } return WMEURMPT.MCList[WMEURMPT.MCMap[id]]; }; WMEURMPT.clearAllPUR = function() { WMEURMPT.PURList = []; WMEURMPT.PURMap = {}; WMEURMPT.log("PUR list cleared"); WMEURMPT.savePURList(); WMEURMPT.updateIHMFromPURList(); }; WMEURMPT.markAllPURAsVisited = function() { for (var i = 0; i < WMEURMPT.PURList.length; i++) { if (!WMEURMPT.isPURFiltered(WMEURMPT.PURList[i])) { WMEURMPT.PURList[i].alreadyVisited = true; } } WMEURMPT.log("All PUR marked as visited"); WMEURMPT.updateIHMFromPURList(); }; WMEURMPT.blacklistPUR = function(index) { var i = parseInt(index); if (i < 0 || i >= WMEURMPT.PURList.length) { return; } WMEURMPT.log((WMEURMPT.PURList[i].blackListed ? "Whitelist" : "Blacklist") + " PUR: " + WMEURMPT.PURList[i].id); WMEURMPT.PURList[i].blackListed = !WMEURMPT.PURList[i].blackListed; WMEURMPT.updateIHMFromPURList(); }; WMEURMPT.PURVisited = function(PURId) { var pur = WMEURMPT.getPURFromId(PURId); if (pur != null) { WMEURMPT.log("Mark PUR " + PURId + " as visited"); pur.alreadyVisited = true; WMEURMPT.updateIHMFromPURList(); } }; WMEURMPT.getPURFromId = function(id) { if (typeof WMEURMPT.PURMap[id] === "undefined") { return null; } return WMEURMPT.PURList[WMEURMPT.PURMap[id]]; }; WMEURMPT.getHRURResolutionFromType = function(type) { if (type == 1) { return "Not identified"; } if (type == 0) { return "Solved"; } }; WMEURMPT.getFullURTypeFromType = function(type) { return I18n.translations[I18n.locale].update_requests.types[type]; }; WMEURMPT.getHRURTypeFromType = function(type) { if (type == 6) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">IT</span>'; } if (type == 7) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">IA</span>'; } if (type == 8) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">IR</span>'; } if (type == 9) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">MRa</span>'; } if (type == 10) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">GE</span>'; } if (type == 11) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">TnA</span>'; } if (type == 12) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">IJ</span>'; } if (type == 13) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">MBO</span>'; } if (type == 14) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">WDD</span>'; } if (type == 15) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">ME</span>'; } if (type == 16) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">MR</span>'; } if (type == 18) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">ML</span>'; } if (type == 19) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">BR</span>'; } if (type == 21) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">MSN</span>'; } if (type == 22) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">MSS</span>'; } if (type == 23) { return '<span title="' + WMEURMPT.getFullURTypeFromType(type) + '" style="display: block; width: 100%;">MSL</span>'; } return (WMEURMPT.getFullURTypeFromType(type) + " ").replace(/([A-Za-z])[A-Za-z]* /g, "$1").toUpperCase().substring(0, 3); }; WMEURMPT.getFullMPTypeFromType = function(type) { return I18n.translations[I18n.locale].problems.types[type].title; }; WMEURMPT.getHRMPTypeFromType = function(type) { return '<span title="' + I18n.translations[I18n.locale].problems.types[type].title + '" style="display: block; width: 100%;">P</span>'; }; WMEURMPT.getHRMPDescriptionFromType = function(type) { if (type == 1) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Crooked segment</span>'; } if (type == 17) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Segment without details</span>'; } if (type == 50) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Parking Lot as point</span>'; } if (type == 101) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Driving dr m/match</span>'; } if (type == 102) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Missing junction</span>'; } if (type == 103) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Missing road</span>'; } if (type == 104) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Cross rd junc miss</span>'; } if (type == 105) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Road type mismatch</span>'; } if (type == 106) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Rst trn m. be alwd</span>'; } if (type == 200) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Turn problem</span>'; } if (type == 300) { return '<span title="' + WMEURMPT.getFullMPTypeFromType(type) + '" style="display: block; width: 100%;">Road closure</span>'; } return '<span title="' + I18n.translations[I18n.locale].problems.types[type].title + '" style="display: block; width: 100%;">' + I18n.translations[I18n.locale].problems.types[type].title + "</span>"; }; WMEURMPT.getFullPURTypeFromType = function(type) { WMEURMPT.log("getType:", type); WMEURMPT.log("I18n.translations[" + I18n.locale + "].venues.update_requests.panel.title:", I18n.translations[I18n.locale].venues.update_requests.panel.title); return I18n.translations[I18n.locale].venues.update_requests.panel.title[type]; }; WMEURMPT.getPURCategoriesFromCategories = function(cat) { return I18n.translations[I18n.locale].venues.categories[cat]; }; WMEURMPT.getFullPURCategoriesFromCategories = function() { return I18n.translations[I18n.locale].venues.categories; }; WMEURMPT.compareUR = function(a, b, i) { if (arguments.length == 2) { i = 0; } if (i >= WMEURMPT.sortHistoryUR.length) { return 0; } switch(WMEURMPT.sortHistoryUR[i]) { case WMEURMPT.sortModeListUR.ageDSC: if (a.data.driveDate == b.data.driveDate) { return WMEURMPT.compareUR(a, b, i + 1); } return a.data.driveDate - b.data.driveDate; break; case WMEURMPT.sortModeListUR.ageASC: if (a.data.driveDate == b.data.driveDate) { return WMEURMPT.compareUR(a, b, i + 1); } return b.data.driveDate - a.data.driveDate; break; case WMEURMPT.sortModeListUR.typeDSC: if (a.data.type == b.data.type) { return WMEURMPT.compareUR(a, b, i + 1); } return a.data.type - b.data.type; break; case WMEURMPT.sortModeListUR.typeASC: if (a.data.type == b.data.type) { return WMEURMPT.compareUR(a, b, i + 1); } return b.data.type - a.data.type; break; case WMEURMPT.sortModeListUR.commentCountDSC: if (a.data.session.comments.length == b.data.session.comments.length) { return WMEURMPT.compareUR(a, b, i + 1); } return a.data.session.comments.length - b.data.session.comments.length; break; case WMEURMPT.sortModeListUR.commentCountASC: if (a.data.session.comments.length == b.data.session.comments.length) { return WMEURMPT.compareUR(a, b, i + 1); } return b.data.session.comments.length - a.data.session.comments.length; break; case WMEURMPT.sortModeListUR.distanceDSC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.compareUR(a, b, i + 1); } return a.distanceToMapCenter - b.distanceToMapCenter; break; case WMEURMPT.sortModeListUR.distanceASC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.compareUR(a, b, i + 1); } return b.distanceToMapCenter - a.distanceToMapCenter; break; case WMEURMPT.sortModeListUR.lastCommentDSC: var da = a.data.driveDate; var db = b.data.driveDate; if (a.data.session.comments.length != 0) { da = a.data.session.comments[a.data.session.comments.length - 1].createdOn; } if (b.data.session.comments.length != 0) { db = b.data.session.comments[b.data.session.comments.length - 1].createdOn; } if (a.data.session.comments.length != 0 && b.data.session.comments.length == 0) { return -1; } if (a.data.session.comments.length == 0 && b.data.session.comments.length != 0) { return 1; } if (da == db) { return WMEURMPT.compareUR(a, b, i + 1); } return da - db; break; case WMEURMPT.sortModeListUR.lastCommentASC: var da = a.data.driveDate; var db = b.data.driveDate; if (a.data.session.comments.length != 0) { da = a.data.session.comments[a.data.session.comments.length - 1].createdOn; } if (b.data.session.comments.length != 0) { db = b.data.session.comments[b.data.session.comments.length - 1].createdOn; } if (a.data.session.comments.length != 0 && b.data.session.comments.length == 0) { return 1; } if (a.data.session.comments.length == 0 && b.data.session.comments.length != 0) { return -1; } if (da == db) { return WMEURMPT.compareUR(a, b, i + 1); } return db - da; break; } return 0; }; WMEURMPT.compareMP = function(a, b, i) { if (arguments.length == 2) { i = 0; } if (i >= WMEURMPT.sortHistoryMP.length) { return 0; } switch(WMEURMPT.sortHistoryMP[i]) { case WMEURMPT.sortModeListMP.priorityDSC: if (a.data.weight == b.data.weight) { return WMEURMPT.compareMP(a, b, i + 1); } return a.data.weight - b.data.weight; break; case WMEURMPT.sortModeListMP.priorityASC: if (a.data.weight == b.data.weight) { return WMEURMPT.compareMP(a, b, i + 1); } return b.data.weight - a.data.weight; break; case WMEURMPT.sortModeListMP.typeDSC: if (a.data.subType == b.data.subType) { return WMEURMPT.compareMP(a, b, i + 1); } return a.data.subType - b.data.subType; break; case WMEURMPT.sortModeListMP.typeASC: if (a.data.subType == b.data.subType) { return WMEURMPT.compareMP(a, b, i + 1); } return b.data.subType - a.data.subType; break; case WMEURMPT.sortModeListMP.distanceDSC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.compareMP(a, b, i + 1); } return a.distanceToMapCenter - b.distanceToMapCenter; break; case WMEURMPT.sortModeListMP.distanceASC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.compareMP(a, b, i + 1); } return b.distanceToMapCenter - a.distanceToMapCenter; break; } return 0; }; WMEURMPT.compareMC = function(a, b, i) { if (arguments.length == 2) { i = 0; } if (i >= WMEURMPT.sortHistoryMC.length) { return 0; } switch(WMEURMPT.sortHistoryMC[i]) { case WMEURMPT.sortModeListMC.ageDSC: if (a.data.createdOn == b.data.createdOn) { return WMEURMPT.compareMC(a, b, i + 1); } return a.data.createdOn - b.data.createdOn; break; case WMEURMPT.sortModeListMC.ageASC: if (a.data.createdOn == b.data.createdOn) { return WMEURMPT.compareMC(a, b, i + 1); } return b.data.createdOn - a.data.createdOn; break; case WMEURMPT.sortModeListMC.distanceDSC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.compareMC(a, b, i + 1); } return a.distanceToMapCenter - b.distanceToMapCenter; break; case WMEURMPT.sortModeListMC.distanceASC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.compareMC(a, b, i + 1); } return b.distanceToMapCenter - a.distanceToMapCenter; break; case WMEURMPT.sortModeListMC.commentCountDSC: var acount = a.data.hasOwnProperty("conversation") ? a.data.conversation.length : 0; var bcount = b.data.hasOwnProperty("conversation") ? b.data.conversation.length : 0; if (acount == bcount) { return WMEURMPT.compareMC(a, b, i + 1); } return acount - bcount; break; case WMEURMPT.sortModeListMC.commentCountASC: var acount = a.data.hasOwnProperty("conversation") ? a.data.conversation.length : 0; var bcount = b.data.hasOwnProperty("conversation") ? b.data.conversation.length : 0; if (acount == bcount) { return WMEURMPT.compareMC(a, b, i + 1); } return bcount - acount; break; } return 0; }; WMEURMPT.comparePUR = function(a, b, i) { if (arguments.length == 2) { i = 0; } if (i >= WMEURMPT.sortHistoryPUR.length) { return 0; } switch(WMEURMPT.sortHistoryPUR[i]) { case WMEURMPT.sortModeListPUR.ageDSC: if (a.data.dateAddedMin == b.data.dateAddedMin) { return WMEURMPT.comparePUR(a, b, i + 1); } return a.data.dateAddedMin - b.data.dateAddedMin; break; case WMEURMPT.sortModeListPUR.ageASC: if (a.data.dateAddedMin == b.data.dateAddedMin) { return WMEURMPT.comparePUR(a, b, i + 1); } return b.data.dateAddedMin - a.data.dateAddedMin; break; case WMEURMPT.sortModeListPUR.categoriesDSC: var categoriesA = ""; for (var n = 0; n < a.data.categories.length; n++) { categoriesA += WMEURMPT.getPURCategoriesFromCategories(a.data.categories[n]) + " "; } var categoriesB = ""; for (var n = 0; n < b.data.categories.length; n++) { categoriesB += WMEURMPT.getPURCategoriesFromCategories(b.data.categories[n]) + " "; } if (categoriesA.toUpperCase() < categoriesB.toUpperCase()) { return -1; } else { if (categoriesA.toUpperCase() > categoriesB.toUpperCase()) { return 1; } else { return WMEURMPT.comparePUR(a, b, i + 1); } } break; case WMEURMPT.sortModeListPUR.categoriesASC: var categoriesA = ""; for (var n = 0; n < a.data.categories.length; n++) { categoriesA += WMEURMPT.getPURCategoriesFromCategories(a.data.categories[n]) + " "; } var categoriesB = ""; for (var n = 0; n < b.data.categories.length; n++) { categoriesB += WMEURMPT.getPURCategoriesFromCategories(b.data.categories[n]) + " "; } if (categoriesA.toUpperCase() > categoriesB.toUpperCase()) { return -1; } else { if (categoriesA.toUpperCase() < categoriesB.toUpperCase()) { return 1; } else { return WMEURMPT.comparePUR(a, b, i + 1); } } break; case WMEURMPT.sortModeListPUR.nameDSC: var nameA = a.data.name, nameB = b.data.name; if (nameA.toUpperCase() < nameB.toUpperCase()) { return -1; } else { if (nameA.toUpperCase() > nameB.toUpperCase()) { return 1; } else { return WMEURMPT.comparePUR(a, b, i + 1); } } break; case WMEURMPT.sortModeListPUR.nameASC: var nameA = a.data.name, nameB = b.data.name; if (nameA.toUpperCase() > nameB.toUpperCase()) { return -1; } else { if (nameA.toUpperCase() < nameB.toUpperCase()) { return 1; } else { return WMEURMPT.comparePUR(a, b, i + 1); } } break; case WMEURMPT.sortModeListPUR.distanceDSC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.comparePUR(a, b, i + 1); } return a.distanceToMapCenter - b.distanceToMapCenter; break; case WMEURMPT.sortModeListPUR.distanceASC: if (a.distanceToMapCenter == b.distanceToMapCenter) { return WMEURMPT.comparePUR(a, b, i + 1); } return b.distanceToMapCenter - a.distanceToMapCenter; break; case WMEURMPT.sortModeListPUR.nbpurDSC: if (a.data.venueUpdateRequests.length == b.data.venueUpdateRequests.length) { return WMEURMPT.comparePUR(a, b, i + 1); } return a.data.venueUpdateRequests.length - b.data.venueUpdateRequests.length; break; case WMEURMPT.sortModeListPUR.nbpurASC: if (a.data.venueUpdateRequests.length == b.data.venueUpdateRequests.length) { return WMEURMPT.comparePUR(a, b, i + 1); } return b.data.venueUpdateRequests.length - a.data.venueUpdateRequests.length; break; } return 0; }; WMEURMPT.compareURDriveDate = function(a, b) { if (a.data.driveDate == b.data.driveDate) { return WMEURMPT.compareURType(a, b); } return a.data.driveDate - b.data.driveDate; }; WMEURMPT.compareMPPriority = function(a, b) { if (a.data.weight == b.data.weight) { return WMEURMPT.compareMPType(a, b); } return a.data.weight - b.data.weight; }; WMEURMPT.compareURType = function(a, b) { if (a.data.type == b.data.type) { return WMEURMPT.compareURCommentCount(a, b); } return a.data.type - b.data.type; }; WMEURMPT.compareMPType = function(a, b) { if (a.data.subType == b.data.subType) { return WMEURMPT.compareURMPDistanceToMapCenter(a, b); } return a.data.subType - b.data.subType; }; WMEURMPT.compareURCommentCount = function(a, b) { if (a.data.session.comments.length == b.data.session.comments.length) { return WMEURMPT.compareURMPDistanceToMapCenter(a, b); } return a.data.session.comments.length - b.data.session.comments.length; }; WMEURMPT.compareURMPDistanceToMapCenter = function(a, b) { if (a.distanceToMapCenter == b.distanceToMapCenter) { return a.id - b.id; } return a.distanceToMapCenter - b.distanceToMapCenter; }; WMEURMPT.compareURLastCommentDate = function(a, b) { var da = a.data.driveDate; var db = b.data.driveDate; if (a.data.session.comments.length != 0) { da = a.data.session.comments[a.data.session.comments.length - 1].createdOn; } if (b.data.session.comments.length != 0) { db = b.data.session.comments[b.data.session.comments.length - 1].createdOn; } if (a.data.session.comments.length != 0 && b.data.session.comments.length == 0) { return -1; } if (a.data.session.comments.length == 0 && b.data.session.comments.length != 0) { return 1; } if (da == db) { return WMEURMPT.compareURType(a, b); } return da - db; }; WMEURMPT.changeTableURSortTo = function(sortMode) { sortMode = parseInt(sortMode); var pos = WMEURMPT.sortHistoryUR.indexOf(sortMode); if (pos != -1) { WMEURMPT.sortHistoryUR.splice(pos); } if (WMEURMPT.sortHistoryUR[0] == -sortMode) { WMEURMPT.sortHistoryUR[0] = sortMode; } else { WMEURMPT.sortHistoryUR.splice(0, 0, sortMode); } WMEURMPT.updateIHMFromURList(sortMode); }; WMEURMPT.changeTableMPSortTo = function(sortMode) { sortMode = parseInt(sortMode); var pos = WMEURMPT.sortHistoryMP.indexOf(sortMode); if (pos != -1) { WMEURMPT.sortHistoryMP.splice(pos); } if (WMEURMPT.sortHistoryMP[0] == -sortMode) { WMEURMPT.sortHistoryMP[0] = sortMode; } else { WMEURMPT.sortHistoryMP.splice(0, 0, sortMode); } WMEURMPT.updateIHMFromMPList(sortMode); }; WMEURMPT.changeTableMCSortTo = function(sortMode) { sortMode = parseInt(sortMode); var pos = WMEURMPT.sortHistoryMC.indexOf(sortMode); if (pos != -1) { WMEURMPT.sortHistoryMC.splice(pos); } if (WMEURMPT.sortHistoryMC[0] == -sortMode) { WMEURMPT.sortHistoryMC[0] = sortMode; } else { WMEURMPT.sortHistoryMC.splice(0, 0, sortMode); } WMEURMPT.updateIHMFromMCList(sortMode); }; WMEURMPT.changeTablePURSortTo = function(sortMode) { sortMode = parseInt(sortMode); var pos = WMEURMPT.sortHistoryPUR.indexOf(sortMode); if (pos != -1) { WMEURMPT.sortHistoryPUR.splice(pos); } if (WMEURMPT.sortHistoryPUR[0] == -sortMode) { WMEURMPT.sortHistoryPUR[0] = sortMode; } else { WMEURMPT.sortHistoryPUR.splice(0, 0, sortMode); } WMEURMPT.logDebug("sort history:", WMEURMPT.sortHistoryPUR); WMEURMPT.updateIHMFromPURList(sortMode); }; WMEURMPT.getColorFromAge = function(ageInDays) { var r = 255; var g = 0; var b = 255; if (ageInDays < 15) { b = 0; g = 255 - ageInDays * 17; } else { if (ageInDays < 30) { b = (ageInDays - 15) * 17; } } if (g < 0) { g = 0; } if (b > 255) { b = 255; } return "#" + WMEURMPT.decimalToHex(r, 2) + WMEURMPT.decimalToHex(g, 2) + WMEURMPT.decimalToHex(b, 2); }; WMEURMPT.getColorFromWieght = function(MPWeight) { var r = 255; var g = 0; var b = 255; if (MPWeight == 2) { r = 255; b = 0; } else { if (MPWeight == 3) { g = 255; b = 0; } else { if (MPWeight > 3) { r = 0; g = 255; b = 0; } } } return "#" + WMEURMPT.decimalToHex(r, 2) + WMEURMPT.decimalToHex(g, 2) + WMEURMPT.decimalToHex(b, 2); }; WMEURMPT.getColorFromStartTime = function(ts) { var aDate = new Date; var now = aDate.getTime(); var deltaH = (ts - now) / 3600000; var r = 255; var g = 0; var b = 255; if (deltaH < 0) { return "#" + WMEURMPT.decimalToHex(r, 2) + WMEURMPT.decimalToHex(g, 2) + WMEURMPT.decimalToHex(b, 2); } r = 0; g = 255; b = 0; if (deltaH > 30 * 24) { return "#" + WMEURMPT.decimalToHex(r, 2) + WMEURMPT.decimalToHex(g, 2) + WMEURMPT.decimalToHex(b, 2); } r = 255; g = 0; b = 255; if (deltaH < 7 * 24) { b = Math.floor(255 - deltaH / (7 * 24) * 255); } else { if (deltaH < 17 * 24) { deltaH = deltaH - 7 * 24; b = 0; g = Math.floor(255 - deltaH / (10 * 24) * 255); } else { deltaH = deltaH - 17 * 24; g = 255; b = 0; r = Math.floor(255 - deltaH / (13 * 24) * 255); } } if (b > 255) { b = 255; } if (r > 255) { r = 255; } if (g > 255) { g = 255; } return "#" + WMEURMPT.decimalToHex(r, 2) + WMEURMPT.decimalToHex(g, 2) + WMEURMPT.decimalToHex(b, 2); }; WMEURMPT.updateIHMFromURList = function(sortMode) { var div = WMEURMPT.getId("urt-list"); if (WMEURMPT.URList.length == 0) { WMEURMPT.removeChildElements(div); div.innerHTML = ""; return; } sortMode = typeof sortMode !== "undefined" && sortMode != null ? sortMode : WMEURMPT.currentSortModeUR; if (sortMode != WMEURMPT.currentSortModeUR || (sortMode == WMEURMPT.sortModeListUR.distanceDSC || sortMode == WMEURMPT.sortModeListUR.distanceASC) && WMEURMPT.isComputeDistances == true) { WMEURMPT.URList.sort(WMEURMPT.compareUR); WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } WMEURMPT.currentSortModeUR = sortMode; var content = ""; content += '<table id="urmpt-ur-table" class="urt-table">'; content += "<thead><tr>"; content += '<td><div class="urt-table-head-icon"><img style="width: 16px" title="Blacklist UR 1 by 1." src="data:image/png;base64,' + WMEURMPT.icon_blacklist + '" /></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="urt-table-sort-age"><img style="width: 16px" title="Age of the UR.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_age + '" /></a><a href="#" id="urt-table-sort-lastcomment"><img style="width: 16px" title="Last comment on UR.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_comments + '" /></a></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="urt-table-sort-type"><img title="Type of the UR.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_type + '" /></a></div></td>'; content += '<td width="100%">Description</td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="urt-table-sort-ccount"><img style="width: 16px" title="Comments count\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_comments + '" /></a></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="urt-table-sort-distance"><img title="Distance to the center of the map.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_distance + '" /></a></div></td>'; content += '<td style="width: 20px; display: inline-block; border: none;"><center><div class="urt-table-head-icon"><i class="fa fa-crosshairs crosshair icon-screenshot"></i></div></center></td>'; content += "</tr></thead>"; var displayedURCount = 0; var hiddenURCount = 0; for (var i = 0; i < WMEURMPT.URList.length; i++) { if (WMEURMPT.getId("urt-checkbox-filterHideLimitTo").checked) { if (displayedURCount >= WMEURMPT.currentURLimitTo) { hiddenURCount += WMEURMPT.URList.length - i; break; } } if (WMEURMPT.isURFiltered(WMEURMPT.URList[i])) { hiddenURCount++; continue; } displayedURCount++; var URDays = WMEURMPT.getDuration(WMEURMPT.URList[i].data.driveDate); var distance = WMEURMPT.URList[i].distanceToMapCenter; var distanceStr = ""; if (W.prefs.get("isImperial")) { distanceStr = Math.floor(distance * 3.28084) + " <font size: smaller>ft</font>"; if (distance * 3.28084 >= 1000) { distanceStr = Math.floor(distance * 0.000621371) + " <font size: smaller>mi</font>"; } } else { distanceStr = Math.floor(distance) + " <font size: smaller>m</font>"; if (distance >= 1000) { distanceStr = Math.floor(distance / 1000) + " <font size: smaller>km</font>"; } if (distance >= 1000000) { distanceStr = Math.floor(distance / 1000000) + " <font size: smaller>Mm</font>"; } } var comments = ""; var lastCommentDays = null; for (var c = 0; c < WMEURMPT.URList[i].data.session.comments.length; c++) { comments += WMEURMPT.URList[i].data.session.comments[c].userName + " (" + (new Date(WMEURMPT.URList[i].data.session.comments[c].createdOn)).toLocaleString() + "):\n"; comments += WMEURMPT.URList[i].data.session.comments[c].text + "\n\n"; lastCommentDays = WMEURMPT.getDuration(WMEURMPT.URList[i].data.session.comments[c].createdOn); if (c == WMEURMPT.URList[i].data.session.comments.length - 1 && WMEURMPT.URList[i].data.session.comments[c].userName == WMEURMPT.me.userName) { WMEURMPT.URList[i].lastVisitCommentsCount = WMEURMPT.URList[i].data.session.comments.length; } } content += '<tr id="urt-tr-' + i + '" >'; content += '<td class="urt-blacklist" id="urt-blacklist-' + i + '" style=" cursor: pointer; " title="' + (WMEURMPT.URList[i].blackListed ? "whitelist" : "blacklist") + ' this UR" > </td>'; var colorCode = new Object; colorCode.fc = "#000000"; if (WMEURMPT.URList[i].blackListed) { colorCode.bg = "#000000"; colorCode.fc = "#ffffff"; } else { if (WMEURMPT.URList[i].data.open == false) { colorCode.bg = "#00a000"; } else { colorCode.bg = WMEURMPT.getColorFromAge(URDays); } } var HRURDays = "" + URDays; var HRURLCDays = "-"; if (lastCommentDays != null) { HRURLCDays = "" + lastCommentDays; } var ttt = HRURDays + " days"; var closedBy = ""; if (WMEURMPT.URList[i].data.open == false) { closedBy = " - Closed as " + WMEURMPT.getHRURResolutionFromType(WMEURMPT.URList[i].data.resolution) + " by: " + WMEURMPT.URList[i].data.resolvedByName; } if (WMEURMPT.URAgeColIsLastComment) { content += '<td title="' + ttt + closedBy + '" style="text-align: center; background-color: ' + colorCode.bg + "; color: " + colorCode.fc + ';"><span style="width: 100%; display: block;">' + HRURLCDays + "</span></td>"; } else { content += '<td title="' + HRURLCDays + " days" + closedBy + '" style="text-align: center; background-color: ' + colorCode.bg + "; color: " + colorCode.fc + ';"><span style="width: 100%; display: block;">' + HRURDays + "</span></td>"; } content += "<td>" + WMEURMPT.getHRURTypeFromType(WMEURMPT.URList[i].data.type) + "</td>"; var descriptionHTML = "Not Available"; var descriptionHTMLNormalized = "N/A" + (new Array(WMEURMPT.URDescriptionMaxLength - 3 + 1)).join(" "); if (WMEURMPT.URList[i].data.description != null) { descriptionHTML = WMEURMPT.escapeHtml(WMEURMPT.URList[i].data.description); descriptionHTMLNormalized = descriptionHTML.substr(0, WMEURMPT.URDescriptionMaxLength); } if (descriptionHTMLNormalized.length < WMEURMPT.URDescriptionMaxLength) { descriptionHTMLNormalized += (new Array(WMEURMPT.URDescriptionMaxLength - descriptionHTMLNormalized.length + 1)).join(" "); } content += '<td><span id="urt-descriptionur-' + WMEURMPT.URList[i].id + '" title="' + descriptionHTML + '" style="display: block; height: 20px; overflow: hidden; white-space: nowrap; font-family: \'Courier New\', monospace;">' + descriptionHTMLNormalized + "</span></td>"; content += '<td style="text-align: center"><span id="urt-commentscount-' + i + '" style="width: 100%; display: block;" title="' + WMEURMPT.escapeHtml(comments) + '">' + WMEURMPT.URList[i].data.session.comments.length + "</span></td>"; content += '<td style="text-align: right">' + distanceStr + "</td>"; content += '<td style="width: 20px;" id="urt-targetur-' + i + (WMEURMPT.isDebug ? '" title="' + WMEURMPT.URList[i].id : "") + '"><a href="#"><center><i class="fa fa-crosshairs crosshair icon-screenshot"></i></center></a></td>'; content += "</tr>"; } content += "</table>"; WMEURMPT.removeChildElements(div); div.innerHTML = displayedURCount + " URs (" + hiddenURCount + " hidden)<br/>" + content; var asort = WMEURMPT.getId("urt-table-sort-age"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListUR.ageDSC; if (WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.ageDSC || WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.ageASC) { newSortMode = WMEURMPT.currentSortModeUR * -1; } return function() { WMEURMPT.changeTableURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("urt-table-sort-type"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListUR.typeDSC; if (WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.typeDSC || WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.typeASC) { newSortMode = WMEURMPT.currentSortModeUR * -1; } return function() { WMEURMPT.changeTableURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("urt-table-sort-ccount"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListUR.commentCountDSC; if (WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.commentCountDSC || WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.commentCountASC) { newSortMode = WMEURMPT.currentSortModeUR * -1; } return function() { WMEURMPT.changeTableURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("urt-table-sort-distance"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListUR.distanceDSC; if (WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.distanceDSC || WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.distanceASC) { newSortMode = WMEURMPT.currentSortModeUR * -1; } return function() { WMEURMPT.changeTableURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("urt-table-sort-lastcomment"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListUR.lastCommentDSC; if (WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.lastCommentDSC || WMEURMPT.currentSortModeUR == WMEURMPT.sortModeListUR.lastCommentASC) { newSortMode = WMEURMPT.currentSortModeUR * -1; } return function() { WMEURMPT.changeTableURSortTo(newSortMode + ""); }; }(); window.setTimeout(WMEURMPT.setupURListHandlers); WMEURMPT.updateFlashingURs(); }; WMEURMPT.setupURListHandlers = function() { var table = WMEURMPT.getId("urmpt-ur-table"); if (table == null) { return; } if (table.childNodes.length != 2) { return; } var rows = table.childNodes[1].childNodes; for (var i = 0; i < rows.length; i++) { var row = rows[i]; var cellBlackList = row.childNodes[0]; var cellTarget = row.childNodes[row.childNodes.length - 1]; var indexInList = cellTarget.id.split("-")[2]; cellBlackList.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.blacklistUR, [indexInList]); var lonlat = WMEURMPT.URList[parseInt(indexInList)].lonlat; var URId = WMEURMPT.URList[parseInt(indexInList)].id; cellTarget.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.targetMapToUR, [lonlat.lon + "", lonlat.lat + "", URId + ""]); } }; WMEURMPT.updateIHMFromMPList = function(sortMode) { var div = WMEURMPT.getId("mpt-list"); if (WMEURMPT.MPList.length == 0) { WMEURMPT.removeChildElements(div); div.innerHTML = ""; return; } for (var i = 0; i < WMEURMPT.MPList.length; i++) { if (WMEURMPT.MPList[i].type == "problem" && WMEURMPT.MPList[i].data.hasOwnProperty("subType") && WMEURMPT.MPList[i].data.subType == 300) { var aDate = new Date; var now = aDate.getTime(); var deltaH = (WMEURMPT.MPList[i].data.startTime - now) / 3600000; var MPWeight = Math.ceil((720 - deltaH) / 7.2); if (deltaH > 0) { MPWeight = Math.ceil((720 - deltaH) / 14.4); } WMEURMPT.MPList[i].data.weight = MPWeight; } } sortMode = typeof sortMode !== "undefined" && sortMode != null ? sortMode : WMEURMPT.currentSortModeMP; if (sortMode != WMEURMPT.currentSortModeMP || (sortMode == WMEURMPT.sortModeListMP.distanceDSC || sortMode == WMEURMPT.sortModeListMP.distanceASC) && WMEURMPT.isComputeDistances == true) { WMEURMPT.MPList.sort(WMEURMPT.compareMP); WMEURMPT.MPMap = WMEURMPT.listToObject(WMEURMPT.MPList); } WMEURMPT.currentSortModeMP = sortMode; var content = ""; content += '<table id="urmpt-mp-table" class="urt-table">'; content += "<thead><tr>"; content += '<td><div class="urt-table-head-icon"><img style="width: 16px" title="Blacklist UR 1 by 1." src="data:image/png;base64,' + WMEURMPT.icon_blacklist + '" /></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="mpt-table-sort-priority"><img style="width: 16px" title="Priority.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_priority + '" /></a></div></td>'; content += '<td width="100%"><a href="#" id="mpt-table-sort-type" title="Type of the MP.\nClick to sort.">Description</a></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="mpt-table-sort-distance"><img title="Distance to the center of the map.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_distance + '" /></a></div></td>'; content += '<td style="width: 20px; display: inline-block; border: none;"><center><div class="urt-table-head-icon"><i class="fa fa-crosshairs crosshair icon-screenshot"></i></div></center></td>'; content += "</tr></thead>"; var displayedMPCount = 0; var hiddenMPCount = 0; for (var i = 0; i < WMEURMPT.MPList.length; i++) { if (WMEURMPT.getId("mpt-checkbox-filterHideLimitTo").checked) { if (displayedMPCount >= WMEURMPT.currentMPLimitTo) { hiddenMPCount += WMEURMPT.MPList.length - i; break; } } if (WMEURMPT.isMPFiltered(WMEURMPT.MPList[i])) { hiddenMPCount++; continue; } displayedMPCount++; var MPWeight = 0; var isClosure = false; if (WMEURMPT.MPList[i].type == "problem" && WMEURMPT.MPList[i].data.hasOwnProperty("subType") && WMEURMPT.MPList[i].data.subType == 300) { isClosure = true; } if (WMEURMPT.MPList[i].type == "problem") { MPWeight = WMEURMPT.MPList[i].data.priority; } var distance = WMEURMPT.MPList[i].distanceToMapCenter; var distanceStr = ""; if (W.prefs.get("isImperial")) { distanceStr = Math.floor(distance * 3.28084) + " <font size: smaller>ft</font>"; if (distance * 3.28084 >= 1000) { distanceStr = Math.floor(distance * 0.000621371) + " <font size: smaller>mi</font>"; } } else { distanceStr = Math.floor(distance) + " <font size: smaller>m</font>"; if (distance >= 1000) { distanceStr = Math.floor(distance / 1000) + " <font size: smaller>km</font>"; } if (distance >= 1000000) { distanceStr = Math.floor(distance / 1000000) + " <font size: smaller>Mm</font>"; } } content += '<tr id="mpt-tr-' + i + '" >'; content += '<td class="urt-blacklist" id="mpt-blacklist-' + i + '" style="cursor: pointer;" title="' + (WMEURMPT.MPList[i].blackListed ? "whitelist" : "blacklist") + ' this MP" > </td>'; var colorCode = new Object; colorCode.fc = "#000000"; if (WMEURMPT.MPList[i].blackListed) { colorCode.bg = "#000000"; colorCode.fc = "#ffffff"; } else { if (WMEURMPT.MPList[i].data.open == false) { colorCode.bg = "#00a000"; } else { colorCode.bg = WMEURMPT.getColorFromWieght(MPWeight); } } var HRMPWeight = "" + MPWeight; var ttt = ""; var date = null; var closureDate = null; var closureTime = null; if (isClosure) { var tmpDate = (new Date(WMEURMPT.MPList[i].data.startTime)).toLocaleString(); tmpDate = tmpDate.split(" "); closureDate = tmpDate[0]; closureDate = closureDate.replace(",", ""); closureDate = closureDate.replace(/20([0-9][0-9])/, "$1"); closureTime = tmpDate[1]; } content += '<td style="text-align: right; background-color: ' + colorCode.bg + "; color: " + colorCode.fc + ';"><span ' + (WMEURMPT.MPList[i].data.open == true ? ttt != "" ? 'title="' + ttt + '"' : "" : 'title="' + ttt + (ttt != "" ? "\n" : "") + "Closed as " + WMEURMPT.getHRURResolutionFromType(WMEURMPT.MPList[i].data.resolution) + " by: " + WMEURMPT.MPList[i].data.resolvedByName + '" ') + ' style="width: 100%; display: block;">' + (isClosure ? closureDate : HRMPWeight) + "</span></td>"; var descriptionHTML = WMEURMPT.MPList[i].type == "turnProblem" ? "Turn Problem" : WMEURMPT.getFullMPTypeFromType(WMEURMPT.MPList[i].data.subType); var descriptionHTMLNormalized = (new Array(WMEURMPT.MPDescriptionMaxLength - 3 + 1)).join(" "); descriptionHTMLNormalized = descriptionHTML.substr(0, WMEURMPT.MPDescriptionMaxLength); if (descriptionHTMLNormalized.length < WMEURMPT.MPDescriptionMaxLength) { descriptionHTMLNormalized += (new Array(WMEURMPT.MPDescriptionMaxLength - descriptionHTMLNormalized.length + 1)).join(" "); } content += '<td><span id="mpt-descriptionmp-' + WMEURMPT.MPList[i].id + '" title="' + descriptionHTML + '" style="display: block; height: 20px; overflow: hidden; white-space: nowrap; font-family: \'Courier New\', monospace;">' + descriptionHTMLNormalized + "</span></td>"; content += '<td style="text-align: right">' + distanceStr + "</td>"; content += '<td style="width: 20px;" id="mpt-targetmp-' + i + (WMEURMPT.isDebug ? '" title="' + WMEURMPT.MPList[i].id : "") + '"><a href="#"><center><i class="fa fa-crosshairs crosshair icon-screenshot"></i></center></a></td>'; content += "</tr>"; } content += "</table>"; WMEURMPT.removeChildElements(div); div.innerHTML = displayedMPCount + " MPs (" + hiddenMPCount + " hidden)<br/>" + content; var asort = WMEURMPT.getId("mpt-table-sort-priority"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListMP.priorityDSC; if (WMEURMPT.currentSortModeMP == WMEURMPT.sortModeListMP.priorityDSC || WMEURMPT.currentSortModeMP == WMEURMPT.sortModeListMP.priorityASC) { newSortMode = WMEURMPT.currentSortModeMP * -1; } return function() { WMEURMPT.changeTableMPSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("mpt-table-sort-type"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListMP.typeDSC; if (WMEURMPT.currentSortModeMP == WMEURMPT.sortModeListMP.typeDSC || WMEURMPT.currentSortModeMP == WMEURMPT.sortModeListMP.typeASC) { newSortMode = WMEURMPT.currentSortModeMP * -1; } return function() { WMEURMPT.changeTableMPSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("mpt-table-sort-distance"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListMP.distanceDSC; if (WMEURMPT.currentSortModeMP == WMEURMPT.sortModeListMP.distanceDSC || WMEURMPT.currentSortModeMP == WMEURMPT.sortModeListMP.distanceASC) { newSortMode = WMEURMPT.currentSortModeMP * -1; } return function() { WMEURMPT.changeTableMPSortTo(newSortMode + ""); }; }(); window.setTimeout(WMEURMPT.setupMPListHandlers); WMEURMPT.updateFlashingMPs(); }; WMEURMPT.setupMPListHandlers = function() { var table = WMEURMPT.getId("urmpt-mp-table"); if (table == null) { return; } if (table.childNodes.length != 2) { return; } var rows = table.childNodes[1].childNodes; for (var i = 0; i < rows.length; i++) { var row = rows[i]; var cellBlackList = row.childNodes[0]; var cellTarget = row.childNodes[row.childNodes.length - 1]; var indexInList = cellTarget.id.split("-")[2]; cellBlackList.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.blacklistMP, [indexInList]); var lonlat = WMEURMPT.MPList[parseInt(indexInList)].lonlat; var MPId = WMEURMPT.MPList[parseInt(indexInList)].id; cellTarget.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.targetMapToMP, [lonlat.lon, lonlat.lat, MPId]); } }; WMEURMPT.updateIHMFromMCList = function(sortMode) { var div = WMEURMPT.getId("mct-list"); if (WMEURMPT.MCList.length == 0) { WMEURMPT.removeChildElements(div); div.innerHTML = ""; return; } sortMode = typeof sortMode !== "undefined" && sortMode != null ? sortMode : WMEURMPT.currentSortModeMC; if (sortMode != WMEURMPT.currentSortModeMC || (sortMode == WMEURMPT.sortModeListMC.distanceDSC || sortMode == WMEURMPT.sortModeListMC.distanceASC) && WMEURMPT.isComputeDistances == true) { WMEURMPT.MCList.sort(WMEURMPT.compareMC); WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MCList); } WMEURMPT.currentSortModeMC = sortMode; var content = ""; content += '<table id="urmpt-mc-table" class="urt-table">'; content += "<thead><tr>"; content += '<td><div class="urt-table-head-icon"><img style="width: 16px" title="Blacklist MC 1 by 1." src="data:image/png;base64,' + WMEURMPT.icon_blacklist + '" /></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="mct-table-sort-age"><img style="width: 16px" title="Age of the MC.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_age + '" /></a></div></td>'; content += '<td width="100%">Subject</td>'; content += '<td width="100%">Body</td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="mct-table-sort-ccount"><img style="width: 16px" title="Comments count\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_comments + '" /></a></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="mct-table-sort-distance"><img title="Distance to the center of the map.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_distance + '" /></a></div></td>'; content += '<td style="width: 20px; display: inline-block; border: none;"><center><div class="urt-table-head-icon"><i class="fa fa-crosshairs crosshair icon-screenshot"></i></div></center></td>'; content += "</tr></thead>"; var displayedMCCount = 0; var hiddenMCCount = 0; for (var i = 0; i < WMEURMPT.MCList.length; i++) { if (WMEURMPT.getId("mct-checkbox-filterHideLimitTo").checked) { if (displayedMCCount >= WMEURMPT.currentMCLimitTo) { hiddenMCCount += WMEURMPT.MCList.length - i; break; } } if (WMEURMPT.isMCFiltered(WMEURMPT.MCList[i])) { hiddenMCCount++; continue; } displayedMCCount++; var MCDays = 0; if (WMEURMPT.MCList[i].data.createdOn !== null) { MCDays = WMEURMPT.getDuration(WMEURMPT.MCList[i].data.createdOn); } var conversation = ""; if (WMEURMPT.MCList[i].data.hasOwnProperty("conversation")) { var conversationArray = []; WMEURMPT.MCList[i].data.conversation.forEach(function(c, j) { var text = c.userName + " (" + (new Date(c.createdOn)).toLocaleString() + "):\n"; text += c.text; conversationArray.push(text); if (j == WMEURMPT.MCList[i].data.conversation.length - 1 && c.userName == WMEURMPT.me.userName) { WMEURMPT.MCList[i].lastVisitCommentsCount = WMEURMPT.MCList[i].data.conversation.length; } }); conversation = conversationArray.join("\n\n"); } var distance = WMEURMPT.MCList[i].distanceToMapCenter; var distanceStr = ""; if (W.prefs.get("isImperial")) { distanceStr = Math.floor(distance * 3.28084) + " <font size: smaller>ft</font>"; if (distance * 3.28084 >= 1000) { distanceStr = Math.floor(distance * 0.000621371) + " <font size: smaller>mi</font>"; } } else { distanceStr = Math.floor(distance) + " <font size: smaller>m</font>"; if (distance >= 1000) { distanceStr = Math.floor(distance / 1000) + " <font size: smaller>km</font>"; } if (distance >= 1000000) { distanceStr = Math.floor(distance / 1000000) + " <font size: smaller>Mm</font>"; } } content += '<tr id="mct-tr-' + i + '" >'; content += '<td class="urt-blacklist" id="mct-blacklist-' + i + '" style="cursor: pointer; ' + (WMEURMPT.MCList[i].blackListed ? "background-color: #000; color: #FFF;" : "background-color: #FFF; color: #000;") + '" title="' + (WMEURMPT.MCList[i].blackListed ? "whitelist" : "blacklist") + ' this MC" > </td>'; var ttt = ""; var date = null; content += '<td title="' + MCDays + ' days" style="text-align: center;"><span style="width: 100%; display: block;">' + MCDays + "</span></td>"; var subjectHTML = WMEURMPT.MCList[i].data.subject; var subjectHTMLNormalized = (new Array(WMEURMPT.MCSubjectMaxLength - 3 + 1)).join(" "); subjectHTMLNormalized = subjectHTML.substr(0, WMEURMPT.MCSubjectMaxLength); if (subjectHTMLNormalized.length < WMEURMPT.MCSubjectMaxLength) { subjectHTMLNormalized += (new Array(WMEURMPT.MCSubjectMaxLength - subjectHTMLNormalized.length + 1)).join(" "); } content += '<td><span id="mct-subjectmc-' + WMEURMPT.MCList[i].id + '" title="' + subjectHTML + '" style="display: block; height: 20px; overflow: hidden; white-space: nowrap; font-family: \'Courier New\', monospace;">' + subjectHTMLNormalized + "</span></td>"; var bodyHTML = WMEURMPT.MCList[i].data.body; var bodyHTMLNormalized = (new Array(WMEURMPT.MCBodyMaxLength - 3 + 1)).join(" "); bodyHTMLNormalized = bodyHTML.substr(0, WMEURMPT.MCBodyMaxLength); if (bodyHTMLNormalized.length < WMEURMPT.MCBodyMaxLength) { bodyHTMLNormalized += (new Array(WMEURMPT.MCBodyMaxLength - bodyHTMLNormalized.length + 1)).join(" "); } content += '<td><span id="mct-bodymc-' + WMEURMPT.MCList[i].id + '" title="' + bodyHTML + '" style="display: block; height: 20px; overflow: hidden; white-space: nowrap; font-family: \'Courier New\', monospace;">' + bodyHTMLNormalized + "</span></td>"; content += '<td style="text-align: center"><span id="mct-commentscount-' + i + '" style="width: 100%; display: block;" title="' + WMEURMPT.escapeHtml(conversation) + '">' + (WMEURMPT.MCList[i].data.hasOwnProperty("conversation") ? WMEURMPT.MCList[i].data.conversation.length : "0") + "</span></td>"; content += '<td style="text-align: right">' + distanceStr + "</td>"; content += '<td style="width: 20px;" id="mct-targetmc-' + i + (WMEURMPT.isDebug ? '" title="' + WMEURMPT.MCList[i].id : "") + '"><a href="#"><center><i class="fa fa-crosshairs crosshair icon-screenshot"></i></center></a></td>'; content += "</tr>"; } content += "</table>"; WMEURMPT.removeChildElements(div); div.innerHTML = displayedMCCount + " MCs (" + hiddenMCCount + " hidden)<br/>" + content; var asort = WMEURMPT.getId("mct-table-sort-age"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListMC.ageDSC; if (WMEURMPT.currentSortModeMC == WMEURMPT.sortModeListMC.ageDSC || WMEURMPT.currentSortModeMC == WMEURMPT.sortModeListMC.ageASC) { newSortMode = WMEURMPT.currentSortModeMC * -1; } return function() { WMEURMPT.changeTableMCSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("mct-table-sort-distance"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListMC.distanceDSC; if (WMEURMPT.currentSortModeMC == WMEURMPT.sortModeListMC.distanceDSC || WMEURMPT.currentSortModeMC == WMEURMPT.sortModeListMC.distanceASC) { newSortMode = WMEURMPT.currentSortModeMC * -1; } return function() { WMEURMPT.changeTableMCSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("mct-table-sort-ccount"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListMC.commentCountDSC; if (WMEURMPT.currentSortModeMC == WMEURMPT.sortModeListMC.commentCountDSC || WMEURMPT.currentSortModeMC == WMEURMPT.sortModeListMC.commentCountASC) { newSortMode = WMEURMPT.currentSortModeMC * -1; } return function() { WMEURMPT.changeTableMCSortTo(newSortMode + ""); }; }(); window.setTimeout(WMEURMPT.setupMCListHandlers); WMEURMPT.updateFlashingMCs(); }; WMEURMPT.setupMCListHandlers = function() { var table = WMEURMPT.getId("urmpt-mc-table"); if (table == null) { return; } if (table.childNodes.length != 2) { return; } var rows = table.childNodes[1].childNodes; for (var i = 0; i < rows.length; i++) { var row = rows[i]; var cellBlackList = row.childNodes[0]; var cellTarget = row.childNodes[row.childNodes.length - 1]; var indexInList = cellTarget.id.split("-")[2]; cellBlackList.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.blacklistMC, [indexInList]); var lonlat = WMEURMPT.MCList[parseInt(indexInList)].lonlat; var MCId = WMEURMPT.MCList[parseInt(indexInList)].id; cellTarget.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.targetMapToMC, [lonlat.lon, lonlat.lat, MCId]); } }; WMEURMPT.updateIHMFromPURList = function(sortMode) { var div = WMEURMPT.getId("purt-list"); if (WMEURMPT.PURList.length == 0) { WMEURMPT.removeChildElements(div); div.innerHTML = ""; return; } sortMode = typeof sortMode !== "undefined" && sortMode !== null ? sortMode : WMEURMPT.currentSortModePUR; if (sortMode != WMEURMPT.currentSortModePUR || (sortMode == WMEURMPT.sortModeListPUR.distanceDSC || sortMode == WMEURMPT.sortModeListPUR.distanceASC) && WMEURMPT.isComputeDistances == true) { WMEURMPT.PURList.sort(WMEURMPT.comparePUR); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } WMEURMPT.currentSortModePUR = sortMode; var content = ""; content += '<table id="urmpt-pur-table" class="urt-table">'; content += "<thead><tr>"; content += '<td><div class="urt-table-head-icon"><img style="width: 16px" title="Blacklist PUR 1 by 1." src="data:image/png;base64,' + WMEURMPT.icon_blacklist + '" /></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="purt-table-sort-age"><img style="width: 16px" title="Age of the PUR.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_age + '" /></a></div></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="purt-table-sort-nbpur"><img style="width: 16px" title="Number of PUR on the Poi.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_pur + '" /></a></div></td>'; content += '<td width="100%"><a href="#" id="purt-table-sort-categories" title="Categories of the POI.\nClick to sort.">Categories</a></td>'; content += '<td width="100%"><a href="#" id="purt-table-sort-name" title="Name of the POI.\nClick to sort.">Name</a></td>'; content += '<td><div class="urt-table-head-icon"><a href="#" id="purt-table-sort-distance"><img title="Distance to the center of the map.\nClick to sort." src="data:image/png;base64,' + WMEURMPT.icon_distance + '" /></a></div></td>'; content += '<td style="width: 20px; display: inline-block; border: none;"><center><div class="urt-table-head-icon"><i class="fa fa-crosshairs crosshair icon-screenshot"></i></div></center></td>'; content += "</tr></thead>"; var displayedPURCount = 0; var hiddenPURCount = 0; for (var i = 0; i < WMEURMPT.PURList.length; i++) { if (WMEURMPT.getId("purt-checkbox-filterHideLimitTo").checked) { if (displayedPURCount >= WMEURMPT.currentPURLimitTo) { hiddenPURCount += WMEURMPT.PURList.length - i; break; } } if (WMEURMPT.isPURFiltered(WMEURMPT.PURList[i])) { hiddenPURCount++; continue; } if (WMEURMPT.PURList[i].data.hasOwnProperty("venueUpdateRequests") && WMEURMPT.PURList[i].data.venueUpdateRequests.length == 0) { continue; } displayedPURCount++; var PURDays = WMEURMPT.getDuration(WMEURMPT.PURList[i].data.dateAddedMin); var nbPUR = null; if (WMEURMPT.PURList[i].data.hasOwnProperty("venueUpdateRequests") && WMEURMPT.PURList[i].data.venueUpdateRequests.length != 0) { nbPUR = WMEURMPT.PURList[i].data.venueUpdateRequests.length; } var distance = WMEURMPT.PURList[i].distanceToMapCenter; var distanceStr = ""; if (W.prefs.get("isImperial")) { distanceStr = Math.floor(distance * 3.28084) + " <font size: smaller>ft</font>"; if (distance * 3.28084 >= 1000) { distanceStr = Math.floor(distance * 0.000621371) + " <font size: smaller>mi</font>"; } } else { distanceStr = Math.floor(distance) + " <font size: smaller>m</font>"; if (distance >= 1000) { distanceStr = Math.floor(distance / 1000) + " <font size: smaller>km</font>"; } if (distance >= 1000000) { distanceStr = Math.floor(distance / 1000000) + " <font size: smaller>Mm</font>"; } } content += '<tr id="purt-tr-' + i + '" >'; content += '<td class="urt-blacklist" id="purt-blacklist-' + i + '" style="cursor: pointer;" title="' + (WMEURMPT.PURList[i].blackListed ? "whitelist" : "blacklist") + ' this PUR" > </td>'; content += '<td title="' + PURDays + ' days" style="text-align: center;"><span style="width: 100%; display: block;">' + PURDays + "</span></td>"; content += '<td title="' + nbPUR + ' pur(s)" style="text-align: center;"><span style="width: 100%; display: block;">' + nbPUR + "</span></td>"; var categoriesHTML = ""; for (var n = 0; n < WMEURMPT.PURList[i].data.categories.length; n++) { categoriesHTML += WMEURMPT.getPURCategoriesFromCategories(WMEURMPT.PURList[i].data.categories[n]) + " "; } var categoriesHTMLNormalized = (new Array(WMEURMPT.PURCategoriesMaxLength - 3 + 1)).join(" "); categoriesHTMLNormalized = categoriesHTML.substr(0, WMEURMPT.PURCategoriesMaxLength); if (categoriesHTMLNormalized.length < WMEURMPT.PURCategoriesMaxLength) { categoriesHTMLNormalized += (new Array(WMEURMPT.PURCategoriesMaxLength - categoriesHTMLNormalized.length + 1)).join(" "); } content += '<td><span id="purt-categoriespur-' + WMEURMPT.PURList[i].id + '" title="' + categoriesHTML + '" style="display: block; height: 20px; overflow: hidden; white-space: nowrap; font-family: \'Courier New\', monospace;">' + categoriesHTMLNormalized + "</span></td>"; var nameHTML = WMEURMPT.PURList[i].data.name; if (nameHTML === undefined) { nameHTML = "undefined"; } var nameHTMLNormalized = (new Array(WMEURMPT.PURNameMaxLength - 3 + 1)).join(" "); nameHTMLNormalized = nameHTML.substr(0, WMEURMPT.PURNameMaxLength); if (nameHTMLNormalized.length < WMEURMPT.PURNameMaxLength) { nameHTMLNormalized += (new Array(WMEURMPT.PURNameMaxLength - nameHTMLNormalized.length + 1)).join(" "); } content += '<td><span id="purt-namepur-' + WMEURMPT.PURList[i].id + '" title="' + nameHTML + '" style="display: block; height: 20px; overflow: hidden; white-space: nowrap; font-family: \'Courier New\', monospace;">' + nameHTMLNormalized + "</span></td>"; content += '<td style="text-align: right">' + distanceStr + "</td>"; content += '<td style="width: 20px;" id="purt-targetpur-' + i + (WMEURMPT.isDebug ? '" title="' + WMEURMPT.PURList[i].id : "") + '"><a href="#"><center><i class="fa fa-crosshairs crosshair icon-screenshot"></i></center></a></td>'; content += "</tr>"; } content += "</table>"; WMEURMPT.removeChildElements(div); div.innerHTML = displayedPURCount + " PURs (" + hiddenPURCount + " hidden)<br/>" + content; var asort = WMEURMPT.getId("purt-table-sort-age"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListPUR.ageDSC; if (WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.ageDSC || WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.ageASC) { newSortMode = WMEURMPT.currentSortModePUR * -1; } return function() { WMEURMPT.changeTablePURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("purt-table-sort-categories"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListPUR.categoriesDSC; if (WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.categoriesDSC || WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.categoriesASC) { newSortMode = WMEURMPT.currentSortModePUR * -1; } return function() { WMEURMPT.changeTablePURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("purt-table-sort-name"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListPUR.nameDSC; if (WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.nameDSC || WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.nameASC) { newSortMode = WMEURMPT.currentSortModePUR * -1; } return function() { WMEURMPT.changeTablePURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("purt-table-sort-distance"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListPUR.distanceDSC; if (WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.distanceDSC || WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.distanceASC) { newSortMode = WMEURMPT.currentSortModePUR * -1; } return function() { WMEURMPT.changeTablePURSortTo(newSortMode + ""); }; }(); asort = WMEURMPT.getId("purt-table-sort-nbpur"); asort.onclick = function() { var newSortMode = WMEURMPT.sortModeListPUR.nbpurDSC; if (WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.nbpurDSC || WMEURMPT.currentSortModePUR == WMEURMPT.sortModeListPUR.nbpurASC) { newSortMode = WMEURMPT.currentSortModePUR * -1; } return function() { WMEURMPT.changeTablePURSortTo(newSortMode + ""); }; }(); window.setTimeout(WMEURMPT.setupPURListHandlers); WMEURMPT.updateFlashingPURs(); }; WMEURMPT.setupPURListHandlers = function() { var table = WMEURMPT.getId("urmpt-pur-table"); if (table == null) { return; } if (table.childNodes.length != 2) { return; } var rows = table.childNodes[1].childNodes; for (var i = 0; i < rows.length; i++) { var row = rows[i]; var cellBlackList = row.childNodes[0]; var cellTarget = row.childNodes[row.childNodes.length - 1]; var indexInList = cellTarget.id.split("-")[2]; cellBlackList.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.blacklistPUR, [indexInList]); var lonlat = WMEURMPT.PURList[parseInt(indexInList)].lonlat; var PURId = WMEURMPT.PURList[parseInt(indexInList)].id; cellTarget.onclick = WMEURMPT.getFunctionWithArgs(WMEURMPT.targetMapToPUR, [lonlat.lon, lonlat.lat, PURId]); } }; WMEURMPT.updateFlashingURs = function() { for (var i = 0; i < WMEURMPT.URList.length; i++) { if (WMEURMPT.isURFiltered(WMEURMPT.URList[i])) { continue; } var span = WMEURMPT.getId("urt-commentscount-" + i); var tr = WMEURMPT.getId("urt-tr-" + i); if (span == null) { continue; } if (tr == null) { continue; } if (WMEURMPT.URList[i].alreadyVisited == false && tr.className != "urt-bg-highlighted") { tr.className = "urt-bg-highlighted"; } else { if (WMEURMPT.URList[i].alreadyVisited == true) { tr.className = ""; } } if (WMEURMPT.URList[i].data.session.isFollowing == true) { tr.className = "urt-bg-ifollow"; } if (WMEURMPT.URList[i].id == WMEURMPT.selectedURID) { tr.className = "urt-bg-selected"; } if (WMEURMPT.URList[i].data.hasOwnProperty("session") == true && WMEURMPT.URList[i].lastVisitCommentsCount < WMEURMPT.URList[i].data.session.comments.length) { span.className = "urt-bg-newcomments"; } else { span.className = ""; } } WMEURMPT.flashOdd = !WMEURMPT.flashOdd; }; WMEURMPT.updateFlashingMPs = function() { for (var i = 0; i < WMEURMPT.MPList.length; i++) { var tr = WMEURMPT.getId("mpt-tr-" + i); if (tr == null) { continue; } if (WMEURMPT.MPList[i].alreadyVisited == false && tr.className != "urt-bg-highlighted") { tr.className = "urt-bg-highlighted"; } else { if (WMEURMPT.MPList[i].alreadyVisited == true) { tr.className = ""; } } if (WMEURMPT.MPList[i].id == WMEURMPT.selectedMPID) { tr.className = "urt-bg-selected"; } } }; WMEURMPT.updateFlashingMCs = function() { for (var i = 0; i < WMEURMPT.MCList.length; i++) { var tr = WMEURMPT.getId("mct-tr-" + i); if (tr == null) { continue; } if (WMEURMPT.MCList[i].alreadyVisited == false && tr.className != "urt-bg-highlighted") { tr.className = "urt-bg-highlighted"; } else { if (WMEURMPT.MCList[i].alreadyVisited == true) { tr.className = ""; } } if (WMEURMPT.MCList[i].id == WMEURMPT.selectedMCID) { tr.className = "urt-bg-selected"; } if (WMEURMPT.MCList[i].data.hasOwnProperty("conversation") == true && WMEURMPT.MCList[i].lastVisitCommentsCount < WMEURMPT.MCList[i].data.conversation.length) { var span = WMEURMPT.getId("mct-commentscount-" + i); if (span != null) { span.className = "urt-bg-newcomments"; } } } }; WMEURMPT.updateFlashingPURs = function() { for (var i = 0; i < WMEURMPT.PURList.length; i++) { var tr = WMEURMPT.getId("purt-tr-" + i); if (tr == null) { continue; } if (WMEURMPT.PURList[i].alreadyVisited == false && tr.className != "urt-bg-highlighted") { tr.className = "urt-bg-highlighted"; } else { if (WMEURMPT.PURList[i].alreadyVisited == true) { tr.className = ""; } } if (WMEURMPT.PURList[i].id == WMEURMPT.selectedPURID) { tr.className = "urt-bg-selected"; } } }; WMEURMPT.updateLongTextCrop = function() { var ur_table = WMEURMPT.getId("urmpt-ur-table"); var mp_table = WMEURMPT.getId("urmpt-mp-table"); var mc_table = WMEURMPT.getId("urmpt-mc-table"); var pur_table = WMEURMPT.getId("urmpt-pur-table"); if (ur_table) { if (ur_table.children.length >= 2) { var lines = ur_table.children[1].children; var spanText = null; for (var i = 0; i < lines.length; i++) { spanText = lines[i].children[3].firstChild; if (spanText == null) { continue; } if (typeof spanText === "undefined") { continue; } var urIndices = lines[i].id.match(/urt-tr-([0-9]+)/); if (urIndices.length != 2) { continue; } var urIndex = parseInt(urIndices[1]); if (WMEURMPT.URList[urIndex].data.description == null) { continue; } if (WMEURMPT.URList[urIndex].data.description.length <= WMEURMPT.URDescriptionMaxLength) { continue; } if (typeof WMEURMPT.URList[urIndex].data.descriptionOffset === "undefined") { WMEURMPT.URList[urIndex].data.descriptionOffset = -10; } var pos = WMEURMPT.URList[urIndex].data.descriptionOffset; if (WMEURMPT.URList[urIndex].data.descriptionOffset < 0) { pos = 0; } var remaining = WMEURMPT.URList[urIndex].data.description.length - pos; if (remaining < 10) { spanText.innerHTML = WMEURMPT.escapeHtml(WMEURMPT.URList[urIndex].data.description.substr(0, WMEURMPT.URDescriptionMaxLength)); WMEURMPT.URList[urIndex].data.descriptionOffset = -10; } else { if (remaining < WMEURMPT.URDescriptionMaxLength) { WMEURMPT.URList[urIndex].data.descriptionOffset++; } else { if (WMEURMPT.URList[urIndex].data.descriptionOffset > 0) { spanText.innerHTML = WMEURMPT.escapeHtml(WMEURMPT.URList[urIndex].data.description.substr(WMEURMPT.URList[urIndex].data.descriptionOffset + 1, WMEURMPT.URDescriptionMaxLength)); } WMEURMPT.URList[urIndex].data.descriptionOffset++; } } } } } if (mp_table) { if (mp_table.children.length >= 2) { var lines = mp_table.children[1].children; var spanText = null; for (var i = 0; i < lines.length; i++) { spanText = lines[i].children[2].firstChild; if (spanText == null) { continue; } if (typeof spanText === "undefined") { continue; } var mpIndices = lines[i].id.match(/mpt-tr-([0-9]+)/); if (mpIndices.length != 2) { continue; } var mpIndex = parseInt(mpIndices[1]); var description = WMEURMPT.MPList[mpIndex].type == "turnProblem" ? "Turn Problem" : WMEURMPT.getFullMPTypeFromType(WMEURMPT.MPList[mpIndex].data.subType); if (description == null) { continue; } if (description.length <= WMEURMPT.MPDescriptionMaxLength) { continue; } if (typeof WMEURMPT.MPList[mpIndex].data.descriptionOffset === "undefined") { WMEURMPT.MPList[mpIndex].data.descriptionOffset = -10; } var pos = WMEURMPT.MPList[mpIndex].data.descriptionOffset; if (WMEURMPT.MPList[mpIndex].data.descriptionOffset < 0) { pos = 0; } var remaining = description.length - pos; if (remaining < 10) { spanText.innerHTML = WMEURMPT.escapeHtml(description.substr(0, WMEURMPT.MPDescriptionMaxLength)); WMEURMPT.MPList[mpIndex].data.descriptionOffset = -10; } else { if (remaining < WMEURMPT.MPDescriptionMaxLength) { WMEURMPT.MPList[mpIndex].data.descriptionOffset++; } else { if (WMEURMPT.MPList[mpIndex].data.descriptionOffset > 0) { spanText.innerHTML = WMEURMPT.escapeHtml(description.substr(WMEURMPT.MPList[mpIndex].data.descriptionOffset + 1, WMEURMPT.MPDescriptionMaxLength)); } WMEURMPT.MPList[mpIndex].data.descriptionOffset++; } } } } } if (mc_table) { if (mc_table.children.length >= 2) { var lines = mc_table.children[1].children; var spanText = null; for (var i = 0; i < lines.length; i++) { [{index:2, att:"subject", maxl:WMEURMPT.MCSubjectMaxLength}, {index:3, att:"body", maxl:WMEURMPT.MCBodyMaxLength}].forEach(function(child) { spanText = lines[i].children[child.index].firstChild; if (spanText == null) { return; } if (typeof spanText === "undefined") { return; } var mcIndices = lines[i].id.match(/mct-tr-([0-9]+)/); if (mcIndices.length != 2) { return; } var mcIndex = parseInt(mcIndices[1]); var theMC = WMEURMPT.MCList[mcIndex]; if (theMC.data[child.att] == null) { return; } if (theMC.data[child.att].length <= child.maxl) { return; } if (typeof theMC.data[child.att + "Offset"] === "undefined") { theMC.data[child.att + "Offset"] = -10; } var pos = theMC.data[child.att + "Offset"]; if (theMC.data[child.att + "Offset"] < 0) { pos = 0; } var text = theMC.data[child.att]; var remaining = theMC.data[child.att].length - pos; if (remaining < 10) { spanText.innerHTML = WMEURMPT.escapeHtml(text.substr(0, child.maxl)); theMC.data[child.att + "Offset"] = -10; } else { if (remaining < child.maxl) { theMC.data[child.att + "Offset"]++; } else { if (theMC.data[child.att + "Offset"] > 0) { spanText.innerHTML = WMEURMPT.escapeHtml(text.substr(theMC.data[child.att + "Offset"] + 1, child.maxl)); } theMC.data[child.att + "Offset"]++; } } }); } } } if (pur_table) { if (pur_table.children.length >= 2) { var lines = pur_table.children[1].children; var spanText = null; for (var i = 0; i < lines.length; i++) { [{index:3, att:"categories", maxl:WMEURMPT.PURCategoriesMaxLength}, {index:4, att:"name", maxl:WMEURMPT.PURNameMaxLength}].forEach(function(child) { spanText = lines[i].children[child.index].firstChild; if (spanText == null) { return; } if (typeof spanText === "undefined") { return; } var purIndices = lines[i].id.match(/purt-tr-([0-9]+)/); if (purIndices.length != 2) { return; } var purIndex = parseInt(purIndices[1]); var thePUR = WMEURMPT.PURList[purIndex]; if (thePUR.data[child.att] == null) { return; } if (child.att == "categories") { var categories = ""; for (var n = 0; n < WMEURMPT.PURList[purIndex].data.categories.length; n++) { categories += WMEURMPT.getPURCategoriesFromCategories(WMEURMPT.PURList[purIndex].data.categories[n]) + " "; } if (categories.length <= child.maxl) { return; } if (typeof thePUR.data.categoriesOffset === "undefined") { thePUR.data.categoriesOffset = -10; } var pos = thePUR.data.categoriesOffset; if (thePUR.data.categoriesOffset < 0) { pos = 0; } var text = categories; var remaining = categories.length - pos; if (remaining < 10) { spanText.innerHTML = WMEURMPT.escapeHtml(text.substr(0, child.maxl)); thePUR.data.categoriesOffset = -10; } else { if (remaining < child.maxl) { thePUR.data.categoriesOffset++; } else { if (thePUR.data.categoriesOffset > 0) { spanText.innerHTML = WMEURMPT.escapeHtml(text.substr(thePUR.data.categoriesOffset + 1, child.maxl)); } thePUR.data.categoriesOffset++; } } } if (child.att == "name") { if (thePUR.data[child.att].length <= child.maxl) { return; } if (typeof thePUR.data[child.att + "Offset"] === "undefined") { thePUR.data[child.att + "Offset"] = -10; } var pos = thePUR.data[child.att + "Offset"]; if (thePUR.data[child.att + "Offset"] < 0) { pos = 0; } var text = thePUR.data[child.att]; var remaining = thePUR.data[child.att].length - pos; if (remaining < 10) { spanText.innerHTML = WMEURMPT.escapeHtml(text.substr(0, child.maxl)); thePUR.data[child.att + "Offset"] = -10; } else { if (remaining < child.maxl) { thePUR.data[child.att + "Offset"]++; } else { if (thePUR.data[child.att + "Offset"] > 0) { spanText.innerHTML = WMEURMPT.escapeHtml(text.substr(thePUR.data[child.att + "Offset"] + 1, child.maxl)); } thePUR.data[child.att + "Offset"]++; } } } }); } } } window.setTimeout(WMEURMPT.updateLongTextCrop, 150); }; WMEURMPT.targetMapToUR = function(lon, lat, URId) { WMEURMPT.log("Target map to UR: " + URId); WMEURMPT.selectedURID = URId; WMEURMPT.updateFlashingURs(); var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(parseFloat(lon), parseFloat(lat)); WMEURMPT.wazeMap.setCenter(xy); URId = parseInt(URId); WMEURMPT.wazeMap.updateRequestLayer.setVisibility(true); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectURById, [{URId:URId, attempts:0}]), 250); }; WMEURMPT.targetMapToMP = function(lon, lat, MPId) { WMEURMPT.log("Target map to MP: " + MPId); WMEURMPT.selectedMPID = MPId; WMEURMPT.updateFlashingMPs(); var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(lon, lat); WMEURMPT.wazeMap.setCenter(xy); WMEURMPT.wazeMap.problemLayer.setVisibility(true); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectMPById, [{MPId:MPId, attempts:0}]), 250); }; WMEURMPT.targetMapToMC = function(lon, lat, MCId) { WMEURMPT.log("Target map to MC: " + MCId); WMEURMPT.selectedMCID = MCId; WMEURMPT.updateFlashingMCs(); var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(lon, lat); WMEURMPT.wazeMap.setCenter(xy); WMEURMPT.wazeMap.getLayerByUniqueName("mapComments").setVisibility(true); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectMCById, [{MCId:MCId, attempts:0}]), 250); }; WMEURMPT.targetMapToPUR = function(lon, lat, PURId) { WMEURMPT.log("Target map to PUR: " + PURId); WMEURMPT.selectedPURID = PURId; WMEURMPT.updateFlashingPURs(); var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(lon, lat); WMEURMPT.wazeMap.setCenter(xy); WMEURMPT.wazeMap.getLayerByUniqueName("place_updates").setVisibility(true); WMEURMPT.wazeMap.getLayerByUniqueName("venues").setVisibility(true); WMEURMPT.wazeMap.getLayerByUniqueName("PARKING_PLACE_UPDATES").setVisibility(true); WMEURMPT.wazeMap.getLayerByUniqueName("RESIDENTIAL_PLACE_UPDATES").setVisibility(true); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectPURById, [{PURId:PURId, attempts:0}]), 250); }; WMEURMPT.selectURById = function(URId) { if (URId.attempts > 10) { WMEURMPT.log("Can't select UR " + URId.URId); return; } if (URId.attempts == 0) { if (WMEURMPT.wazeMap.panelRegion.hasOwnProperty("currentView")) { WMEURMPT.wazeMap.panelRegion.currentView.destroy(); } } WMEURMPT.wazeModel.updateRequestSessions.getAsync([URId.URId]); var session = WMEURMPT.wazeModel.updateRequestSessions.objects[URId.URId]; var ur = WMEURMPT.wazeModel.mapUpdateRequests.getObjectById(URId.URId); if (ur != null && session != null) { WMEURMPT.logDebug("Select UR by ID: " + URId.URId); if (WMEURMPT.wazeMap.updateRequestLayer.featureMarkers.hasOwnProperty(URId.URId)) { WMEURMPT.wazeMap.updateRequestLayer.featureMarkers[URId.URId].marker.icon.imageDiv.click(); var htmlSelectedUR = document.getElementsByClassName("selected")[0]; var htmlSelectedURID = parseInt(htmlSelectedUR.getAttribute("data-id")); WMEURMPT.logDebug("selectURById htmlSelectedURID: ", htmlSelectedURID); if (URId.URId != htmlSelectedURID) { WMEURMPT.log("URs " + URId.URId + " & " + htmlSelectedURID + " Stacked !: "); var offset = 100000; var htmlSelectedURAtt = WMEURMPT.wazeModel.mapUpdateRequests.objects[htmlSelectedURID].attributes; if (htmlSelectedURAtt.geometry.oriX === undefined) { WMEURMPT.stackedUR.id = htmlSelectedURID; WMEURMPT.stackedUR.oriX = htmlSelectedURAtt.geometry.x; WMEURMPT.stackedUR.oriY = htmlSelectedURAtt.geometry.y; WMEURMPT.stackedURList.push(WMEURMPT.stackedUR); htmlSelectedURAtt.geometry.oriX = htmlSelectedURAtt.geometry.x; htmlSelectedURAtt.geometry.x += offset; htmlSelectedURAtt.geometry.oriY = htmlSelectedURAtt.geometry.y; htmlSelectedURAtt.geometry.y += offset; offset += 1000; } if (WMEURMPT.wazeMap.panelRegion.hasOwnProperty("currentView")) { WMEURMPT.wazeMap.panelRegion.currentView.destroy(); } URId.attempts++; WMEURMPT.log("Can not select UR " + URId.URId + ". Trying again " + URId.attempts + "/10..."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectURById, [URId]), 100); return; } WMEURMPT.URVisited(URId.URId); WMEURMPT.currentURID = URId.URId; WMEURMPT.setupFollowAndSendListner(); window.setTimeout(WMEURMPT.openConversationPannel, 100); WMEURMPT.log("UR selected: " + WMEURMPT.currentURID); window.setTimeout(WMEURMPT.restackUR, 250); } if (!WMEURMPT.isAutoScan) { var theUR = WMEURMPT.getURFromId(URId.URId); theUR.refreshFromWMEData(true); WMEURMPT.updateIHMFromURList(); } else { WMEURMPT.newDataAvailableStarts(); } return; } URId.attempts++; WMEURMPT.log("Can not select UR " + URId.URId + ". Trying again " + URId.attempts + "/10..."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectURById, [URId]), 100); }; WMEURMPT.selectMPById = function(MPId) { if (MPId.attempts > 10) { WMEURMPT.log("Can't select MP " + MPId.MPId); return; } if (MPId.attempts == 0) { if (WMEURMPT.wazeMap.panelRegion.hasOwnProperty("currentView")) { WMEURMPT.wazeMap.panelRegion.currentView.destroy(); } } var mp = WMEURMPT.wazeModel.problems.getObjectById(MPId.MPId); var tp = null; WMEURMPT.logDebug("mp :", mp); if (mp != null) { if (WMEURMPT.wazeMap.problemLayer.featureMarkers.hasOwnProperty(MPId.MPId)) { WMEURMPT.wazeMap.problemLayer.featureMarkers[MPId.MPId].marker.icon.imageDiv.click(); } } if (mp != null) { WMEURMPT.MPVisited(MPId.MPId); WMEURMPT.currentMPID = MPId.MPId; WMEURMPT.newDataAvailableStarts(); return; } MPId.attempts++; WMEURMPT.log("Can not select MP " + MPId.MPId + ". Trying again " + MPId.attempts + "/10..."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectMPById, [MPId]), 100); }; WMEURMPT.selectMCById = function(MCId) { if (MCId.attempts > 10) { WMEURMPT.log("Can't select MC " + MCId.MCId); return; } if (MCId.attempts == 0) { if (WMEURMPT.wazeMap.panelRegion.hasOwnProperty("currentView")) { WMEURMPT.wazeMap.panelRegion.currentView.destroy(); } } var mc = WMEURMPT.wazeModel.mapComments.getObjectById(MCId.MCId); WMEURMPT.logDebug("mc :", mc); if (mc != null) { WMEURMPT.MCVisited(MCId.MCId); WMEURMPT.currentMCID = MCId.MCId; WMEURMPT.newDataAvailableStarts(); W.selectionManager.setSelectedModels([WMEURMPT.wazeModel.mapComments.getObjectById(MCId.MCId)]); return; } MCId.attempts++; WMEURMPT.log("Can not select MC " + MCId.MCId + ". Trying again " + MCId.attempts + "/10..."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectMCById, [MCId]), 100); }; WMEURMPT.selectPURById = function(PURId) { if (PURId.attempts > 10) { WMEURMPT.log("Can't select PUR " + PURId.PURId); return; } if (PURId.attempts == 0) { if (WMEURMPT.wazeMap.panelRegion.hasOwnProperty("currentView")) { WMEURMPT.wazeMap.panelRegion.currentView.destroy(); } } var pur = WMEURMPT.wazeModel.venues.getObjectById(PURId.PURId); WMEURMPT.logDebug("pur :", pur); if (pur != null) { WMEURMPT.PURVisited(PURId.PURId); WMEURMPT.currentPURID = PURId.PURId; WMEURMPT.newDataAvailableStarts(); W.selectionManager.setSelectedModels([WMEURMPT.wazeModel.venues.getObjectById(PURId.PURId)]); return; } PURId.attempts++; WMEURMPT.log("Can not select PUR " + PURId.PURId + ". Trying again " + PURId.attempts + "/10..."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.selectPURById, [PURId]), 100); }; WMEURMPT.newDataAvailableStarts = function() { if (WMEURMPT.isScanningWME) { return; } if (!WMEURMPT.isAutoScan) { var urID = WMEURMPT.getSelectedUR(); WMEURMPT.log("scan only selected: UR: " + urID); if (urID != null) { var theUR = WMEURMPT.getURFromId(urID); if (theUR != null) { theUR.refreshFromWMEData(true); WMEURMPT.updateIHMFromURList(); } } var mpID = WMEURMPT.getSelectedProblem(); WMEURMPT.log("scan only selected: MP: " + mpID); if (mpID != null) { var theMP = WMEURMPT.getMPFromId(mpID); if (theMP != null) { theMP.refreshFromWMEData(); WMEURMPT.updateIHMFromMPList(); } } var mcID = WMEURMPT.getSelectedMC(); WMEURMPT.log("scan only selected: MC: " + mcID); if (mcID != null && typeof mcID == "string") { var theMC = WMEURMPT.getMCFromId(mcID); if (theMC != null) { theMC.refreshFromWMEData(); WMEURMPT.updateIHMFromMCList(); } else { theMC = WMEURMPT.getNewMC(mcID); } } var purID = WMEURMPT.getSelectedPUR(); WMEURMPT.log("scan only selected: PUR: " + purID); if (purID != null) { var thePUR = WMEURMPT.getPURFromId(purID); if (thePUR != null) { thePUR.refreshFromWMEData(); } } return; } WMEURMPT.isScanningWME = true; WMEURMPT.newDataAvailable(0); }; WMEURMPT.newDataAvailable = function(i) { try { var URs = WMEURMPT.wazeModel.mapUpdateRequests.getObjectArray(); var MPs = WMEURMPT.wazeModel.problems.getObjectArray(); var MCs = WMEURMPT.wazeModel.mapComments.getObjectArray(); var POIs = WMEURMPT.wazeModel.venues.getObjectArray(); var PURs = []; for (var n = 0; n < POIs.length; n++) { if (POIs[n].attributes.hasOwnProperty("venueUpdateRequests") && POIs[n].attributes.venueUpdateRequests.length >> 0) { PURs.push(POIs[n].attributes); } } var urcount = URs.length; var mpcount = MPs.length; var mccount = MCs.length; var purcount = PURs.length; var count = urcount + mpcount + mccount + purcount; WMEURMPT.log("new data available: i/count:" + i + "/" + count); var pb = new WMEURMPT.ProgressBar(WMEURMPT.getId("urt-progressBar")); if (i == 0) { WMEURMPT.log("Starting WME data scan..."); pb.update(0); pb.show(); WMEURMPT.showPBInfo(true); WMEURMPT.info("Scanning..."); } if (i >= count) { WMEURMPT.log("WME data scan ended"); WMEURMPT.updateRequestSessions(); WMEURMPT.isScanningWME = false; WMEURMPT.showPBInfo(false); pb.hide(); pb.update(0); WMEURMPT.info(); WMEURMPT.updateIHMFromURList(); WMEURMPT.updateIHMFromMPList(); WMEURMPT.updateIHMFromMCList(); WMEURMPT.updateIHMFromPURList(); WMEURMPT.saveURMPLists(); return; } pb.update(Math.round(i / count * 100)); if (i < urcount) { var index = i; var URId = URs[index].attributes.id; var theUR = WMEURMPT.getURFromId(URId); if (WMEURMPT.ul < WMEURMPT.rl4cp && URs[index].attributes.open == false) { if (theUR != null) { WMEURMPT.URList.splice(WMEURMPT.URMap[URId], 1); WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } } else { WMEURMPT.logDebug("scan WME: the ur: ", theUR); WMEURMPT.logDebug("scan WME: the ur index: ", URs[index]); var URxy = new OpenLayers.Geometry.Point(URs[index].geometry.x, URs[index].geometry.y); var URLonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(URs[index].geometry.x, URs[index].geometry.y); if (WMEURMPT.inScreenUpdatableArea(URxy) || WMEURMPT.isInAreas(URLonlat)) { WMEURMPT.logDebug("scan WME: in screen"); if (theUR == null) { theUR = new WMEURMPT.URT_UR(URs[index].attributes.id, URLonlat.lon, URLonlat.lat); if (theUR.refreshFromWMEData(false)) { WMEURMPT.logDebug("scan WME: added"); WMEURMPT.URList.push(theUR); WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } else { WMEURMPT.logDebug("scan WME: NOT added"); } } else { theUR.refreshFromWMEData(false); } } else { if (theUR != null) { WMEURMPT.URList.splice(WMEURMPT.URMap[URId], 1); WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } } } } else { if (i - urcount < mpcount) { var index = i - urcount; var MPId = MPs[index].attributes.id; var theMP = WMEURMPT.getMPFromId(MPId); if (WMEURMPT.ul < WMEURMPT.rl4cp && MPs[index].attributes.open == false) { if (theMP != null) { WMEURMPT.MPList.splice(WMEURMPT.MPMap[MPId], 1); WMEURMPT.MPMap = WMEURMPT.listToObject(WMEURMPT.MPList); } } else { var MPxy = new OpenLayers.Geometry.Point(MPs[index].geometry.x, MPs[index].geometry.y); var MPLonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(MPs[index].geometry.x, MPs[index].geometry.y); if (WMEURMPT.inScreenUpdatableArea(MPxy) || WMEURMPT.isInAreas(MPLonlat)) { if (theMP == null) { theMP = new WMEURMPT.URT_MP(MPs[index].attributes.id, MPLonlat.lon, MPLonlat.lat); if (theMP.refreshFromWMEData()) { WMEURMPT.MPList.push(theMP); WMEURMPT.MPMap = WMEURMPT.listToObject(WMEURMPT.MPList); } } else { theMP.refreshFromWMEData(); } } else { if (theMP != null) { WMEURMPT.MPList.splice(WMEURMPT.MPMap[MPId], 1); WMEURMPT.MPMap = WMEURMPT.listToObject(WMEURMPT.MPList); } } } } else { if (i - urcount - mpcount < mccount) { var index = i - urcount - mpcount; var MCId = MCs[index].attributes.id; var theMC = WMEURMPT.getMCFromId(MCId); var MCxy = new OpenLayers.Geometry.Point(MCs[index].geometry.getCentroid().x, MCs[index].geometry.getCentroid().y); var MCLonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(MCs[index].geometry.getCentroid().x, MCs[index].geometry.getCentroid().y); if (WMEURMPT.inScreenUpdatableArea(MCxy) || WMEURMPT.isInAreas(MCLonlat)) { WMEURMPT.log("in area"); if (theMC == null) { theMC = new WMEURMPT.URT_MC(MCs[index].attributes.id, MCLonlat.lon, MCLonlat.lat); if (theMC.refreshFromWMEData()) { WMEURMPT.MCList.push(theMC); WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MPList); } } else { theMC.refreshFromWMEData(); } } else { WMEURMPT.log("not in area"); if (theMC != null) { WMEURMPT.MCList.splice(WMEURMPT.MCMap[MCId], 1); WMEURMPT.MCMap = WMEURMPT.listToObject(MCList); } } } else { var index = i - urcount - mpcount - mccount; var PURId = PURs[index].id; var thePUR = WMEURMPT.getPURFromId(PURId); var PURxy = new OpenLayers.Geometry.Point(PURs[index].geometry.getCentroid().x, PURs[index].geometry.getCentroid().y); var PURLonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(PURs[index].geometry.getCentroid().x, PURs[index].geometry.getCentroid().y); if (WMEURMPT.inScreenUpdatableArea(PURxy) || WMEURMPT.isInAreas(PURLonlat)) { WMEURMPT.log("in area"); if (thePUR == null) { thePUR = new WMEURMPT.URT_PUR(PURs[index].id, PURLonlat.lon, PURLonlat.lat); if (thePUR.refreshFromWMEData()) { WMEURMPT.PURList.push(thePUR); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } } else { thePUR.refreshFromWMEData(); } } else { WMEURMPT.log("not in area"); if (thePUR != null) { WMEURMPT.PURList.splice(WMEURMPT.PURMap[PURId], 1); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } } } } } i++; window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.newDataAvailable, [i]), 0); } catch (err) { WMEURMPT.log("Warning during auto scan probably due to a map move or a map zoom changed before end of scan: ", err); WMEURMPT.isScanningWME = false; WMEURMPT.showPBInfo(false); pb.hide(); pb.update(0); WMEURMPT.info(); window.setTimeout(WMEURMPT.newDataAvailableStarts, 1000); } }; WMEURMPT.setupListener = function() { var urs = WMEURMPT.getElementsByClassName("map-problem"); for (var i = 0; i < urs.length; i++) { var ur = urs[i]; ur.addEventListener("click", WMEURMPT.clickUR, false); } var purs = WMEURMPT.getElementsByClassName("place-update"); for (var i = 0; i < purs.length; i++) { var pur = purs[i]; pur.addEventListener("click", WMEURMPT.clickPUR, false); } }; WMEURMPT.clickUR = function() { if (typeof this.tagName !== "undefined" && this.tagName == "DIV") { if (this.className.indexOf("user-generated") == -1 && this.className.indexOf("has-comments") == -1) { WMEURMPT.currentMPID = this.getAttribute("data-id"); WMEURMPT.selectedMPID = WMEURMPT.currentMPID; WMEURMPT.MPVisited(WMEURMPT.currentMPID); WMEURMPT.log("MP clicked: " + WMEURMPT.currentMPID); var mp = WMEURMPT.getMPFromId(WMEURMPT.currentMPID); if (mp) { mp.refreshFromWMEData(); } WMEURMPT.updateIHMFromMPList(); } else { WMEURMPT.currentURID = parseInt(this.getAttribute("data-id")); WMEURMPT.URVisited(WMEURMPT.currentURID); WMEURMPT.logDebug("current UR ID: " + WMEURMPT.currentURID); WMEURMPT.setupFollowAndSendListner(); WMEURMPT.selectedURID = WMEURMPT.currentURID; WMEURMPT.log("UR clicked: " + WMEURMPT.currentURID); var ur = WMEURMPT.getURFromId(WMEURMPT.currentURID); WMEURMPT.logDebug("clickUR ur: ", ur); if (ur) { ur.refreshFromWMEData(); } else { if (ur == null) { var theUR = WMEURMPT.wazeModel.mapUpdateRequests.getObjectById(WMEURMPT.currentURID); WMEURMPT.logDebug("clickUR - theUR: ", theUR); if (theUR.geometry.hasOwnProperty("realX") && theUR.geometry.hasOwnProperty("realY")) { var URLonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(theUR.geometry.realX, theUR.geometry.realY); } else { var URLonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(theUR.geometry.x, theUR.geometry.y); } WMEURMPT.logDebug("clickUR - lonlat: ", URLonlat); ur = new WMEURMPT.URT_UR(theUR.attributes.id, URLonlat.lon, URLonlat.lat); WMEURMPT.logDebug("clickUR - ur: ", ur); if (ur.refreshFromWMEData()) { WMEURMPT.URList.push(ur); WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } } } WMEURMPT.updateIHMFromURList(); } } }; WMEURMPT.clickPUR = function() { WMEURMPT.logDebug("PUR clicked: ", this); WMEURMPT.currentPURID = this.getAttribute("data-id"); WMEURMPT.selectedPURID = WMEURMPT.currentPURID; WMEURMPT.PURVisited(WMEURMPT.currentPURID); WMEURMPT.log("PUR clicked: " + WMEURMPT.currentPURID, this); var pur = WMEURMPT.getPURFromId(WMEURMPT.currentPURID); if (pur) { pur.refreshFromWMEData(); } else { if (pur == null) { var thePUR = WMEURMPT.wazeModel.venues.objects[WMEURMPT.currentPURID]; var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(thePUR.attributes.geometry.getCentroid().x, thePUR.attributes.geometry.getCentroid().y); WMEURMPT.logDebug("clickPUR - lonlat: ", lonlat); pur = new WMEURMPT.URT_PUR(thePUR.attributes.id, lonlat.lon, lonlat.lat); WMEURMPT.logDebug("clickPUR - pur: ", pur); if (pur.refreshFromWMEData()) { WMEURMPT.PURList.push(pur); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } } } WMEURMPT.updateIHMFromPURList(); }; WMEURMPT.getNewMC = function(mcID) { WMEURMPT.currentMCID = mcID; WMEURMPT.selectedMCID = WMEURMPT.currentMCID; WMEURMPT.MCVisited(WMEURMPT.currentMCID); WMEURMPT.log("New MC: " + WMEURMPT.currentMCID); var mc = WMEURMPT.getMCFromId(WMEURMPT.currentMCID); if (mc) { mc.refreshFromWMEData(); } else { if (mc == null) { var theMC = WMEURMPT.wazeModel.mapComments.objects[WMEURMPT.currentMCID]; var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(theMC.attributes.geometry.getCentroid().x, theMC.attributes.geometry.getCentroid().y); mc = new WMEURMPT.URT_MC(theMC.attributes.id, lonlat.lon, lonlat.lat); if (mc.refreshFromWMEData()) { WMEURMPT.MCList.push(mc); WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MCList); } } } WMEURMPT.updateIHMFromMCList(); }; WMEURMPT.setupFollowAndSendListner = function() { var followPatched = false; var sendPatched = false; var btnFollow = document.getElementsByName("follow")[0]; if (btnFollow != null) { if (typeof btnFollow.urt_listener === "undefined") { btnFollow.addEventListener("change", WMEURMPT.clickFollowUR, false); btnFollow.urt_listener = true; followPatched = true; } } var commentForm = WMEURMPT.getElementsByClassName("new-comment-form")[0]; var btnsSend = WMEURMPT.getElementsByClassName("send-button", commentForm); if (btnsSend.length == 1) { var btnSend = btnsSend[0]; if (typeof btnSend.urt_listener === "undefined") { btnSend.addEventListener("click", function() { window.setTimeout(WMEURMPT.conversationSent, 400); }, false); btnSend.urt_listener = true; sendPatched = true; } } if (!followPatched || !sendPatched) { window.setTimeout(WMEURMPT.setupFollowAndSendListner, 200); } }; WMEURMPT.conversationSent = function() { var ur = WMEURMPT.getURFromId(WMEURMPT.currentURID); if (ur != null && WMEURMPT.wazeMap.panelRegion.currentView.conversationView !== undefined) { if (WMEURMPT.wazeMap.panelRegion.currentView.conversationView && ur.data.session.comments.length == WMEURMPT.wazeMap.panelRegion.currentView.conversationView.viewModel.attributes.commentCount) { WMEURMPT.log("Comment is updated..."); } else { if (WMEURMPT.wazeMap.panelRegion.currentView.conversationView) { WMEURMPT.log("update Comment and refresh..."); ur.refreshFromWMEData(true); ur.lastVisitCommentsCount = ur.data.session.comments.length; WMEURMPT.updateIHMFromURList(); } } } }; WMEURMPT.clickFollowUR = function() { WMEURMPT.logDebug("FOLLOW or UNFOLLOW. That is the question"); if (!this.checked) { WMEURMPT.log("Now: unfollow " + WMEURMPT.currentURID); var ur = WMEURMPT.getURFromId(WMEURMPT.currentURID); if (ur != null) { ur.data.session.isFollowing = false; WMEURMPT.updateIHMFromURList(); } } else { WMEURMPT.log("Now: follow " + WMEURMPT.currentURID); var ur = WMEURMPT.getURFromId(WMEURMPT.currentURID); if (ur != null) { ur.data.session.isFollowing = true; WMEURMPT.URBlackListed(WMEURMPT.currentURID, false); WMEURMPT.URVisited(WMEURMPT.currentURID); WMEURMPT.updateIHMFromURList(); } } }; WMEURMPT.openConversationPannel = function() { var btnConversations = WMEURMPT.getElementsByClassName("btn btn-default toggle-comment-view"); if (btnConversations.length != 1) { window.setTimeout(WMEURMPT.openConversationPannel, 100); return; } var btnConversation = btnConversations[0]; if (btnConversation.className == "btn btn-default toggle-comment-view comment-view-shown") { return; } btnConversation.click(); }; WMEURMPT.saveStarted = function() { WMEURMPT.visitedURBeforeActionsSaved.length = 0; WMEURMPT.visitedMPBeforeActionsSaved.length = 0; WMEURMPT.visitedTPBeforeActionsSaved.length = 0; WMEURMPT.visitedPURBeforeActionsSaved.length = 0; var actions = WMEURMPT.wazeModel.actionManager.getActions(); for (var i = 0; i < actions.length; i++) { if (actions[i].CLASS_NAME == "Waze.Action.UpdateRequest") { WMEURMPT.visitedURBeforeActionsSaved.push(actions[i].request.attributes.id); } if (actions[i].CLASS_NAME == "Waze.Action.UpdateProblem") { if (actions[i].problem.type == "mapProblem") { WMEURMPT.visitedMPBeforeActionsSaved.push(actions[i].problem.attributes.id); } if (actions[i].problem.type != "mapProblem" && actions[i].problem.type != "turnProblem") { WMEURMPT.log("Error while detecting update problem operation on: ", WMEURMPT.wazeModel.actionManager.actions[i]); } } } }; WMEURMPT.saveEnded = function() { for (var i = 0; i < WMEURMPT.visitedURBeforeActionsSaved.length; i++) { WMEURMPT.log("save UR: " + WMEURMPT.visitedURBeforeActionsSaved[i]); var ur = WMEURMPT.getURFromId(WMEURMPT.visitedURBeforeActionsSaved[i]); if (ur != null) { WMEURMPT.logDebug("save UR Action: id=" + WMEURMPT.visitedURBeforeActionsSaved[i] + " found"); var refreshStatus = ur.refreshFromWMEData(true); if (!refreshStatus) { refreshStatus = ur.refreshFromServer(); if (refreshStatus == true || refreshStatus == null) { WMEURMPT.logDebug("save UR Action: id=" + WMEURMPT.visitedURBeforeActionsSaved[i] + " refresh ok: " + refreshStatus); ur.blackListed = false; ur.alreadyVisited = true; } else { WMEURMPT.logDebug("save UR Action: id=" + WMEURMPT.visitedURBeforeActionsSaved[i] + " No change found"); } } } else { WMEURMPT.logDebug("save UR Action: id=" + WMEURMPT.visitedURBeforeActionsSaved[i] + " not found"); } } for (var i = 0; i < WMEURMPT.visitedMPBeforeActionsSaved.length; i++) { WMEURMPT.log("save MP: " + WMEURMPT.visitedMPBeforeActionsSaved[i]); var mp = WMEURMPT.getMPFromId(WMEURMPT.visitedMPBeforeActionsSaved[i]); if (mp != null) { WMEURMPT.logDebug("save MP Action: id=" + WMEURMPT.visitedMPBeforeActionsSaved[i] + " found"); var refreshStatus = mp.refreshFromWMEData(); if (!refreshStatus) { refreshStatus = mp.refreshFromServer(); if (refreshStatus == true || refreshStatus == null) { WMEURMPT.logDebug("save MP Action: id=" + WMEURMPT.visitedMPBeforeActionsSaved[i] + " refresh ok: " + refreshStatus); mp.blackListed = false; mp.alreadyVisited = true; } else { WMEURMPT.logDebug("save MP Action: id=" + WMEURMPT.visitedMPBeforeActionsSaved[i] + " No change found"); } } } else { WMEURMPT.logDebug("save MP Action: id=" + WMEURMPT.visitedMPBeforeActionsSaved[i] + " not found"); } } for (var i = 0; i < WMEURMPT.visitedTPBeforeActionsSaved.length; i++) { WMEURMPT.log("save MP (TP): " + WMEURMPT.visitedTPBeforeActionsSaved[i]); var mp = WMEURMPT.getMPFromId(WMEURMPT.visitedTPBeforeActionsSaved[i]); if (mp != null) { WMEURMPT.logDebug("save TP Action: id=" + WMEURMPT.visitedTPBeforeActionsSaved[i] + " found"); var refreshStatus = mp.refreshFromWMEData(); if (!refreshStatus) { refreshStatus = mp.refreshFromServer(); if (refreshStatus == true || refreshStatus == null) { WMEURMPT.logDebug("save TP Action: id=" + WMEURMPT.visitedTPBeforeActionsSaved[i] + " refresh ok: " + refreshStatus); mp.blackListed = false; mp.alreadyVisited = true; } else { WMEURMPT.logDebug("save TP Action: id=" + WMEURMPT.visitedTPBeforeActionsSaved[i] + " No change found"); } } } else { WMEURMPT.logDebug("save TP Action: id=" + WMEURMPT.visitedTPBeforeActionsSaved[i] + " not found"); } } WMEURMPT.updateIHMFromURList(); WMEURMPT.updateIHMFromMPList(); }; WMEURMPT.newActionAdded = function(lastAction) { WMEURMPT.logDebug("Action added:", lastAction); lastAction = lastAction.action; WMEURMPT.logDebug("Action added lastAction :", lastAction); if (lastAction.hasOwnProperty("object") && lastAction.object.hasOwnProperty("type") && lastAction.object.type == "mapProblem") { var mp = WMEURMPT.getMPFromId(lastAction.attributes.id); if (mp == null) { return; } mp.refreshFromWMEData(); if (mp.data.open == true) { mp.data.resolvedOn = null; mp.data.resolvedBy = null; mp.data.resolvedByName = null; } else { var now = new Date; mp.data.resolvedOn = now.getTime(); mp.data.resolvedBy = WMEURMPT.me.id; mp.data.resolvedByName = WMEURMPT.me.userName; } WMEURMPT.updateIHMFromMPList(); } if (lastAction.hasOwnProperty("object") && lastAction.object.hasOwnProperty("type") && lastAction.object.type == "mapUpdateRequest") { var ur = WMEURMPT.getURFromId(lastAction.attributes.id); if (ur == null) { return; } ur.refreshFromWMEData(true); if (ur.data.open == true) { ur.data.resolvedOn = null; ur.data.resolvedBy = null; ur.data.resolvedByName = null; } else { var now = new Date; ur.data.resolvedOn = now.getTime(); ur.data.resolvedBy = WMEURMPT.me.id; ur.data.resolvedByName = WMEURMPT.me.userName; } WMEURMPT.updateIHMFromURList(); } if (lastAction.hasOwnProperty("request") && lastAction.request.attributes.hasOwnProperty("approved")) { var pur = WMEURMPT.getPURFromId(lastAction.venue.attributes.id); if (pur) { pur.refreshFromWMEData(); } if (pur === null) { var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(lastAction.venue.attributes.geometry.getCentroid().x, lastAction.venue.attributes.geometry.getCentroid().y); pur = new WMEURMPT.URT_PUR(lastAction.venue.attributes.id, lonlat.lon, lonlat.lat); if (pur.refreshFromWMEData()) { WMEURMPT.PURList.push(pur); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } } WMEURMPT.updateIHMFromPURList(); } if (lastAction.hasOwnProperty("object") && lastAction.object.hasOwnProperty("type") && lastAction.object.type == "mapComment") { if (typeof lastAction.object.attributes.id == "string") { var mc = WMEURMPT.getMCFromId(lastAction.object.attributes.id); if (mc) { mc.refreshFromWMEData(); } if (mc === null) { var xy = new OpenLayers.Geometry.Point(lastAction.object.attributes.geometry.bounds.getCenterLonLat().lon, lastAction.object.attributes.geometry.bounds.getCenterLonLat().lat); var lonlat = OpenLayers.Layer.SphericalMercator.inverseMercator(xy.x, xy.y); mc = new WMEURMPT.URT_MC(lastAction.object.attributes.id, lonlat.lon, lonlat.lat); if (mc.refreshFromWMEData()) { WMEURMPT.MCList.push(mc); WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MCList); } } WMEURMPT.updateIHMFromMCList(); } } }; WMEURMPT.getMPs = function(bounds, filter) { var url = "https://" + document.location.host + WMEURMPT.wazeConfigApiFeatures + "?language=en" + (WMEURMPT.scanUR ? "&mapUpdateRequestFilter=3%2C0" : "") + (WMEURMPT.scanMP ? "&problemFilter=3%2C3" : "") + "&mapComments=" + (WMEURMPT.scanMC ? "true" : "false") + "&venueLevel=3&venueFilter=" + (WMEURMPT.scanPUR ? "3%2C3%2C3" : "0%2C0%2C0") + "&editableAreas=true&bbox=" + bounds.left + "%2C" + bounds.bottom + "%2C" + bounds.right + "%2C" + bounds.top; var xhr3_object = null; if (XMLHttpRequest) { xhr3_object = new XMLHttpRequest; } else { if (ActiveXObject) { xhr3_object = new ActiveXObject("Microsoft.XMLHTTP"); } } var MPs = null; xhr3_object.open("GET", url, false); xhr3_object.send(null); if (xhr3_object.status == 200) { var r = xhr3_object.responseText; try { MPs = JSON.parse(r); } catch (e) { WMEURMPT.log("Error: can't read server response: ", e); WMEURMPT.log("Response from server: ", r); WMEURMPT.log("Query: ", url); MPs = null; } } if (MPs == null) { return null; } if (!MPs.hasOwnProperty("mapUpdateRequests") && !MPs.hasOwnProperty("problems") && !MPs.hasOwnProperty("mapComments") && !MPs.hasOwnProperty("venues")) { return null; } if (MPs.hasOwnProperty("mapUpdateRequests") && MPs.mapUpdateRequests.objects.length == 500) { return {error:1, logMessage:{obj:"mapUpdateRequests", length:500}}; } if (MPs.hasOwnProperty("problems") && MPs.problems.objects.length == 500) { return {error:1, logMessage:{obj:"problems", length:500}}; } if (MPs.hasOwnProperty("mapComments") && MPs.mapComments.objects.length == 500) { return {error:1, logMessage:{obj:"mapComments", length:500}}; } if (MPs.hasOwnProperty("venues") && MPs.venues.objects.length >= 1200) { return {error:1, logMessage:{obj:"venues", length:1200}}; } if (filter != null) { var filterArea = []; if (filter != null && (filter.type == "editableArea" || filter.type == "driveArea" || filter.type == "managedArea")) { for (var a = 0; a < MPs.userAreas.objects.length; a++) { filterArea = filterArea.concat(WMEURMPT.wazeMapAreaToOLPolygons(MPs.userAreas.objects[a].geometry)); } } if (filter != null && filter.type == "country") { for (var c = 0; c < WMEURMPT.areaList.country.length; c++) { if (WMEURMPT.areaList.country[c].name == filter.name) { filterArea = WMEURMPT.areaList.country[c].geometryOL.geometry.components; break; } } } if (filter != null && filter.type == "custom") { for (var c = 0; c < WMEURMPT.areaList.custom.length; c++) { if (WMEURMPT.areaList.custom[c].name == filter.name) { filterArea = WMEURMPT.areaList.custom[c].geometryOL.geometry.components; break; } } } var cmp = 0; if (MPs.hasOwnProperty("problems")) { while (cmp < MPs.problems.objects.length) { var theMP = MPs.problems.objects[cmp]; if (WMEURMPT.ul < WMEURMPT.rl4cp && theMP.open == false) { MPs.problems.objects.splice(cmp, 1); continue; } var lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(theMP.geometry.coordinates[0], theMP.geometry.coordinates[1]); var xy = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); if (filter.type == "country" || filter.type == "custom") { xy = new OpenLayers.Geometry.Point(theMP.geometry.coordinates[0], theMP.geometry.coordinates[1]); } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { MPs.problems.objects.splice(cmp, 1); continue; } cmp++; } } cmp = 0; if (MPs.hasOwnProperty("mapUpdateRequests")) { while (cmp < MPs.mapUpdateRequests.objects.length) { var theUR = MPs.mapUpdateRequests.objects[cmp]; if (WMEURMPT.ul < WMEURMPT.rl4cp && theUR.open == false) { MPs.mapUpdateRequests.objects.splice(cmp, 1); continue; } var lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(theUR.geometry.coordinates[0], theUR.geometry.coordinates[1]); var xy = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); if (filter.type == "country" || filter.type == "custom") { xy = new OpenLayers.Geometry.Point(theUR.geometry.coordinates[0], theUR.geometry.coordinates[1]); } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { MPs.mapUpdateRequests.objects.splice(cmp, 1); continue; } cmp++; } } cmp = 0; if (MPs.hasOwnProperty("mapComments")) { while (cmp < MPs.mapComments.objects.length) { var theMC = MPs.mapComments.objects[cmp]; var lonlat = null; var centroid = null; if (theMC.geometry.type == "Point") { lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(theMC.geometry.coordinates[0], theMC.geometry.coordinates[1]); } else { var olpolys = []; theMC.geometry.coordinates.forEach(function(poly) { var olpts = poly.map(function(e) { return new OpenLayers.Geometry.Point(e[0], e[1]); }); var ollr = new OpenLayers.Geometry.LinearRing(olpts); var olp = new OpenLayers.Geometry.Polygon(ollr); olpolys.push(olp); }); var olmultipoly = new OpenLayers.Geometry.MultiPolygon(olpolys); centroid = olmultipoly.getCentroid(); lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(centroid.x, centroid.y); } var xy = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); if (filter.type == "country" || filter.type == "custom") { if (theMC.geometry.type == "Point") { xy = new OpenLayers.Geometry.Point(theMC.geometry.coordinates[0], theMC.geometry.coordinates[1]); } else { xy = centroid; } } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { MPs.mapComments.objects.splice(cmp, 1); continue; } cmp++; } } cmp = 0; if (MPs.hasOwnProperty("venues")) { while (cmp < MPs.venues.objects.length) { var thePUR = MPs.venues.objects[cmp]; if (!thePUR.hasOwnProperty("venueUpdateRequests")) { MPs.venues.objects.splice(cmp, 1); continue; } if (thePUR.venueUpdateRequests.length == 0) { MPs.venues.objects.splice(cmp, 1); continue; } var lonlat = null; var centroid = null; if (thePUR.geometry.type == "Point") { lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(thePUR.geometry.coordinates[0], thePUR.geometry.coordinates[1]); } else { var olpolys = []; thePUR.geometry.coordinates.forEach(function(poly) { var olpts = poly.map(function(e) { return new OpenLayers.Geometry.Point(e[0], e[1]); }); var ollr = new OpenLayers.Geometry.LinearRing(olpts); var olp = new OpenLayers.Geometry.Polygon(ollr); olpolys.push(olp); }); var olmultipoly = new OpenLayers.Geometry.MultiPolygon(olpolys); centroid = olmultipoly.getCentroid(); lonlat = OpenLayers.Layer.SphericalMercator.forwardMercator(centroid.x, centroid.y); } var xy = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); if (filter.type == "country" || filter.type == "custom") { if (thePUR.geometry.type == "Point") { xy = new OpenLayers.Geometry.Point(thePUR.geometry.coordinates[0], thePUR.geometry.coordinates[1]); } else { xy = centroid; } } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { MPs.venues.objects.splice(cmp, 1); continue; } cmp++; } } MPs.area = filterArea; MPs.filterType = filter.type; MPs.tile = bounds; } if (MPs.hasOwnProperty("mapUpdateRequests")) { var urIds = []; for (var i = 0; i < MPs.mapUpdateRequests.objects.length; i++) { urIds.push(MPs.mapUpdateRequests.objects[i].id); } if (urIds.length != 0) { url = "https://" + document.location.host + WMEURMPT.wazeConfigApiUpdateRequestSessions + "?ids=" + urIds.join(","); if (XMLHttpRequest) { xhr3_object = new XMLHttpRequest; } else { if (ActiveXObject) { xhr3_object = new ActiveXObject("Microsoft.XMLHTTP"); } } var URcomments = null; xhr3_object.open("GET", url, false); xhr3_object.ontimeout = function() { URcomments = null; }; xhr3_object.onerror = function() { URcomments = null; }; xhr3_object.onreadystatechange = function() { if (xhr3_object.readyState == 4) { var r = xhr3_object.responseText; try { URcomments = JSON.parse(r); } catch (e$0) { WMEURMPT.log("Error: can't read server response: ", e$0); WMEURMPT.log("Response from server: ", r); WMEURMPT.log("Query: ", url); URcomments = null; } } else { URcomments = null; } }; xhr3_object.send(null); WMEURMPT.logDebug("UR comments: ", URcomments); if (URcomments == null) { return null; } for (var i = 0; i < MPs.mapUpdateRequests.objects.length; i++) { var urId = MPs.mapUpdateRequests.objects[i].id; for (var j = 0; j < URcomments.updateRequestSessions.objects.length; j++) { if (urId == URcomments.updateRequestSessions.objects[j].id) { MPs.mapUpdateRequests.objects[i].session = URcomments.updateRequestSessions.objects[j]; MPs.mapUpdateRequests.objects[i].session.users = URcomments.users; break; } } } } } WMEURMPT.logDebug("URs, MPs, MCs, and PURs from server after process: ", MPs); return MPs; }; WMEURMPT.updateURList = function(URs) { if (URs.hasOwnProperty("mapUpdateRequests") == false) { return; } for (var i = 0; i < URs.mapUpdateRequests.objects.length; i++) { var found = true; var ur = WMEURMPT.getURFromId(URs.mapUpdateRequests.objects[i].id); if (ur == null) { ur = new WMEURMPT.URT_UR(URs.mapUpdateRequests.objects[i].id, URs.mapUpdateRequests.objects[i].geometry.coordinates[0], URs.mapUpdateRequests.objects[i].geometry.coordinates[1]); found = false; } ur.data = JSON.parse(JSON.stringify(URs.mapUpdateRequests.objects[i])); ur.updated = true; ur.data.resolvedByName = "Unknown"; for (var u = 0; u < URs.users.objects.length; u++) { if (URs.users.objects[u].id == ur.data.resolvedBy) { ur.data.resolvedByName = URs.users.objects[u].userName; } } for (var c = 0; c < ur.data.session.comments.length; c++) { var userID = ur.data.session.comments[c].userID; var userName = "Unknown"; if (userID == WMEURMPT.me.id) { userName = WMEURMPT.me.userName; if (c == ur.data.session.comments.length - 1) { ur.lastVisitCommentsCount = ur.data.session.comments.length; } } if (userID == -1) { userName = "Reporter"; } else { for (var u = 0; u < ur.data.session.users.objects.length; u++) { if (ur.data.session.users.objects[u].id == userID) { userName = ur.data.session.users.objects[u].userName; break; } } } ur.data.session.comments[c].userName = userName; } ur.clean(); ur.updateDistanceToMapCenter(); if (!found) { ur.lastVisitCommentsCount = 0; ur.alreadyVisited = false; WMEURMPT.URList.push(ur); WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } } }; WMEURMPT.updateMPList = function(MPs) { if (MPs.hasOwnProperty("problems") == false) { return; } WMEURMPT.logDebug("updatelist MPs:", MPs); for (var i = 0; i < MPs.problems.objects.length; i++) { WMEURMPT.logDebug("MP server Object:", MPs.problems.objects[i]); var found = true; var mp = WMEURMPT.getMPFromId(MPs.problems.objects[i].id); if (mp == null) { mp = new WMEURMPT.URT_MP(MPs.problems.objects[i].id, MPs.problems.objects[i].geometry.coordinates[0], MPs.problems.objects[i].geometry.coordinates[1]); mp.alreadyVisited = false; found = false; } mp.updated = true; mp.type = "problem"; mp.data = JSON.parse(JSON.stringify(MPs.problems.objects[i])); mp.data.resolvedByName = "Unknown"; for (var u = 0; u < MPs.users.objects.length; u++) { if (MPs.users.objects[u].id == mp.data.resolvedBy) { mp.data.resolvedByName = MPs.users.objects[u].userName; } } mp.clean(); mp.updateDistanceToMapCenter(); if (!found) { WMEURMPT.MPList.push(mp); WMEURMPT.MPMap = WMEURMPT.listToObject(WMEURMPT.MPList); } } WMEURMPT.logDebug("MPList Updated:", WMEURMPT.MPList); }; WMEURMPT.updateMCList = function(MCs) { if (MCs.hasOwnProperty("mapComments") == false) { return; } for (var i = 0; i < MCs.mapComments.objects.length; i++) { var found = true; var mc = WMEURMPT.getMCFromId(MCs.mapComments.objects[i].id); if (mc == null) { if (MCs.mapComments.objects[i].geometry.type == "Point") { mc = new WMEURMPT.URT_MC(MCs.mapComments.objects[i].id, MCs.mapComments.objects[i].geometry.coordinates[0], MCs.mapComments.objects[i].geometry.coordinates[1]); } else { var olpolys = []; MCs.mapComments.objects[i].geometry.coordinates.forEach(function(poly) { var olpts = poly.map(function(e) { return new OpenLayers.Geometry.Point(e[0], e[1]); }); var ollr = new OpenLayers.Geometry.LinearRing(olpts); var olp = new OpenLayers.Geometry.Polygon(ollr); olpolys.push(olp); }); var olmultipoly = new OpenLayers.Geometry.MultiPolygon(olpolys); var centroid = olmultipoly.getCentroid(); mc = new WMEURMPT.URT_MC(MCs.mapComments.objects[i].id, centroid.x, centroid.y); } found = false; } mc.data = JSON.parse(JSON.stringify(MCs.mapComments.objects[i])); mc.updated = true; mc.data.createdByName = "Unknown"; for (var u in MCs.users.objects) { if (MCs.users.objects[u].id == mc.data.createdBy) { mc.data.createdByName = MCs.users.objects[u].userName; break; } } mc.data.updatedByName = "Unknown"; for (var u in MCs.users.objects) { if (MCs.users.objects[u].id == mc.data.updatedBy) { mc.data.updatedByName = MCs.users.objects[u].userName; break; } } if (mc.data.hasOwnProperty("conversation")) { mc.data.conversation.forEach(function(c, i) { if (c.userID == WMEURMPT.me.id) { c.userName = WMEURMPT.me.userName; if (i == mc.data.conversation.length - 1) { mc.lastVisitCommentsCount = mc.data.conversation.length; } } for (var u in MCs.users.objects) { if (MCs.users.objects[u].id == c.userID) { c.userName = MCs.users.objects[u].userName; break; } } }, this); } mc.clean(); mc.updateDistanceToMapCenter(); if (!found) { mc.lastVisitCommentsCount = 0; mc.alreadyVisited = false; WMEURMPT.MCList.push(mc); WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MCList); } } }; WMEURMPT.updatePURList = function(PURs) { if (PURs.hasOwnProperty("venues") == false) { return; } for (var i = 0; i < PURs.venues.objects.length; i++) { var found = true; var pur = WMEURMPT.getPURFromId(PURs.venues.objects[i].id); if (pur == null) { if (PURs.venues.objects[i].geometry.type == "Point") { pur = new WMEURMPT.URT_PUR(PURs.venues.objects[i].id, PURs.venues.objects[i].geometry.coordinates[0], PURs.venues.objects[i].geometry.coordinates[1]); } else { var olpolys = []; PURs.venues.objects[i].geometry.coordinates.forEach(function(poly) { var olpts = poly.map(function(e) { return new OpenLayers.Geometry.Point(e[0], e[1]); }); var ollr = new OpenLayers.Geometry.LinearRing(olpts); var olp = new OpenLayers.Geometry.Polygon(ollr); olpolys.push(olp); }); var olmultipoly = new OpenLayers.Geometry.MultiPolygon(olpolys); var centroid = olmultipoly.getCentroid(); pur = new WMEURMPT.URT_PUR(PURs.venues.objects[i].id, centroid.x, centroid.y); } found = false; } pur.data = JSON.parse(JSON.stringify(PURs.venues.objects[i])); pur.updated = true; if (pur.data.name === undefined) { pur.data["name"] = "undefined"; } pur.data.createdByName = "Unknown"; for (var u in PURs.users.objects) { if (PURs.users.objects[u].id == pur.data.createdBy) { pur.data.createdByName = PURs.users.objects[u].userName; break; } } pur.data.updatedByName = "Unknown"; for (var u in PURs.users.objects) { if (PURs.users.objects[u].id == pur.data.updatedBy) { pur.data.updatedByName = PURs.users.objects[u].userName; break; } } pur.data.dateAddedMin = 0; pur.data.dateAddedMax = 0; for (var n = 0; n < PURs.venues.objects[i].venueUpdateRequests.length; n++) { pur.data.venueUpdateRequests[n].createdByName = "Unknown"; for (var u in PURs.users.objects) { if (PURs.users.objects[u].id == pur.data.venueUpdateRequests[n].createdBy) { pur.data.venueUpdateRequests[n].createdByName = PURs.users.objects[u].userName; break; } } if (pur.data.venueUpdateRequests[n].dateAdded << pur.data.dateAddedMin) { pur.data.dateAddedMin = pur.data.venueUpdateRequests[n].dateAdded; } if (pur.data.venueUpdateRequests[n].dateAdded >> pur.data.dateAddedMax) { pur.data.dateAddedMax = pur.data.venueUpdateRequests[n].dateAdded; } } WMEURMPT.logDebug("updatePURList pur", pur); pur.clean(); pur.updateDistanceToMapCenter(); if (!found) { pur.alreadyVisited = false; WMEURMPT.PURList.push(pur); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } } }; WMEURMPT.updateListsFromManualScan = function(areaFilter) { if (!WMEURMPT.scanUR && !WMEURMPT.scanMP && !WMEURMPT.scanMC && !WMEURMPT.scanPUR) { alert("You must check at least one scan in quick options"); return; } WMEURMPT.log("Setup tiles for manual scan: ", areaFilter); var count = 0; WMEURMPT.scanAreaBoundsList = []; if (areaFilter.type == "editableArea") { for (var i = 0; i < WMEURMPT.loginManager.user.areas.length; i++) { WMEURMPT.loginManager.user.areas[i].geometry.calculateBounds(); var bounds = WMEURMPT.loginManager.user.areas[i].geometry.bounds; var lonlatFrom = OpenLayers.Layer.SphericalMercator.inverseMercator(bounds.left, bounds.bottom); var lonlatTo = OpenLayers.Layer.SphericalMercator.inverseMercator(bounds.right, bounds.top); for (var lat = lonlatFrom.lat; lat < lonlatTo.lat; lat += 0.5) { for (var lon = lonlatFrom.lon; lon < lonlatTo.lon; lon += 0.5) { WMEURMPT.logDebug("Scan editable area from: " + lon + " " + lat + " to: " + (lon + 1) + " " + (lat + 1)); var tileBounds = new OpenLayers.Bounds; tileBounds.extend(new OpenLayers.LonLat(lon.toFixed(6), lat.toFixed(6))); tileBounds.extend(new OpenLayers.LonLat((lon + 0.5).toFixed(6), (lat + 0.5).toFixed(6))); WMEURMPT.scanAreaBoundsList.push(tileBounds); } } } } if (areaFilter.type == "driveArea") { for (var i = 0; i < WMEURMPT.driveArea.length; i++) { WMEURMPT.driveArea[i].calculateBounds(); WMEURMPT.logDebug("WMEURMPT.driveArea", WMEURMPT.driveArea); var bounds = WMEURMPT.driveArea[i].bounds; var lonlatFrom = OpenLayers.Layer.SphericalMercator.inverseMercator(bounds.left, bounds.bottom); var lonlatTo = OpenLayers.Layer.SphericalMercator.inverseMercator(bounds.right, bounds.top); var lat = lonlatFrom.lat; var lon = lonlatFrom.lon; for (var lat = lonlatFrom.lat; lat < lonlatTo.lat; lat += 0.5) { for (var lon = lonlatFrom.lon; lon < lonlatTo.lon; lon += 0.5) { WMEURMPT.logDebug("Scan drive area from: " + lon + " " + lat + " to: " + (lon + 1) + " " + (lat + 1)); var tileBounds = new OpenLayers.Bounds; tileBounds.extend(new OpenLayers.LonLat(lon.toFixed(6), lat.toFixed(6))); tileBounds.extend(new OpenLayers.LonLat((lon + 0.5).toFixed(6), (lat + 0.5).toFixed(6))); WMEURMPT.scanAreaBoundsList.push(tileBounds); } } } } if (areaFilter.type == "managedArea") { for (var i = 0; i < WMEURMPT.managedAreas.length; i++) { WMEURMPT.managedAreas[i].calculateBounds(); WMEURMPT.logDebug("WMEURMPT.managedAreas", WMEURMPT.managedAreas); var bounds = WMEURMPT.managedAreas[i].bounds; var lonlatFrom = OpenLayers.Layer.SphericalMercator.inverseMercator(bounds.left, bounds.bottom); var lonlatTo = OpenLayers.Layer.SphericalMercator.inverseMercator(bounds.right, bounds.top); var lat = lonlatFrom.lat; var lon = lonlatFrom.lon; for (var lat = lonlatFrom.lat; lat < lonlatTo.lat; lat += 0.5) { for (var lon = lonlatFrom.lon; lon < lonlatTo.lon; lon += 0.5) { WMEURMPT.logDebug("Scan managed area from: " + lon + " " + lat + " to: " + (lon + 1) + " " + (lat + 1)); var tileBounds = new OpenLayers.Bounds; tileBounds.extend(new OpenLayers.LonLat(lon.toFixed(6), lat.toFixed(6))); tileBounds.extend(new OpenLayers.LonLat((lon + 0.5).toFixed(6), (lat + 0.5).toFixed(6))); WMEURMPT.scanAreaBoundsList.push(tileBounds); } } } } if (areaFilter.type == "country") { var geometry = null; for (var i = 0; i < WMEURMPT.areaList.country.length; i++) { if (WMEURMPT.areaList.country[i].name == areaFilter.name) { geometry = WMEURMPT.areaList.country[i].geometryOL.geometry.components; break; } } if (geometry === null) { return; } for (var i = 0; i < geometry.length; i++) { var bounds = geometry[i].bounds; var lonlatFrom = new OpenLayers.LonLat(bounds.left, bounds.bottom); var lonlatTo = new OpenLayers.LonLat(bounds.right, bounds.top); for (var lat = lonlatFrom.lat; lat < lonlatTo.lat; lat += 0.5) { for (var lon = lonlatFrom.lon; lon < lonlatTo.lon; lon += 0.5) { if (lon > 180) { lon -= 180; } var lonStep = 0.5; if (lon + lonStep > 180) { lonStep = 180 - lon; } WMEURMPT.logDebug("Scan country from: " + lon + " " + lat + " to: " + (lon + lonStep) + " " + (lat + 0.5)); var tileBounds = new OpenLayers.Bounds; tileBounds.extend(new OpenLayers.LonLat(lon.toFixed(6), lat.toFixed(6))); tileBounds.extend(new OpenLayers.LonLat((lon + lonStep).toFixed(6), (lat + 0.5).toFixed(6))); WMEURMPT.scanAreaBoundsList.push(tileBounds); if (lonStep != 0.5) { lonStep = 0.5 - lonStep; WMEURMPT.logDebug("Scan country from: 0! " + lat + " to: " + lonStep + " " + (lat + 0.5)); var tileBounds = new OpenLayers.Bounds; tileBounds.extend(new OpenLayers.LonLat(0, lat.toFixed(6))); tileBounds.extend(new OpenLayers.LonLat(lonStep.toFixed(6), (lat + 0.5).toFixed(6))); WMEURMPT.scanAreaBoundsList.push(tileBounds); } } } } } if (areaFilter.type == "custom") { var geometry = null; for (var i = 0; i < WMEURMPT.areaList.custom.length; i++) { if (WMEURMPT.areaList.custom[i].name == areaFilter.name) { geometry = WMEURMPT.areaList.custom[i].geometryOL.geometry.components; break; } } if (geometry === null) { WMEURMPT.log("Bad geometry for area: ", areaFilter); return; } for (var i = 0; i < geometry.length; i++) { var bounds = geometry[i].bounds; var lonlatFrom = new OpenLayers.LonLat(bounds.left, bounds.bottom); var lonlatTo = new OpenLayers.LonLat(bounds.right, bounds.top); for (var lat = lonlatFrom.lat; lat < lonlatTo.lat; lat += 0.5) { for (var lon = lonlatFrom.lon; lon < lonlatTo.lon; lon += 0.5) { WMEURMPT.logDebug("Scan custom from: " + lon + " " + lat + " to: " + (lon + 1) + " " + (lat + 1)); var tileBounds = new OpenLayers.Bounds; tileBounds.extend(new OpenLayers.LonLat(lon.toFixed(6), lat.toFixed(6))); tileBounds.extend(new OpenLayers.LonLat((lon + 0.5).toFixed(6), (lat + 0.5).toFixed(6))); WMEURMPT.scanAreaBoundsList.push(tileBounds); } } } } WMEURMPT.scanAreaBoundsCount = WMEURMPT.scanAreaBoundsList.length; for (var i = 0; i < WMEURMPT.URList.length; i++) { WMEURMPT.URList[i].updated = false; } for (var i = 0; i < WMEURMPT.MPList.length; i++) { WMEURMPT.MPList[i].updated = false; } for (var i = 0; i < WMEURMPT.MCList.length; i++) { WMEURMPT.MCList[i].updated = false; } for (var i = 0; i < WMEURMPT.PURList.length; i++) { WMEURMPT.PURList[i].updated = false; } WMEURMPT.log("Starting scan..."); WMEURMPT.log("Tile count: " + WMEURMPT.scanAreaBoundsList.length); var pb = new WMEURMPT.ProgressBar(WMEURMPT.getId("urt-progressBar")); pb.update(0); pb.show(); WMEURMPT.showPBInfo(true); WMEURMPT.wasAutoScan = WMEURMPT.isAutoScan; window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScanNextStep, [areaFilter]), 0); }; WMEURMPT.updateListsFromManualScanNextStep = function(areaFilter, seconds, retries) { var pb = new WMEURMPT.ProgressBar(WMEURMPT.getId("urt-progressBar")); if (typeof seconds !== "undefined" && seconds != null && seconds > 0) { seconds--; WMEURMPT.info("Error: can't download data from waze server.<br>Retry in " + seconds + "s."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScanNextStep, [areaFilter, seconds, retries]), 1000); return; } if (typeof retries !== "undefined" && retries != null && retries > 0) { retries--; WMEURMPT.log("Error: can't download data from waze server.<br>Retry in " + seconds + "s."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScanNextStep, [areaFilter, WMEURMPT.wazeServerWaitingTimeToRetry, retries]), 1000); return; } if (typeof retries !== "undefined" && retries != null && retries == 0 && typeof seconds !== "undefined" && seconds != null && seconds == 0) { var tileBounds = WMEURMPT.scanAreaBoundsList[0]; WMEURMPT.scanAreaBoundsList.shift(); if (tileBounds.right - tileBounds.left > 0.02 && tileBounds.top - tileBounds.bottom > 0.02) { WMEURMPT.log("Error from waze server. Try a split..."); var newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat(tileBounds.left, tileBounds.bottom)); newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, (tileBounds.bottom + tileBounds.top) / 2.0)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, tileBounds.bottom)); newTileBounds.extend(new OpenLayers.LonLat(tileBounds.right, (tileBounds.bottom + tileBounds.top) / 2.0)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat(tileBounds.left, (tileBounds.bottom + tileBounds.top) / 2.0)); newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, tileBounds.top)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, (tileBounds.bottom + tileBounds.top) / 2.0)); newTileBounds.extend(new OpenLayers.LonLat(tileBounds.right, tileBounds.top)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); WMEURMPT.scanAreaBoundsCount += 4; } else { WMEURMPT.log("Abort this area: (" + tileBounds.left + " , " + tileBounds.bottom + ") -> (" + tileBounds.right + " , " + tileBounds.top + ")"); } } if (WMEURMPT.scanAreaBoundsList.length == 0) { WMEURMPT.log("Found after process: " + (WMEURMPT.URList.length >> 0 ? WMEURMPT.URList.length + " URs; " : "") + (WMEURMPT.MPList.length >> 0 ? WMEURMPT.MPList.length + " MPs; " : "") + (WMEURMPT.MCList.length >> 0 ? WMEURMPT.MCList.length + " MCs; " : "") + (WMEURMPT.PURList.length >> 0 ? WMEURMPT.PURList.length + " PURs" : "")); WMEURMPT.log("Scan ended"); WMEURMPT.showPBInfo(false); WMEURMPT.info(); pb.hide(); WMEURMPT.refreshStats("", ""); WMEURMPT.updateIHMFromURList(); WMEURMPT.updateIHMFromMPList(); WMEURMPT.updateIHMFromMCList(); WMEURMPT.updateIHMFromPURList(); WMEURMPT.saveURMPLists(); WMEURMPT.isAutoScan = WMEURMPT.wasAutoScan; return; } var tileBounds = WMEURMPT.scanAreaBoundsList[0]; var progression = Math.floor((1 - WMEURMPT.scanAreaBoundsList.length / WMEURMPT.scanAreaBoundsCount) * 100); var MPs = WMEURMPT.getMPs(tileBounds, areaFilter); if (MPs == null) { WMEURMPT.log("Error: can't download data from waze server.<br>Retry in " + WMEURMPT.wazeServerWaitingTimeToRetry + "s."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScanNextStep, [areaFilter, WMEURMPT.wazeServerWaitingTimeToRetry, 0]), 1000); return; } WMEURMPT.scanAreaBoundsList.shift(); if (MPs != null) { if (MPs.hasOwnProperty("error") && MPs.error == 1) { WMEURMPT.log("Found " + MPs.logMessage.length + " " + MPs.logMessage.obj + ". This is a waze server limit. Enqueuing sub tile..."); var newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat(tileBounds.left, tileBounds.bottom)); newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, (tileBounds.bottom + tileBounds.top) / 2.0)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, tileBounds.bottom)); newTileBounds.extend(new OpenLayers.LonLat(tileBounds.right, (tileBounds.bottom + tileBounds.top) / 2.0)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat(tileBounds.left, (tileBounds.bottom + tileBounds.top) / 2.0)); newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, tileBounds.top)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); newTileBounds = new OpenLayers.Bounds; newTileBounds.extend(new OpenLayers.LonLat((tileBounds.left + tileBounds.right) / 2.0, (tileBounds.bottom + tileBounds.top) / 2.0)); newTileBounds.extend(new OpenLayers.LonLat(tileBounds.right, tileBounds.top)); WMEURMPT.scanAreaBoundsList.unshift(newTileBounds); WMEURMPT.scanAreaBoundsCount += 4; } else { WMEURMPT.log("Found: " + (MPs.hasOwnProperty("mapUpdateRequests") ? MPs.mapUpdateRequests.objects.length + " URs; " : "") + (MPs.hasOwnProperty("problems") ? MPs.problems.objects.length + " MPs; " : "") + (MPs.hasOwnProperty("mapComments") ? MPs.mapComments.objects.length + " MCs; " : "") + (MPs.hasOwnProperty("venues") ? MPs.venues.objects.length + " PURs" : "")); WMEURMPT.updateURList(MPs); WMEURMPT.updateMPList(MPs); WMEURMPT.updateMCList(MPs); WMEURMPT.updatePURList(MPs); WMEURMPT.removeOldURMP(MPs.area, MPs.filterType, MPs.tile); } } pb.update(progression); WMEURMPT.info("Please, don't touch anything during this scan."); window.setTimeout(WMEURMPT.getFunctionWithArgs(WMEURMPT.updateListsFromManualScanNextStep, [areaFilter]), 0); }; WMEURMPT.removeOldURMP = function(filterArea, type, tileBounds) { var i = 0; var now = new Date; if (WMEURMPT.scanUR) { while (i < WMEURMPT.URList.length) { if (WMEURMPT.URList[i].data.hasOwnProperty("session") == false) { WMEURMPT.log("pas bon ca: ", WMEURMPT.URList[i]); } var xy = new OpenLayers.Geometry.Point(WMEURMPT.URList[i].lonlat.lon, WMEURMPT.URList[i].lonlat.lat); if (type == "editableArea" || type == "driveArea" || type == "managedArea") { xy = OpenLayers.Layer.SphericalMercator.inverseMercator(xy.x, xy.y); } if (xy.x < tileBounds.left || xy.x > tileBounds.right || xy.y < tileBounds.bottom || xy.y > tileBounds.top) { i++; continue; } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { i++; continue; } if (WMEURMPT.URList[i].data.open == true && WMEURMPT.URList[i].updated == false || WMEURMPT.URList[i].data.open == false && Math.floor((now.getTime() - WMEURMPT.URList[i].data.resolvedOn) / 86400000) > 60) { WMEURMPT.log("removing old UR " + WMEURMPT.URList[i].id); WMEURMPT.URList.splice(i, 1); WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } else { i++; } } } i = 0; if (WMEURMPT.scanMP) { while (i < WMEURMPT.MPList.length) { var xy = new OpenLayers.Geometry.Point(WMEURMPT.MPList[i].lonlat.lon, WMEURMPT.MPList[i].lonlat.lat); if (type == "editableArea" || type == "driveArea" || type == "managedArea") { xy = OpenLayers.Layer.SphericalMercator.inverseMercator(xy.x, xy.y); } if (xy.x < tileBounds.left || xy.x > tileBounds.right || xy.y < tileBounds.bottom || xy.y > tileBounds.top) { i++; continue; } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { i++; continue; } if (WMEURMPT.MPList[i].data.open == true && WMEURMPT.MPList[i].updated == false || WMEURMPT.MPList[i].data.open == false && Math.floor((now.getTime() - WMEURMPT.MPList[i].data.resolvedOn) / 86400000) > 60) { WMEURMPT.log("removing old MP " + WMEURMPT.MPList[i].id); WMEURMPT.MPList.splice(i, 1); WMEURMPT.MPMap = WMEURMPT.listToObject(WMEURMPT.MPList); } else { i++; } } } i = 0; if (WMEURMPT.scanMC) { while (i < WMEURMPT.MCList.length) { var xy = new OpenLayers.Geometry.Point(WMEURMPT.MCList[i].lonlat.lon, WMEURMPT.MCList[i].lonlat.lat); if (type == "editableArea" || type == "driveArea" || type == "managedArea") { xy = OpenLayers.Layer.SphericalMercator.inverseMercator(xy.x, xy.y); } if (xy.x < tileBounds.left || xy.x > tileBounds.right || xy.y < tileBounds.bottom || xy.y > tileBounds.top) { i++; continue; } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { i++; continue; } if (WMEURMPT.MCList[i].updated == false) { WMEURMPT.log("removing old MC " + WMEURMPT.MCList[i].id); WMEURMPT.MCList.splice(i, 1); WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MCList); } else { i++; } } } i = 0; if (WMEURMPT.scanPUR) { while (i < WMEURMPT.PURList.length) { var xy = new OpenLayers.Geometry.Point(WMEURMPT.PURList[i].lonlat.lon, WMEURMPT.PURList[i].lonlat.lat); if (type == "editableArea" || type == "driveArea" || type == "managedArea") { xy = OpenLayers.Layer.SphericalMercator.inverseMercator(xy.x, xy.y); } if (xy.x < tileBounds.left || xy.x > tileBounds.right || xy.y < tileBounds.bottom || xy.y > tileBounds.top) { i++; continue; } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top && filterArea[a].containsPoint(xy)) { inside = true; break; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { inside = true; break; } } } if (!inside) { i++; continue; } if (WMEURMPT.PURList[i].updated == false) { WMEURMPT.log("removing old PUR " + WMEURMPT.PURList[i].id); WMEURMPT.PURList.splice(i, 1); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } else { i++; } } } }; WMEURMPT.URT_UR = function(id, lon, lat) { this.id = id; this.lonlat = new OpenLayers.LonLat(lon, lat); this.blackListed = false; this.alreadyVisited = false; this.lastVisitCommentsCount = 0; this.refreshFromServer = refreshFromServer; this.refreshFromWMEData = refreshFromWMEData; this.distanceToMapCenter = 0; this.clean = clean; this.updateDistanceToMapCenter = updateDistanceToMapCenter; function clean() { if (this.data.hasOwnProperty("bounds") == true) { delete this.data.bounds; } if (this.data.hasOwnProperty("geometry") == true) { delete this.data.geometry; } if (this.data.hasOwnProperty("session") == true) { if (this.data.session.hasOwnProperty("driveGeometry") == true) { delete this.data.session.driveGeometry; } if (this.data.session.hasOwnProperty("routeGeometry") == true) { delete this.data.session.routeGeometry; } if (this.data.session.hasOwnProperty("routeInstructions") == true) { delete this.data.session.routeInstructions; } if (this.data.session.hasOwnProperty("users") == true) { delete this.data.session.users; } } } function updateDistanceToMapCenter() { if (!WMEURMPT.isComputeDistances) { return; } if (!WMEURMPT.mapCenterLonLat) { WMEURMPT.mapCenterLonLat = OpenLayers.Layer.SphericalMercator.inverseMercator(WMEURMPT.wazeMap.olMap.center.lon, WMEURMPT.wazeMap.olMap.center.lat); } var p1 = new OpenLayers.Geometry.Point(WMEURMPT.mapCenterLonLat.lon, WMEURMPT.mapCenterLonLat.lat); var p2 = new OpenLayers.Geometry.Point(this.lonlat.lon, this.lonlat.lat); var line = new OpenLayers.Geometry.LineString([p1, p2]); this.distanceToMapCenter = line.getGeodesicLength(new OpenLayers.Projection("EPSG:4326")); } function refreshFromWMEData(forceSession) { var theUR = WMEURMPT.wazeModel.mapUpdateRequests.objects[this.id]; WMEURMPT.logDebug("refreshFromWME UR:", theUR); if (theUR == null) { return false; } WMEURMPT.logDebug("refreshFromWME session:", WMEURMPT.wazeModel.updateRequestSessions.objects[this.id]); this.data = {}; this.data.description = theUR.attributes.description; this.data.driveDate = theUR.attributes.driveDate; this.data.hasComments = theUR.attributes.hasComments; this.data.open = theUR.attributes.open; this.data.resolution = theUR.attributes.resolution; this.data.resolvedBy = theUR.attributes.resolvedBy; this.data.resolvedOn = theUR.attributes.resolvedOn; this.data.type = theUR.attributes.type; this.data.updatedBy = theUR.attributes.updatedBy; this.data.updatedOn = theUR.attributes.updatedOn; this.data.resolvedByName = "Unknown"; for (var u in theUR.model.users.objects) { if (theUR.model.users.objects[u].id == this.data.resolvedBy) { this.data.resolvedByName = theUR.model.users.objects[u].userName; break; } } var needToUpdateCommentsUserNames = true; if (!forceSession) { if (WMEURMPT.wazeModel.updateRequestSessions.objects[this.id] != null) { this.data.session = {}; this.data.session.comments = JSON.parse(JSON.stringify(WMEURMPT.wazeModel.updateRequestSessions.objects[this.id].comments)); this.data.session.isFollowing = WMEURMPT.wazeModel.updateRequestSessions.objects[this.id].isFollowing; } else { this.data.session = {}; this.data.session.comments = []; this.data.session.isFollowing = false; } } else { url = "https://" + document.location.host + WMEURMPT.wazeConfigApiUpdateRequestSessions + "?ids=" + this.id; if (XMLHttpRequest) { xhr3_object = new XMLHttpRequest; } else { if (ActiveXObject) { xhr3_object = new ActiveXObject("Microsoft.XMLHTTP"); } } var URcomments = null; xhr3_object.open("GET", url, false); xhr3_object.ontimeout = function() { URcomments = null; }; xhr3_object.onerror = function(e) { WMEURMPT.log("Error while getting UR comments from Waze server.", e); URcomments = null; }; xhr3_object.onreadystatechange = function() { if (xhr3_object.readyState == 4) { var r = xhr3_object.responseText; try { URcomments = JSON.parse(r); } catch (e) { WMEURMPT.log("Error: can't read server response: ", e); WMEURMPT.log("Response from server: ", r); WMEURMPT.log("Query: ", url); URcomments = null; } } else { WMEURMPT.log("Error while getting UR comments from Waze server.", xhr3_object); URcomments = null; } }; xhr3_object.send(null); WMEURMPT.logDebug("UR comments: ", URcomments); if (URcomments != null) { var found = false; for (var j = 0; j < URcomments.updateRequestSessions.objects.length; j++) { var urId = URcomments.updateRequestSessions.objects[j].id; if (urId == this.id) { this.data.session = URcomments.updateRequestSessions.objects[j]; this.data.session.users = URcomments.users; for (var c = 0; c < this.data.session.comments.length; c++) { var userID = this.data.session.comments[c].userID; var userName = "Unknown"; if (userID == WMEURMPT.me.id) { userName = WMEURMPT.me.userName; if (c == this.data.session.comments.length - 1) { this.lastVisitCommentsCount = this.data.session.comments.length; } } if (userID == -1) { userName = "Reporter"; } else { for (var u = 0; u < this.data.session.users.objects.length; u++) { if (this.data.session.users.objects[u].id == userID) { userName = this.data.session.users.objects[u].userName; break; } } } this.data.session.comments[c].userName = userName; } found = true; needToUpdateCommentsUserNames = false; } } if (!found) { this.data.session = {}; this.data.session.comments = []; this.data.session.isFollowing = false; } } else { this.data.session = {}; this.data.session.comments = []; this.data.session.isFollowing = false; } } if (needToUpdateCommentsUserNames) { for (var c = 0; c < this.data.session.comments.length; c++) { var userID = this.data.session.comments[c].userID; var userName = "Unknown"; if (userID == WMEURMPT.me.id) { userName = WMEURMPT.me.userName; if (c == this.data.session.comments.length - 1) { this.lastVisitCommentsCount = this.data.session.comments.length; } } if (userID == -1) { userName = "Reporter"; } else { for (var u in WMEURMPT.wazeModel.updateRequestSessions.objects[this.id].model.users.objects) { if (WMEURMPT.wazeModel.updateRequestSessions.objects[this.id].model.users.objects[u].id == userID) { userName = WMEURMPT.wazeModel.updateRequestSessions.objects[this.id].model.users.objects[u].userName; break; } } } this.data.session.comments[c].userName = userName; } } this.clean(); this.updateDistanceToMapCenter(); WMEURMPT.updateIHMFromURList(); return true; } function refreshFromServer() { var haveChanged = false; WMEURMPT.log("refresh from server " + this.id); var URs = WMEURMPT.getUR(this.lonlat.lon, this.lonlat.lat, this.id); if (URs != null) { WMEURMPT.log("refresh from server " + this.id + ";", URs); if (typeof URs.mapUpdateRequests !== "undefined") { for (var i = 0; i < URs.mapUpdateRequests.objects.length; i++) { if (URs.mapUpdateRequests.objects[i].id == this.id) { if (this.data.updatedOn != URs.mapUpdateRequests.objects[i].updatedOn) { haveChanged = true; } WMEURMPT.log("refresh from server " + this.id + ";", URs.mapUpdateRequests.objects[i]); this.data = URs.mapUpdateRequests.objects[i]; this.data.resolvedByName = "Unknown"; for (var u = 0; u < URs.users.objects.length; u++) { if (URs.users.objects[u].id == this.data.resolvedBy) { this.data.resolvedByName = URs.users.objects[u].userName; } } for (var c = 0; c < this.data.session.comments.length; c++) { var userID = this.data.session.comments[c].userID; var userName = "Unknown"; if (userID == -1) { userName = "Reporter"; } else { for (var u = 0; u < URs.users.objects.length; u++) { if (URs.users.objects[u].userID == userID) { userName = URs.users.objects[u].userName; break; } } for (var u = 0; u < URs.mapUpdateRequests.objects[i].session.users.objects.length; u++) { if (URs.mapUpdateRequests.objects[i].session.users.objects[u].id == userID) { userName = URs.mapUpdateRequests.objects[i].session.users.objects[u].userName; break; } } if (userID == WMEURMPT.loginManager.user.id) { userName = WMEURMPT.loginManager.user.userName; } } this.data.session.comments[c].userName = userName; } } } return haveChanged; } } return null; } }; WMEURMPT.getUR = function(lon, lat, id) { var bounds = new OpenLayers.Bounds(lon - 0.01, lat - 0.01, lon + 0.01, lat + 0.01); var URs = WMEURMPT.getMPs(bounds); if (URs == null) { return null; } if (id != null) { while (URs.mapUpdateRequests.objects.length >= 2) { for (var i = 0; i < URs.mapUpdateRequests.objects.length; i++) { if (URs.mapUpdateRequests.objects[i].id != id) { URs.mapUpdateRequests.objects.splice(i, 1); break; } } } if (URs.mapUpdateRequests.objects.length == 0) { return null; } if (URs.mapUpdateRequests.objects[0].id != id) { return null; } } return URs; }; WMEURMPT.URT_MP = function(id, lon, lat) { this.id = id; this.lonlat = new OpenLayers.LonLat(lon, lat); this.blackListed = false; this.alreadyVisited = false; this.distanceToMapCenter = 0; this.type = "problem"; this.refreshFromServer = refreshFromServer; this.refreshFromWMEData = refreshFromWMEData; this.clean = clean; this.updateDistanceToMapCenter = updateDistanceToMapCenter; function clean() { delete this.data.bounds; delete this.data.geometry; } function updateDistanceToMapCenter() { if (!WMEURMPT.isComputeDistances) { return; } if (!WMEURMPT.mapCenterLonLat) { WMEURMPT.mapCenterLonLat = OpenLayers.Layer.SphericalMercator.inverseMercator(WMEURMPT.wazeMap.olMap.center.lon, WMEURMPT.wazeMap.olMap.center.lat); } var p1 = new OpenLayers.Geometry.Point(WMEURMPT.mapCenterLonLat.lon, WMEURMPT.mapCenterLonLat.lat); var p2 = new OpenLayers.Geometry.Point(this.lonlat.lon, this.lonlat.lat); var line = new OpenLayers.Geometry.LineString([p1, p2]); this.distanceToMapCenter = line.getGeodesicLength(new OpenLayers.Projection("EPSG:4326")); } function refreshFromWMEData() { WMEURMPT.logDebug("Refresh MP: ", WMEURMPT.wazeModel.problems.additionalInfo); var theMP = null; if (WMEURMPT.wazeModel.problems.objects.hasOwnProperty(this.id)) { theMP = WMEURMPT.wazeModel.problems.objects[this.id]; } if (theMP == null) { return false; } this.data = {}; this.data.priority = theMP.attributes.priority; this.data.subType = theMP.attributes.subType; this.data.open = theMP.attributes.open; this.data.resolution = theMP.attributes.resolution; this.data.resolvedBy = theMP.attributes.resolvedBy; this.data.resolvedOn = theMP.attributes.resolvedOn; this.data.weight = theMP.attributes.weight; this.data.startTime = theMP.attributes.startTime; this.data.resolvedByName = "Unknown"; for (var u in theMP.model.users.objects) { if (theMP.model.users.objects[u].id == this.data.resolvedBy) { this.data.resolvedByName = theMP.model.users.objects[u].userName; break; } } this.clean(); this.updateDistanceToMapCenter(); return true; } function refreshFromServer() { var haveChanged = false; var MPs = WMEURMPT.getMP(this.lonlat.lon, this.lonlat.lat, this.id); if (MPs != null) { if (typeof MPs.problems !== "undefined") { for (var i = 0; i < MPs.problems.objects.length; i++) { if (MPs.problems.objects[i].id == this.id) { if (this.data.updatedOn != MPs.problems.objects[i].updatedOn) { haveChanged = true; } this.data = MPs.problems.objects[i]; return haveChanged; } } } } return null; } }; WMEURMPT.getMP = function(lon, lat, id) { var bounds = new OpenLayers.Bounds(lon - 0.01, lat - 0.01, lon + 0.01, lat + 0.01); var MPs = WMEURMPT.getMPs(bounds); if (MPs == null) { return null; } if (id != null) { while (MPs.problems.objects.length >= 2) { for (var i = 0; i < MPs.problems.objects.length; i++) { if (MPs.problems.objects[i].id != id) { MPs.problems.objects.splice(i, 1); break; } } } if (MPs.problems.objects.length != 0 && MPs.problems.objects[0].id != id) { return null; } } if (MPs.problems.objects.length == 0) { return null; } return MPs; }; WMEURMPT.URT_MC = function(id, lon, lat) { this.id = id; this.lonlat = new OpenLayers.LonLat(lon, lat); this.blackListed = false; this.alreadyVisited = false; this.lastVisitCommentsCount = 0; this.refreshFromServer = refreshFromServer; this.refreshFromWMEData = refreshFromWMEData; this.distanceToMapCenter = 0; this.clean = clean; this.updateDistanceToMapCenter = updateDistanceToMapCenter; function clean() { if (this.data.hasOwnProperty("bounds") == true) { delete this.data.bounds; } if (this.data.hasOwnProperty("geometry") == true) { delete this.data.geometry; } } function updateDistanceToMapCenter() { if (!WMEURMPT.isComputeDistances) { return; } if (!WMEURMPT.mapCenterLonLat) { WMEURMPT.mapCenterLonLat = OpenLayers.Layer.SphericalMercator.inverseMercator(WMEURMPT.wazeMap.olMap.center.lon, WMEURMPT.wazeMap.olMap.center.lat); } var p1 = new OpenLayers.Geometry.Point(WMEURMPT.mapCenterLonLat.lon, WMEURMPT.mapCenterLonLat.lat); var p2 = new OpenLayers.Geometry.Point(this.lonlat.lon, this.lonlat.lat); var line = new OpenLayers.Geometry.LineString([p1, p2]); this.distanceToMapCenter = line.getGeodesicLength(new OpenLayers.Projection("EPSG:4326")); } function refreshFromWMEData(forceSession) { var theMC = WMEURMPT.wazeModel.mapComments.objects[this.id]; WMEURMPT.logDebug("refreshFromWME MC:", theMC); if (theMC == null) { return false; } this.data = {}; ["body", "createdBy", "createdOn", "endDate", "isFollowing", "subject", "updatedBy", "updatedOn"].forEach(function(p) { this.data[p] = theMC.attributes[p]; }, this); this.data.createdByName = "Unknown"; for (var u in theMC.model.users.objects) { if (theMC.model.users.objects[u].id == this.data.createdBy) { this.data.createdByName = theMC.model.users.objects[u].userName; break; } } this.data.updatedByName = "Unknown"; for (var u in theMC.model.users.objects) { if (theMC.model.users.objects[u].id == this.data.updatedBy) { this.data.updatedByName = theMC.model.users.objects[u].userName; break; } } this.data.conversation = []; if (theMC.attributes.hasOwnProperty("conversation")) { theMC.attributes.conversation.forEach(function(c, i) { if (c.userID == WMEURMPT.me.id) { c.userName = WMEURMPT.me.userName; if (i == theMC.attributes.conversation.length - 1) { this.lastVisitCommentsCount = theMC.attributes.conversation.length; } } this.data.conversation.push(JSON.parse(JSON.stringify(c))); this.data.conversation[this.data.conversation.length - 1].userName = theMC.model.users.objects[c.userID].userName; }, this); } if (theMC.hasOwnProperty("state") && theMC.state == "DELETE") { WMEURMPT.MCList.splice(WMEURMPT.MCMap[this.id], 1); WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MCList); this.clean(); WMEURMPT.updateIHMFromMCList(); return; } this.clean(); this.updateDistanceToMapCenter(); WMEURMPT.updateIHMFromMCList(); return true; } function refreshFromServer() { var haveChanged = false; WMEURMPT.log("refresh from server MC.id: " + this.id); var MCs = WMEURMPT.getMC(this.lonlat.lon, this.lonlat.lat, this.id); if (MCs != null) { WMEURMPT.log("MC refresh from server MC.id: " + this.id + ";", MCs); if (typeof MCs.mapComments !== "undefined") { for (var i = 0; i < MCs.mapComments.objects.length; i++) { if (MCs.mapComments.objects[i].id == this.id) { if (this.data.updatedOn != MCs.mapComments.objects[i].updatedOn) { haveChanged = true; } WMEURMPT.log("refresh from server " + this.id + ";", MCs.mapComments.objects[i]); this.data = MCs.mapComments.objects[i]; this.data.createdByName = "Unknown"; for (var u in MCs.users.objects) { if (MCs.users.objects[u].id == this.data.createdBy) { this.data.createdByName = MCs.users.objects[u].userName; break; } } this.data.updatedByName = "Unknown"; for (var u in MCs.users.objects) { if (MCs.users.objects[u].id == this.data.updatedBy) { this.data.updatedByName = MCs.users.objects[u].userName; break; } } if (this.data.hasOwnProperty("conversation")) { this.data.conversation.forEach(function(c, j) { if (c.userID == WMEURMPT.me.id) { c.userName = WMEURMPT.me.userName; if (j == this.data.conversation.length - 1) { this.lastVisitCommentsCount = this.data.conversation.length; } } for (var u in MCs.users.objects) { if (MCs.users.objects[u].id == c.userID) { c.userName = MCs.users.objects[u].userName; break; } } }, this); } else { this.data.conversation = []; } } } return haveChanged; } } return null; } }; WMEURMPT.getMC = function(lon, lat, id) { var bounds = new OpenLayers.Bounds(lon - 0.01, lat - 0.01, lon + 0.01, lat + 0.01); var MCs = WMEURMPT.getMPs(bounds); if (MCs == null) { return null; } if (id != null) { while (MCs.mapComments.objects.length >= 2) { for (var i = 0; i < MCs.mapComments.objects.length; i++) { if (MCs.mapComments.objects[i].id != id) { MCs.mapComments.objects.splice(i, 1); break; } } } if (MCs.mapComments.objects.length == 0) { return null; } if (MCs.mapComments.objects[0].id != id) { return null; } } return MCs; }; WMEURMPT.URT_PUR = function(id, lon, lat) { this.id = id; this.lonlat = new OpenLayers.LonLat(lon, lat); this.blackListed = false; this.alreadyVisited = false; this.refreshFromServer = refreshFromServer; this.refreshFromWMEData = refreshFromWMEData; this.distanceToMapCenter = 0; this.clean = clean; this.updateDistanceToMapCenter = updateDistanceToMapCenter; function clean() { if (this.data.hasOwnProperty("bounds") == true) { delete this.data.bounds; } if (this.data.hasOwnProperty("geometry") == true) { delete this.data.geometry; } } function updateDistanceToMapCenter() { if (!WMEURMPT.isComputeDistances) { return; } if (!WMEURMPT.mapCenterLonLat) { WMEURMPT.mapCenterLonLat = OpenLayers.Layer.SphericalMercator.inverseMercator(WMEURMPT.wazeMap.olMap.center.lon, WMEURMPT.wazeMap.olMap.center.lat); } var p1 = new OpenLayers.Geometry.Point(WMEURMPT.mapCenterLonLat.lon, WMEURMPT.mapCenterLonLat.lat); var p2 = new OpenLayers.Geometry.Point(this.lonlat.lon, this.lonlat.lat); var line = new OpenLayers.Geometry.LineString([p1, p2]); this.distanceToMapCenter = line.getGeodesicLength(new OpenLayers.Projection("EPSG:4326")); } function refreshFromWMEData(forceSession) { var thePUR = WMEURMPT.wazeModel.venues.objects[this.id]; WMEURMPT.logDebug("refreshFromWME PUR:", thePUR); if (thePUR == null) { return false; } this.data = {}; ["categories", "name", "createdBy", "createdOn", "streetID"].forEach(function(p) { this.data[p] = thePUR.attributes[p] === undefined ? "undefined" : thePUR.attributes[p]; }, this); this.data.createdByName = "Unknown"; for (var u in thePUR.model.users.objects) { if (thePUR.model.users.objects[u].id == this.data.createdBy) { this.data.createdByName = thePUR.model.users.objects[u].userName; break; } } this.data.updatedByName = "Unknown"; for (var u in thePUR.model.users.objects) { if (thePUR.model.users.objects[u].id == this.data.updatedBy) { this.data.updatedByName = thePUR.model.users.objects[u].userName; break; } } if (thePUR.attributes.hasOwnProperty("venueUpdateRequests") && thePUR.attributes.venueUpdateRequests.length >> 0) { this.data.venueUpdateRequests = []; this.data.dateAddedMin = 0; this.data.dateAddedMax = 0; for (var n = 0; n < thePUR.attributes.venueUpdateRequests.length; n++) { if (thePUR.attributes.venueUpdateRequests[n].changed.hasOwnProperty("approved") && thePUR.attributes.venueUpdateRequests[n].changed.approved !== null) { thePUR.attributes.venueUpdateRequests.splice(n, 1); continue; } this.data.venueUpdateRequests[n] = {}; ["createdBy", "dateAdded", "type", "updateType", "subject"].forEach(function(p) { this.data.venueUpdateRequests[n][p] = thePUR.attributes.venueUpdateRequests[n].attributes[p] === undefined ? "undefined" : thePUR.attributes.venueUpdateRequests[n].attributes[p]; }, this); this.data.venueUpdateRequests[n].changed = thePUR.attributes.venueUpdateRequests[n].changed; this.data.venueUpdateRequests[n].createdByName = "Unknown"; for (var u in thePUR.model.users.objects) { if (thePUR.model.users.objects[u].id == this.data.venueUpdateRequests[n].createdBy) { this.data.venueUpdateRequests[n].createdByName = thePUR.model.users.objects[u].userName; break; } } if (this.data.venueUpdateRequests[n].dateAdded << this.data.dateAddedMin) { this.data.dateAddedMin = this.data.venueUpdateRequests[n].dateAdded; } if (this.data.venueUpdateRequests[n].dateAdded >> this.data.dateAddedMax) { this.data.dateAddedMax = this.data.venueUpdateRequests[n].dateAdded; } WMEURMPT.logDebug("this.id: " + this.id + "; this.data.venueUpdateRequests[" + n + "].dateAdded: " + this.data.venueUpdateRequests[n].dateAdded, this); } } else { if (thePUR.attributes.hasOwnProperty("venueUpdateRequests") && thePUR.attributes.venueUpdateRequests.length == 0) { WMEURMPT.PURList.splice(WMEURMPT.PURMap[this.id], 1); WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); this.clean(); WMEURMPT.updateIHMFromPURList(); return; } } this.clean(); this.updateDistanceToMapCenter(); WMEURMPT.updateIHMFromPURList(); return true; } function refreshFromServer() { var haveChanged = false; WMEURMPT.log("refresh from server " + this.id); var PURs = WMEURMPT.getPUR(this.lonlat.lon, this.lonlat.lat, this.id); if (PURs != null) { WMEURMPT.logDebug("refresh from server " + this.id + ";", PURs); if (typeof PURs.venues !== "undefined") { for (var i = 0; i < PURs.venues.objects.length; i++) { if (PURs.venues.objects[i].id == this.id) { if (this.data.updatedOn != PURs.venues.objects[i].updatedOn) { haveChanged = true; } WMEURMPT.logDebug("refresh from server " + this.id + ";", PURs.venues.objects[i]); this.data = PURs.venues.objects[i]; if (this.data.name === undefined) { this.data["name"] = "undefined"; } this.data.createdByName = "Unknown"; for (var u in PURs.users.objects) { if (PURs.users.objects[u].id == this.data.createdBy) { this.data.createdByName = PURs.users.objects[u].userName; break; } } this.data.updatedByName = "Unknown"; for (var u in PURs.users.objects) { if (PURs.users.objects[u].id == this.data.updatedBy) { this.data.updatedByName = PURs.users.objects[u].userName; break; } } if (PURs.venues.objects[i].hasOwnProperty("venueUpdateRequests") && PURs.venues.objects[i].venueUpdateRequests.length >> 0) { this.data.venueUpdateRequests = []; this.data.dateAddedMin = 0; this.data.dateAddedMax = 0; for (var n = 0; n < PURs.venues.objects[i].venueUpdateRequests.length; n++) { this.data.venueUpdateRequests[n] = {}; ["createdBy", "dateAdded", "type", "updateType", "subject"].forEach(function(p) { this.data.venueUpdateRequests[n][p] = PURs.venues.objects[i].venueUpdateRequests[n].attributes[p] === undefined ? "undefined" : PURs.venues.objects[i].venueUpdateRequests[n].attributes[p]; }, this); this.data.venueUpdateRequests[n].changed = PURs.venues.objects[i].venueUpdateRequests[n].changed; this.data.venueUpdateRequests[n].createdByName = "Unknown"; for (var u in PURs.model.users.objects) { if (PURs.model.users.objects[u].id == this.data.venueUpdateRequests[n].createdBy) { this.data.venueUpdateRequests[n].createdByName = PURs.model.users.objects[u].userName; break; } } if (this.data.venueUpdateRequests[n].dateAdded << this.data.dateAddedMin) { this.data.dateAddedMin = this.data.venueUpdateRequests[n].dateAdded; } if (this.data.venueUpdateRequests[n].dateAdded >> this.data.dateAddedMax) { this.data.dateAddedMax = this.data.venueUpdateRequests[n].dateAdded; } } } WMEURMPT.logDebug("this: ", this); } } return haveChanged; } } return null; } }; WMEURMPT.getPUR = function(lon, lat, id) { var bounds = new OpenLayers.Bounds(lon - 0.01, lat - 0.01, lon + 0.01, lat + 0.01); var PURs = WMEURMPT.getMPs(bounds); if (PURs == null) { return null; } if (id != null) { WMEURMPT.log("getPUR PURs.venues :", PURs.venues); while (PURs.venues.objects.length >= 2) { for (var i = 0; i < PURs.venues.objects.length; i++) { if (PURs.venues.objects[i].id != id) { PURs.venues.objects.splice(i, 1); break; } } } if (PURs.venues.objects.length == 0) { return null; } if (PURs.venues.objects[0].id != id) { return null; } } return PURs; }; WMEURMPT.URT_AREA = function() { this.name = ""; this.category = ""; this.subset = false; this.parent = ""; this.geometryWKT = ""; this.geometryOL = null; this.getGeometryFromServer = getGeometryFromServer; this.getCategoryElementsFromServer = getCategoryElementsFromServer; this.isInside = isInside; function getGeometryFromServer(callback, serverIndex) { if (typeof serverIndex === "undefined" || serverIndex == null) { serverIndex = 0; } if (serverIndex >= WMEURMPT.servers.length) { callback(null); return; } var url = WMEURMPT.servers[serverIndex].url + "getArea.php?category=" + this.category + (this.subset == true ? "&subset=" + this.parent : "") + "&name=" + this.name; var context = this; WMEURMPT.log("Try to donwload area from server " + WMEURMPT.servers[serverIndex].name); downloadHelper.add(url, function(data) { if (data.status == "success") { try { var jsonObj = JSON.parse(data.data); context.geometryWKT = jsonObj.geometry; callback(context); } catch (e) { WMEURMPT.log("Error while getting area from server" + WMEURMPT.servers[serverIndex].name + "!", e); context.getGeometryFromServer(callback, serverIndex + 1); } } else { context.getGeometryFromServer(callback, serverIndex + 1); } }, null); } function getCategoryElementsFromServer(callback, serverIndex) { if (typeof serverIndex === "undefined" || serverIndex == null) { serverIndex = 0; } if (serverIndex >= WMEURMPT.servers.length) { WMEURMPT.errorOnCountryServer(); return; } var url = WMEURMPT.servers[serverIndex].url + "getArea.php?category=" + this.category; var context = this; WMEURMPT.log("Try to donwload area list from server " + WMEURMPT.servers[serverIndex].name); var context = this; downloadHelper.add(url, function(data) { if (data.status == "success") { try { callback(JSON.parse(data.data)); } catch (e) { WMEURMPT.log("Error while getting categories from server!", e); context.getCategoryElementsFromServer(callback, serverIndex + 1); } } else { context.getCategoryElementsFromServer(callback, serverIndex + 1); } }, null); } function isInside(lonlat) { var xy = new OpenLayers.Geometry.Point(lonlat.lon, lonlat.lat); var filterArea = []; if (this.category == "editableArea" || this.category == "driveArea" || this.category == "managedArea") { } if (this.category == "country" || this.category == "custom") { if (this.geometryOL != null) { filterArea = this.geometryOL.geometry.components; } } var inside = false; for (var a = 0; a < filterArea.length; a++) { if (xy.x >= filterArea[a].bounds.left && xy.x <= filterArea[a].bounds.right && xy.y >= filterArea[a].bounds.bottom && xy.y <= filterArea[a].bounds.top) { if (filterArea[a].hasOwnProperty("bintreeContainsPoint") == false) { if (filterArea[a].containsPoint(xy)) { return true; } } else { if (filterArea[a].bintreeContainsPoint(xy)) { return true; } } } } return false; } }; WMEURMPT.info = function(text) { text = typeof text !== "undefined" ? text : ""; var div = WMEURMPT.getId("urt-info"); div.innerHTML = text; }; WMEURMPT.saveOptions = function() { var options = {filterUR:WMEURMPT.currentURFilter, filterMP:WMEURMPT.currentMPFilter, filterMC:WMEURMPT.currentMCFilter, filterPUR:WMEURMPT.currentPURFilter, filterURKeyword:WMEURMPT.currentURKeyWord, filterMCKeyword:WMEURMPT.currentMCKeyWord, filterPURKeyword:WMEURMPT.currentPURKeyWord, filterURLimitTo:WMEURMPT.currentURLimitTo, filterMPLimitTo:WMEURMPT.currentMPLimitTo, filterMCLimitTo:WMEURMPT.currentMCLimitTo, filterPURLimitTo:WMEURMPT.currentPURLimitTo, displayLegend:WMEURMPT.displayLegend, isEnabled:WMEURMPT.isEnabled, isAutoScan:WMEURMPT.isAutoScan, isComputeDistances:WMEURMPT.isComputeDistances, scanUR:WMEURMPT.scanUR, scanMP:WMEURMPT.scanMP, scanMC:WMEURMPT.scanMC, scanPUR:WMEURMPT.scanPUR, filterUROnlyType:WMEURMPT.currentUROnlyType, filterMPOnlyType:WMEURMPT.currentMPOnlyType, filterPUROnlyCategorie:WMEURMPT.currentPUROnlyCategorie, filterUROnlyArea:WMEURMPT.currentUROnlyArea, filterMPOnlyArea:WMEURMPT.currentMPOnlyArea, filterMCOnlyArea:WMEURMPT.currentMCOnlyArea, filterPUROnlyArea:WMEURMPT.currentPUROnlyArea, filterURCommentsCount:WMEURMPT.currentURCommentsCount, URDescriptionMaxLength:WMEURMPT.URDescriptionMaxLength, MPDescriptionMaxLength:WMEURMPT.MPDescriptionMaxLength, MCSubjectMaxLength:WMEURMPT.MCSubjectMaxLength, MCBodyMaxLength:WMEURMPT.MCBodyMaxLength, PURCategoriesMaxLength:WMEURMPT.PURCategoriesMaxLength, PURNameMaxLength:WMEURMPT.PURNameMaxLength, taggedURList:WMEURMPT.taggedURList, URAgeColIsLastComment:WMEURMPT.URAgeColIsLastComment}; WMEURMPT.log("save options: ", options); GMStorageHelper.save("WMEURMPTracking_options", JSON.stringify(options)); }; WMEURMPT.saveAreas = function() { GMStorageHelper.save("WMEURMPTracking_areaList", JSON.stringify(WMEURMPT.areaList, function(key, value) { if (key == "geometryOL") { return; } return value; })); }; WMEURMPT.saveURList = function() { GMStorageHelper.save("WMEURMPTracking_URList", JSON.stringify(WMEURMPT.URList)); }; WMEURMPT.saveMPList = function() { GMStorageHelper.save("WMEURMPTracking_MPList", JSON.stringify(WMEURMPT.MPList)); }; WMEURMPT.saveMCList = function() { GMStorageHelper.save("WMEURMPTracking_MCList", JSON.stringify(WMEURMPT.MCList)); }; WMEURMPT.savePURList = function() { GMStorageHelper.save("WMEURMPTracking_PURList", JSON.stringify(WMEURMPT.PURList)); }; WMEURMPT.saveURMPLists = function() { WMEURMPT.saveURList(); WMEURMPT.saveMPList(); WMEURMPT.saveMCList(); WMEURMPT.savePURList(); }; WMEURMPT.save = function() { delete localStorage.WMEURTracking_options; delete localStorage.WMEURTracking_URList; delete localStorage.WMEURTracking_MPList; delete localStorage.WMEURMPTracking_URList; delete localStorage.WMEURMPTracking_MPList; delete localStorage.WMEURMPTracking_PURList; delete localStorage.WMEURMPTracking_options; delete localStorage.WMEURMPTracking_URList_z; delete localStorage.WMEURMPTracking_MPList_z; WMEURMPT.saveOptions(); WMEURMPT.saveAreas(); WMEURMPT.saveURMPLists(); WMEURMPT.log("Options and data saved"); }; WMEURMPT.optionsLoaded = function(data) { if (data.data != null) { var options = JSON.parse(data.data); WMEURMPT.log("GM options:", options); WMEURMPT.currentURFilter = typeof options.filterUR === "undefined" ? WMEURMPT.URFilterList.hideClosed + WMEURMPT.URFilterList.hideBlacklisted : options.filterUR; WMEURMPT.currentMPFilter = typeof options.filterMP === "undefined" ? WMEURMPT.MPFilterList.hideClosed + WMEURMPT.MPFilterList.hideBlacklisted : options.filterMP; WMEURMPT.currentMCFilter = typeof options.filterMC === "undefined" ? WMEURMPT.MCFilterList.hideBlacklisted : options.filterMC; WMEURMPT.currentPURFilter = typeof options.filterPUR === "undefined" ? WMEURMPT.PURFilterList.hideBlacklisted : options.filterPUR; WMEURMPT.currentURKeyWord = typeof options.filterURKeyword === "undefined" ? WMEURMPT.loginManager.user.userName : options.filterURKeyword; WMEURMPT.currentMCKeyWord = typeof options.filterMCKeyword === "undefined" ? WMEURMPT.loginManager.user.userName : options.filterMCKeyword; WMEURMPT.currentPURKeyWord = typeof options.filterPURKeyword === "undefined" ? WMEURMPT.loginManager.user.userName : options.filterPURKeyword; WMEURMPT.currentURLimitTo = typeof options.filterURLimitTo === "undefined" ? 100 : options.filterURLimitTo; WMEURMPT.currentMPLimitTo = typeof options.filterMPLimitTo === "undefined" ? 100 : options.filterMPLimitTo; WMEURMPT.currentMCLimitTo = typeof options.filterMCLimitTo === "undefined" ? 100 : options.filterMCLimitTo; WMEURMPT.currentPURLimitTo = typeof options.filterPURLimitTo === "undefined" ? 100 : options.filterPURLimitTo; WMEURMPT.displayLegend = typeof options.displayLegend === "undefined" ? true : options.displayLegend; WMEURMPT.isEnabled = typeof options.isEnabled === "undefined" ? true : options.isEnabled; WMEURMPT.countryFilterList = typeof options.countryFilterList === "undefined" ? [] : options.countryFilterList; WMEURMPT.isComputeDistances = typeof options.isComputeDistances === "undefined" ? true : options.isComputeDistances; WMEURMPT.isAutoScan = typeof options.isAutoScan === "undefined" ? true : options.isAutoScan; WMEURMPT.scanUR = typeof options.scanUR === "undefined" ? true : options.scanUR; WMEURMPT.scanMP = typeof options.scanMP === "undefined" ? true : options.scanMP; WMEURMPT.scanMC = typeof options.scanMC === "undefined" ? true : options.scanMC; WMEURMPT.scanPUR = typeof options.scanPUR === "undefined" ? true : options.scanPUR; WMEURMPT.currentUROnlyType = typeof options.filterUROnlyType === "undefined" ? WMEURMPT.currentUROnlyType : options.filterUROnlyType; WMEURMPT.currentMPOnlyType = typeof options.filterMPOnlyType === "undefined" ? WMEURMPT.currentMPOnlyType : options.filterMPOnlyType; WMEURMPT.currentPUROnlyCategorie = typeof options.filterPUROnlyCategorie === "undefined" ? WMEURMPT.currentPUROnlyCategorie : options.filterPUROnlyCategorie; WMEURMPT.currentUROnlyArea = typeof options.filterUROnlyArea === "undefined" ? WMEURMPT.currentUROnlyArea : options.filterUROnlyArea; WMEURMPT.currentMPOnlyArea = typeof options.filterMPOnlyArea === "undefined" ? WMEURMPT.currentMPOnlyArea : options.filterMPOnlyArea; WMEURMPT.currentMCOnlyArea = typeof options.filterMCOnlyArea === "undefined" ? WMEURMPT.currentMCOnlyArea : options.filterMCOnlyArea; WMEURMPT.currentPUROnlyArea = typeof options.filterPUROnlyArea === "undefined" ? WMEURMPT.currentPUROnlyArea : options.filterPUROnlyArea; WMEURMPT.currentURCommentsCount = typeof options.filterURCommentsCount === "undefined" ? WMEURMPT.currentURCommentsCount : options.filterURCommentsCount; WMEURMPT.URDescriptionMaxLength = typeof options.URDescriptionMaxLength === "undefined" ? WMEURMPT.URDescriptionMaxLength : options.URDescriptionMaxLength; WMEURMPT.MPDescriptionMaxLength = typeof options.MPDescriptionMaxLength === "undefined" ? WMEURMPT.MPDescriptionMaxLength : options.MPDescriptionMaxLength; WMEURMPT.MCSubjectMaxLength = typeof options.MCSubjectMaxLength === "undefined" ? WMEURMPT.MCSubjectMaxLength : options.MCSubjectMaxLength; WMEURMPT.MCBodyMaxLength = typeof options.MCBodyMaxLength === "undefined" ? WMEURMPT.MCBodyMaxLength : options.MCBodyMaxLength; WMEURMPT.PURCategoriesMaxLength = typeof options.PURCategoriesMaxLength === "undefined" ? WMEURMPT.PURCategoriesMaxLength : options.PURCategoriesMaxLength; WMEURMPT.PURNameMaxLength = typeof options.PURNameMaxLength === "undefined" ? WMEURMPT.PURNameMaxLength : options.PURNameMaxLength; WMEURMPT.taggedURList = typeof options.taggedURList === "undefined" ? WMEURMPT.taggedURList : options.taggedURList; WMEURMPT.URAgeColIsLastComment = typeof options.URAgeColIsLastComment === "undefined" ? WMEURMPT.URAgeColIsLastComment : options.URAgeColIsLastComment; } }; WMEURMPT.urlistLoaded = function(data) { if (data.data != null) { WMEURMPT.URList = JSON.parse(data.data); for (var i = 0; i < WMEURMPT.URList.length; i++) { var urtmp = new WMEURMPT.URT_UR(WMEURMPT.URList[i].id, WMEURMPT.URList[i].lonlat.lon, WMEURMPT.URList[i].lonlat.lat); WMEURMPT.URList[i].refreshFromServer = urtmp.refreshFromServer; WMEURMPT.URList[i].refreshFromWMEData = urtmp.refreshFromWMEData; WMEURMPT.URList[i].clean = urtmp.clean; WMEURMPT.URList[i].updateDistanceToMapCenter = urtmp.updateDistanceToMapCenter; if (WMEURMPT.URList[i].hasOwnProperty("lastVisitCommentsCount") == false) { WMEURMPT.URList[i].lastVisitCommentsCount = 0; } if (WMEURMPT.URList[i].data.hasOwnProperty("session") == false) { WMEURMPT.log("Bad UR record. Trying to fix it...", WMEURMPT.URList[i].data); WMEURMPT.URList[i].refreshFromServer(); WMEURMPT.log("Bad UR record. should be fixed:", WMEURMPT.URList[i].data); } } WMEURMPT.URMap = WMEURMPT.listToObject(WMEURMPT.URList); } }; WMEURMPT.mplistLoaded = function(data) { if (data.data != null) { WMEURMPT.MPList = JSON.parse(data.data); for (var i = 0; i < WMEURMPT.MPList.length; i++) { var mptmp = new WMEURMPT.URT_MP(WMEURMPT.MPList[i].id, WMEURMPT.MPList[i].lonlat.lon, WMEURMPT.MPList[i].lonlat.lat); WMEURMPT.MPList[i].refreshFromServer = mptmp.refreshFromServer; WMEURMPT.MPList[i].refreshFromWMEData = mptmp.refreshFromWMEData; WMEURMPT.MPList[i].clean = mptmp.clean; WMEURMPT.MPList[i].updateDistanceToMapCenter = mptmp.updateDistanceToMapCenter; } WMEURMPT.MPMap = WMEURMPT.listToObject(WMEURMPT.MPList); } }; WMEURMPT.mclistLoaded = function(data) { if (data.data != null) { WMEURMPT.MCList = JSON.parse(data.data); for (var i = 0; i < WMEURMPT.MCList.length; i++) { var mctmp = new WMEURMPT.URT_MC(WMEURMPT.MCList[i].id, WMEURMPT.MCList[i].lonlat.lon, WMEURMPT.MCList[i].lonlat.lat); if (WMEURMPT.MCList[i].hasOwnProperty("lastVisitCommentsCount") == false) { WMEURMPT.MCList[i].lastVisitCommentsCount = 0; } WMEURMPT.MCList[i].refreshFromServer = mctmp.refreshFromServer; WMEURMPT.MCList[i].refreshFromWMEData = mctmp.refreshFromWMEData; WMEURMPT.MCList[i].clean = mctmp.clean; WMEURMPT.MCList[i].updateDistanceToMapCenter = mctmp.updateDistanceToMapCenter; } WMEURMPT.MCMap = WMEURMPT.listToObject(WMEURMPT.MCList); } }; WMEURMPT.purlistLoaded = function(data) { if (data.data != null) { WMEURMPT.PURList = JSON.parse(data.data); for (var i = 0; i < WMEURMPT.PURList.length; i++) { var purtmp = new WMEURMPT.URT_PUR(WMEURMPT.PURList[i].id, WMEURMPT.PURList[i].lonlat.lon, WMEURMPT.PURList[i].lonlat.lat); WMEURMPT.PURList[i].refreshFromServer = purtmp.refreshFromServer; WMEURMPT.PURList[i].refreshFromWMEData = purtmp.refreshFromWMEData; WMEURMPT.PURList[i].clean = purtmp.clean; WMEURMPT.PURList[i].updateDistanceToMapCenter = purtmp.updateDistanceToMapCenter; } WMEURMPT.PURMap = WMEURMPT.listToObject(WMEURMPT.PURList); } }; WMEURMPT.arealistLoaded = function(data) { if (data.data != null) { WMEURMPT.areaList = JSON.parse(data.data); for (var c = 0; c < WMEURMPT.areaList.country.length; c++) { var areatmp = new WMEURMPT.URT_AREA; WMEURMPT.areaList.country[c].geometryOL = null; WMEURMPT.areaList.country[c].getGeometryFromServer = areatmp.getGeometryFromServer; WMEURMPT.areaList.country[c].getCategoryElementsFromServer = areatmp.getCategoryElementsFromServer; WMEURMPT.areaList.country[c].isInside = areatmp.isInside; } for (var c = 0; c < WMEURMPT.areaList.custom.length; c++) { var areatmp = new WMEURMPT.URT_AREA; WMEURMPT.areaList.custom[c].geometryOL = null; WMEURMPT.areaList.custom[c].getGeometryFromServer = areatmp.getGeometryFromServer; WMEURMPT.areaList.custom[c].getCategoryElementsFromServer = areatmp.getCategoryElementsFromServer; WMEURMPT.areaList.custom[c].isInside = areatmp.isInside; } } window.setTimeout(WMEURMPT.initialiseURT, 1000); }; WMEURMPT.load = function() { try { WMEURMPT.dictionary['"' + WMEURMPT.me.userName + '"'] = "~Z"; var revDictionnary = WMEURMPT.invertObject(WMEURMPT.dictionary); GMStorageHelper.load("WMEURMPTracking_options", WMEURMPT.optionsLoaded); GMStorageHelper.load("WMEURMPTracking_URList", WMEURMPT.urlistLoaded); GMStorageHelper.load("WMEURMPTracking_MPList", WMEURMPT.mplistLoaded); GMStorageHelper.load("WMEURMPTracking_MCList", WMEURMPT.mclistLoaded); GMStorageHelper.load("WMEURMPTracking_PURList", WMEURMPT.purlistLoaded); GMStorageHelper.load("WMEURMPTracking_areaList", WMEURMPT.arealistLoaded); } catch (err) { WMEURMPT.log("Error while loading data from storage: ", err); } }; WMEURMPT.PopupPannel = function(name, w, h, bgcolor) { this.name = name; this.w = w; this.h = h; this.pannel_elt = WMEURMPT.createElement("div", "popup-pannel-" + name); this.pannel_elt.className = "popup-pannel-class-" + name; this.pannel_elt.style.width = w; this.pannelTrigger_elt = WMEURMPT.createElement("div", "popup-pannel-trigger-" + name); this.pannelTrigger_elt.className = "popup-pannel-trigger-class-" + name; this.pannelTrigger_elt.onclick = WMEURMPT.getFunctionWithArgs(trigger_mouseover, [name, w, h]); this.pannelTrigger_elt.style.backgroundColor = bgcolor; this.pannelContents_elt = WMEURMPT.createElement("div", "popup-pannel-contents-" + name); this.pannelContents_elt.className = "popup-pannel-contents-closed-class-" + name; this.pannelContents_elt.style.backgroundColor = bgcolor; this.pannel_elt.appendChild(this.pannelTrigger_elt); this.pannel_elt.appendChild(this.pannelContents_elt); this.installInside = installInside; this.setTriggerInnerHTML = setTriggerInnerHTML; this.setContentsInnerHTML = setContentsInnerHTML; function trigger_mouseover(name, w, h) { var elt = document.getElementById("popup-pannel-contents-" + name); elt.style.width = w; elt.style.height = h; elt.className = "popup-pannel-contents-open-class-" + name; var triggerElt = document.getElementById("popup-pannel-trigger-" + name); triggerElt.style.borderBottomRightRadius = "0px"; triggerElt.style.borderBottomLeftRadius = "0px"; window.setTimeout(function() { document.getElementById("popup-pannel-contents-" + name).onmouseleave = function(e) { var elementMouseIsOver = document.elementFromPoint(e.clientX, e.clientY); if (WMEURMPT.isDescendant(this, elementMouseIsOver)) { return; } pannel_mouseleave(name); }; document.getElementById("popup-pannel-" + name).onmouseleave = function(e) { var elementMouseIsOver = document.elementFromPoint(e.clientX, e.clientY); if (WMEURMPT.isDescendant(this, elementMouseIsOver)) { return; } pannel_mouseleave(name); }; }, 100); } function pannel_mouseleave(name) { var elt = document.getElementById("popup-pannel-contents-" + name); elt.style.width = "0px"; elt.style.height = "0px"; elt.className = "popup-pannel-contents-closed-class-" + name; var triggerElt = document.getElementById("popup-pannel-trigger-" + name); triggerElt.style.borderBottomRightRadius = "5px"; triggerElt.style.borderBottomLeftRadius = "5px"; document.getElementById("popup-pannel-contents-" + name).onmouseleave = null; document.getElementById("popup-pannel-" + name).onmouseleave = null; } function setTriggerInnerHTML(htmltext) { this.pannelTrigger_elt.innerHTML = htmltext; } function setContentsInnerHTML(htmltext) { this.pannelContents_elt.innerHTML = htmltext; } function installInside(node) { var cssElt = WMEURMPT.createElement("style"); cssElt.type = "text/css"; var css = ""; css += ".popup-pannel-class-" + this.name + " { margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; padding-bottom: 2px; padding-top: 2px; padding-left: 5px; padding-right: 5px; }"; css += ".popup-pannel-trigger-class-" + this.name + " { cursor: pointer; align: right; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; padding-bottom: 2px; padding-top: 2px; padding-left: 5px; padding-right: 5px;}"; css += ".popup-pannel-contents-closed-class-" + this.name + " { float: left; position: relative; left: 0px; width: 0px; height: 0px; overflow: hidden;}"; css += ".popup-pannel-contents-open-class-" + this.name + " { float: left; position: relative; left: 0px; width: 0px; height: 0px; overflow: hidden; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; padding-bottom: 2px; padding-top: 2px; padding-left: 5px; padding-right: 5px;}"; cssElt.innerHTML = css; document.body.appendChild(cssElt); node.appendChild(this.pannel_elt); } }; WMEURMPT.dict_traduce = function(str, dict) { str = str.replace(/,"distanceToMapCenter":\d*\.\d*/g, ""); str = str.replace(/,"descriptionOffset":-?\d*/g, ""); str = str.replace(/(\d*\.\d{6})\d+/g, "$1"); for (var word in dict) { if (dict.hasOwnProperty(word)) { str = str.replace(new RegExp(word, "g"), dict[word]); } } return str; }; WMEURMPT.dictionary = {'"lonlat":':"~a", '"blackListed":':"~b", '"alreadyVisited":':"~c", '"lon":':"~d", '"lat":':"~e", '"data":':"~f", '"description":':"~g", '"driveDate":':"~h", '"hasComments":':"~i", '"resolution":':"~j", '"resolvedBy":':"~k", '"resolvedOn":':"~l", '"type":':"~m", '"updatedBy":':"~n", '"updatedOn":':"~o", '"resolvedByName":':"~p", '"session":':"~q", '"comments":':"~r", '"mapUpdateRequestID":':"~s", '"createdOn":':"~t", '"userID":':"~v", '"text":':"~w", '"userName":':"~x", '"isFollowing":':"~y", "false":"~z", "true":"~A", '"open":':"~B", "null":"~C", '"problem":':"~D", '"priority":':"~E", '"problemType":':"~F", '"weight":':"~G", '"id":':"~H", '"descriptionOffset":':"~I", '"Reporter"':"~J", '"Unknown"':"~K", '"updated":':"~L", '"rank":':"~M", '"permissions":':"~N", '"version":':"~O", '"isReporterFollowing":':"~P", '"lastVisitCommentsCount":':"~Q", '"problem"':"~R", '"turnProblem"':"~S"}; WMEURMPT.rl4cp = 2; WMEURMPT.shuffleArray(WMEURMPT.servers); WMEURMPT.log("Ready"); WMEURMPT.bootstrapURT(); } var WMEURMPT_Injected_script = document.createElement("script"); WMEURMPT_Injected_script.textContent = "" + WMEURMPT_Injected.toString() + " \n" + "WMEURMPT_Injected();"; WMEURMPT_Injected_script.setAttribute("type", "application/javascript"); document.body.appendChild(WMEURMPT_Injected_script);