WME Color Errors

Colorisation pour afficher les erreurs

目前为 2024-03-06 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name WME Color Errors
  3. // @version 2024.03.06.01
  4. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAALuSURBVHja7Jots6swEIb7x6qiUFVVUVEoVBSqKioqU8EfqKpCRaE6FShMo5gjUCiOYebOzTXnvaKlhR44LbS9vcyQmVWdbt5nd7P5GGbr/eFjvT98jtQ+Zuv9oVzvDxiplbMTyVgBPieACWACmADeD/Bn7ABfE8D77PfYAfBUgFCt4DEKZz7H/Js5oMzDSoXPBPh6GCBSHAvSJviGkQW4it4HECmvI9IncygYY2ALcgPGgTccpD9AkQRwf4g4cQPEWYnzsDHkXRlxESTFawFixUDOkxIwIeEvLiKojFFclKPIDOJwhWWX6AWHWF35VPFrAEJeKwXHw9aUsIm8TO6GyE7S80iA3bUuCGRiUZotPKeWRR4+F0DXxBMeIrNHoUaRhhAAKCJei+htI8ocnZUGG7c+j34OQF08FTvk5xLJELJKiEICAEixWfbsRuySOSDHTtA+ED8D5Jo3nF3EA4CBqkR4p98KDd63nc4VTMNv3gga1/lwALeahCoYi6tRA5hzhFmJPFr1Kp92AADWQNHqd3cYQORX7Y1D52gZObQ3YAO7Nu86s5X7Wjb9qD/AOboihkX7SDfLhwGWm7TDu0UsLlnqDbATVR1SKGO7CEAfAqDo0m+NOvsmYjdsDXByq4wsYkkGAxDZkd1cN+YevIgbPb11IV8vuB52lz8CHhWP7QNG1foyC5CULZMWMWQfCCoRFy1+ygQBq+07yjxnJ65vLnMqELWVk82gBbvRRh24MuroOhFELQi0u+6HnYViSRuLT+gUbclAmSEOFVYeOx6nGQPzJbY6Qdb+B6RaNJoBlfFrTqNZ6DfuAIQJ6LTE0FGmGoKRRob8MHv9haY56RxkwaG0QV7am6JtkSHRCvzqokOY+Lc3slR3HJkdCuatoIIAwdmOJUWdtosMg9Dp++7EpiWad+0Bp6z9V68S6/0BgfTBvr1MOKCMwZfBs59Vfs3G/CZUvczZ6XV6ApgAJoAJYAIYM8DoP/YY9ec2fwcAaebQXj6i79wAAAAASUVORK5CYII=
  5. // @description Colorisation pour afficher les erreurs
  6. // @include https://www.waze.com/editor*
  7. // @include https://www.waze.com/*/editor*
  8. // @include https://beta.waze.com/*
  9. // @exclude https://www.waze.com/user/*
  10. // @exclude https://www.waze.com/*/user/*
  11. // @namespace https://greasyfork.org/fr/scripts/21186-wme-color-errors
  12. // @author Sebiseba / MatthieuF44 par intérim :)
  13. // @copyright Sebiseba 2014-2023
  14. // @license GNU GPL v2
  15. // @grant none
  16. // ==/UserScript==
  17. var WMECErrors={}, ColorErrors_mapLayer=[], CErrLeg, CErrSeg, CErrPoi, debug="true";
  18. var ActiveCountry, ABBR, UpdateObject, cntryDB = {
  19. FR: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0 },
  20. GP: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0 },
  21. MB: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0 },
  22. FG: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0 },
  23. RE: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0 },
  24. FP: { str_lvl:0, pri_lvl:2, min_lvl:3, maj_lvl:4, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0 },
  25. BE: { str_lvl:null, pri_lvl:1, min_lvl:2, maj_lvl:3, rmp_lvl:4, fwy_lvl:4, rwy_lvl:4, nar_lvl:0 }
  26. }; // France
  27. var CErrWaze, CErrorsMap, CErrorsModel, CErrorsI18n, CErrorsOpenLayers, CErrorshandle, CErrorshandleClass, CErrorshandleClass2,
  28.  
  29. //french rules
  30. streetNameSeg="^(^Le |^La |^Les |Grande |Allée |[ ]?Avenue[]?|Boulevard |Chemin |Cité |Clos |Côte |Cour[s]? |Descente |Domaine |Hameau |Impasse |Levée |Lotissement |Mail |Montée |Parc |Parvis |Passage |Place |Placette |Pont |Promenade |Quai |Résidence[s]? |Route |[ ]?Rue[ ]?|Ruelle |Sente |Sentier |Square |Terrasse |Traverse |Venelle |Villa |Voie )",
  31. parkNameSeg="^(Aire |Place |Square )",
  32. excepNameSeg="(Périphérique |Rocade |Duplex |Tunnel |Pont )",
  33. privNameSeg="^(Allée |Avenue |Boulevard |Chemin |Clos |Côte |Cours |Faubourg |Hameau |Impasse |Lotissement |Mail |Parvis |Passage |Port |Porte |Promenade |Quai |Route |Rue |Ruelle |Sente |Sentier |Terrasse |Voie )",
  34. parkNamePoi="(Parking[s]?|Parc-Relais|Placette|Aire|Arrêt|Emplacement)",
  35. religiousPoi="(Abbatiale |Abbaye |Basilique |Calvaire |Carmel |Cathédrale |Chapelle |Cloître |Collégiale |Conjuratoire |Couvent |Crypte |Dôme |Église |Grande Mosquée |Grotte |Mandir |Maison Diocésaine |Monastère |Mosquée |Notre-Dame |Oratoire |Ordre |Pagode |Paroisse |Presbytère |Prieuré |Sanctuaire |Stupa |Synagogue |Temple )",
  36. busPoi="(Bus[ ][-][ ]|Gare Routière)",
  37. tramPoi="(Tramway[ ][-][ ]|Métro[ ][-][ ])",
  38. possibleTransPoi="(Tram$|Métro$|Arrêt$|Gare$|Station$|Tram |Métro |Arrêt |Gare |Station )",
  39.  
  40. // common all countries
  41. stationsPoi="(CAR_WASH|CHARGING_STATION|FACTORY_INDUSTRIAL|GAS_STATION|JUNCTION_INTERCHANGE|PARKING_LOT|SEAPORT_MARINA_HARBOR|SKI_AREA|SUPERMARKET_GROCERY|TAXI_STATION|TRANSPORTATION|TRASH_AND_RECYCLING_FACILITIES)",
  42. landmarkPoi="(RIVER_STREAM|CANAL|SEA_LAKE_POOL|SWAMP_MARSH|ISLAND|FOREST_GROVE|BRIDGE)",
  43. excepCatPoi="(RIVER_STREAM|CANAL|SEA_LAKE_POOL|SWAMP_MARSH|ISLAND|FOREST_GROVE|BRIDGE|PARK|JUNCTION_INTERCHANGE|CEMETERY|TUNNEL)",
  44. entryPointPoi="(BRIDGE|CANAL|FOREST_GROVE|ISLAND|JUNCTION_INTERCHANGE|POOL|RIVER_STREAM|SEA_LAKE_POOL|SWAMP_MARSH|TUNNEL)",
  45. wazeBot="(admin|avseu|WazeFeed|waze-maint-bot|Waze3rdparty|evcs feed 1)";
  46.  
  47. // *********************
  48. // ** HELPER FUNCTION **
  49. // *********************
  50. function getId(node) {
  51. return document.getElementById(node);
  52. }
  53. function getElementsByClassName(classname, node) {
  54. node || (node=document.getElementsByTagName("body")[0]);
  55. for (var a=[], re=new RegExp("\\b" + classname + "\\b"), els=
  56. node.getElementsByTagName("*"), i=
  57. 0, j=
  58. els.length;i < j;i++) {
  59. re.test(els[i].className) && a.push(els[i]);
  60. }
  61. return a;
  62. }
  63. function IsJsonString(str) {
  64. try {
  65. JSON.parse(str);
  66. } catch (e) {
  67. return false;
  68. }
  69. return true;
  70. }
  71. function getSelectedDataModelObjects(){
  72. return W.selectionManager.getSelectedDataModelObjects();
  73. }
  74. function openInNewTab(url) {
  75. var win = window.open('https://wazeopedia.waze.com/wiki/France/' + url, '_blank');
  76. win.focus();
  77. }
  78. function onScreen(obj) {
  79. if (obj.getOLGeometry()) {
  80. return(W.map.getExtent().intersectsBounds(obj.getOLGeometry().getBounds()));
  81. }
  82. return(false);
  83. }
  84.  
  85. // *************
  86. // ** INIT **
  87. // *************
  88. function CErrors_bootstrap() {
  89. console.log("starting WME Color Errors", GM_info.script.version);
  90. CErrors_init();
  91. fixTel();
  92. }
  93. function CErrors_init(){
  94. // W object needed
  95. CErrWaze=W; if(typeof(CErrWaze) === 'undefined'){ if (debug) { console.error("WME ColorErrors - CErrWaze : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  96. CErrorsMap=CErrWaze.map; if(typeof(CErrorsMap) == 'undefined'){ if (debug) { console.error("WME ColorErrors - CErrorsmap : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  97. CErrorsModel=CErrWaze.model; if(typeof(CErrorsModel) == 'undefined'){ if (debug) { console.error("WME ColorErrors - CErrorsmodel : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  98. if(typeof(CErrorsModel.getTopCountry()) === 'undefined' || CErrorsModel.getTopCountry() === null){ if (debug) { console.error("WME ColorErrors - CErrorsmodel Countries top : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  99. CErrorsI18n=I18n; if(typeof (CErrorsI18n) == 'undefined') { if (debug) { console.error('WME ColorErrors - CErrorsI18n : NOK'); } setTimeout(CErrors_init, 500); return; }
  100. // OpenLayers
  101. CErrorsOpenLayers=OpenLayers; if(typeof(CErrorsOpenLayers) === 'undefined'){ if (debug) { console.error("WME ColorErrors - OL : NOK"); } window.setTimeout(CErrors_init, 500); return; }
  102. // Waze GUI needed
  103. CErrorshandle=getId("user-info"); if(typeof(CErrorshandle) == 'undefined'){ window.setTimeout(CErrors_init, 500); return; }
  104. CErrorshandleClass=getElementsByClassName("nav-tabs", CErrorshandle)[0]; if(typeof(CErrorshandleClass) === 'undefined'){ window.setTimeout(CErrors_init, 500); return; }
  105. CErrorshandleClass2=getElementsByClassName("tab-content", CErrorshandle)[0]; if(typeof(CErrorshandleClass2) === 'undefined'){ window.setTimeout(CErrors_init, 500); return; }
  106.  
  107. // Verify localStorage. Init if empty or not correct
  108. if (typeof(localStorage.WMEColorErrors) === "undefined" || localStorage.WMEColorErrors.lenght===null || !IsJsonString(localStorage.WMEColorErrors)) {
  109. WMECErrors.opacity=0.85; // Icons Opacity on map
  110. WMECErrors.myLvl=false; // Show when editable
  111. WMECErrors.seg_Bad=false; // Bad Segments (group)
  112. WMECErrors.seg_Priv=true; // Private with bad name
  113. WMECErrors.seg_Park=true; // Parking with name (but Place / Square)
  114. WMECErrors.seg_Rail=true; // Railroad with bad name
  115. WMECErrors.seg_HW_name=true; //Highways with bad name
  116. WMECErrors.seg_Dir_name=true; // Directions but not Ramp/Freeway
  117. WMECErrors.seg_Toll=true; // Toll (but Ramp/Freeway)
  118. WMECErrors.seg_Ramp_name=true; // Ramp with 3 directions or more
  119. WMECErrors.seg_Ramp_city=true; // Ramp with city name
  120. WMECErrors.seg_RShield=true; // Wrong prefix
  121. WMECErrors.seg_RSAlt=true; //Roadshield must be in alt
  122. WMECErrors.seg_SNameAlt=true; //Road name must be in alt
  123. WMECErrors.seg_DleSpace=true; // Double space in name
  124. WMECErrors.seg_SegBadRS=true; // RoadShield but bad type
  125. WMECErrors.seg_SegRSWithoutCity=true; // RoadShield without city in alt
  126. WMECErrors.seg_HNFree=true; // House number on Freeway or ramp
  127. WMECErrors.seg_BadSpeed=true; // Bad speed (ex: >80km/h in city)
  128. WMECErrors.seg_BadAltState=true; // Alt State != Main State
  129. WMECErrors.seg_EmptyCityAlt=true; // Alt City is empty
  130. WMECErrors.seg_LockValue=true; // Bad lock
  131. // POI
  132. WMECErrors.poi_Bad=false; // Bad POI (group)
  133. WMECErrors.poi_Park_name=true; // Parking with [P]
  134. WMECErrors.poi_Address=true; // Dxxx/Nxxx in or no address
  135. WMECErrors.poi_Entry=true; // Entry Point not defined
  136. WMECErrors.poi_LandM=true; // Landmark with address (street |& city)
  137. WMECErrors.poi_DleSpace=true; // Double space in name
  138. // Low errors
  139. WMECErrors.poi_Resid=true; // Maybe a residential
  140. WMECErrors.poi_Google=true; // No link with Google
  141. WMECErrors.poi_Phone=true; // bad phone number format
  142. WMECErrors.poi_WFeed=true; // Place created by WazeFeed
  143. WMECErrors.poi_WPark=true; // Place created by WazeParking1
  144. WMECErrors.poi_Relig=true; // Religious Center with bad name
  145. WMECErrors.poi_Transp=true; // Bad type or bad name for Buses, Subway or Tramway
  146. WMECErrors.poi_GasSta=true; // Gas Station with bad name
  147. WMECErrors.poi_Other=true; // Place "Other"
  148. //Autolock
  149. WMECErrors.autoLock=true; // Autolock
  150. localStorage.setItem('WMEColorErrors', JSON.stringify(WMECErrors));
  151. }
  152.  
  153. // WME Layers check
  154. var layersColor=CErrorsMap.getLayersBy("uniqueName","__WME_Color_Errors"), layersIcons=CErrorsMap.getLayersBy("uniqueName","__WME_Color_Errors_Icons");
  155. var ColorErrors_style=new CErrorsOpenLayers.Style({
  156. pointRadius: 2,
  157. fontWeight: "normal",
  158. label : "${labelText}",
  159. fontFamily: "Tahoma, Courier New",
  160. labelOutlineColor: "#FFFFFF",
  161. labelOutlineWidth: 2,
  162. fontColor: '#000000',
  163. fontSize: "10px"
  164. });
  165. if (layersColor.length === 0) {
  166. ColorErrors_mapLayer=new CErrorsOpenLayers.Layer.Vector("Color Errors", {
  167. displayInLayerSwitcher: false,
  168. uniqueName: "__WME_Color_Errors",
  169. styleMap: new CErrorsOpenLayers.StyleMap(ColorErrors_style)
  170. });
  171. CErrorsI18n.translations[CErrorsI18n.locale].layers.name["__WME_Color_Errors"]="Color Errors";
  172. CErrorsMap.addLayer(ColorErrors_mapLayer);
  173. ColorErrors_mapLayer.setVisibility(true);
  174. }
  175. if (layersIcons.length === 0) {
  176. ColorErrors_mapLayerIcons=new CErrorsOpenLayers.Layer.Vector("Color Errors Icons", {
  177. displayInLayerSwitcher: false,
  178. uniqueName: "__WME_Color_Errors_Icons",
  179. styleMap: new CErrorsOpenLayers.StyleMap(ColorErrors_style)
  180. });
  181. CErrorsI18n.translations[CErrorsI18n.locale].layers.name["__WME_Color_Errors_Icons"]="Color Errors Icons";
  182. CErrorsMap.addLayer(ColorErrors_mapLayerIcons);
  183. ColorErrors_mapLayerIcons.setVisibility(true);
  184. }
  185. UpdateObject = require("Waze/Action/UpdateObject");
  186. ActiveCountry = W.model.getTopCountry().attributes.abbr;
  187. ABBR = cntryDB[ActiveCountry];
  188. CErrors_Mainhtml();
  189. }
  190. function CErrAddInfo(){
  191. if (getSelectedDataModelObjects().length !== 0 && !getId('ErrorsList')) {
  192. var CEtest = document.createElement('li');
  193. CEtest.id = "ErrorsList";
  194. if(getElementsByClassName('additional-attributes')[0]) getElementsByClassName('additional-attributes')[0].appendChild(CEtest);
  195. }
  196. }
  197.  
  198. // *************
  199. // ** HTML **
  200. // *************
  201. function CErrors_Mainhtml() {
  202. if (CErrorsI18n.locale == 'fr') {
  203. CErrSeg=new Array('Contrôle des segments',
  204. 'Mauvais segments',
  205. 'Voie privée avec possible mauvais nom',
  206. 'Voie de Parking nommée',
  207. 'Voie ferrée nommée ou nom en alt',
  208. 'Types Routes avec mauvais nom',
  209. 'Bretelle avec plusieurs directions',
  210. 'Direction (sauf bretelle et Autoroute)',
  211. 'Mauvais préfixe (RoadShield)',
  212. 'Double espace dans le nom',
  213. 'Péage (sauf bretelle et Autoroute)',
  214. 'Bretelle/Autoroute avec nom de ville',
  215. 'Le RoadShield doit être en alt',
  216. 'Le nom de route doit être en alt',
  217. 'RoadShield sur mauvais type de voie',
  218. 'N° de rue sur mauvais type de voie',
  219. 'Mauvaise vitesse validée',
  220. 'Département alt différent du principal',
  221. 'Lock non conforme (Auto ou valeur)',
  222. 'Alt non conforme',
  223. 'RoadShield sans ville en alt'
  224. );
  225. CErrPoi=new Array('Contrôle des places',
  226. 'Mauvaises places',
  227. 'Parking mal nommé ou sans nom',
  228. 'Pas d\'adresse ou contenant Dxxx/Nxxx',
  229. 'Point d\'entrée non défini',
  230. 'Site naturel avec adresse',
  231. 'Double espace dans le nom',
  232. 'Peut-être une place résidentielle',
  233. 'Pas de lien avec Google',
  234. 'Lieu édité par WazeFeed',
  235. 'Lieu de type "Autres"',
  236. 'Lieu édité par WazeParking1',
  237. 'Parking : type non défini',
  238. 'Mauvais format du n° de tel',
  239. 'Lieu de culte (nom ou catégorie)',
  240. 'Transport (nom ou catégorie)',
  241. 'Station-Service mal nommée',
  242. );
  243. CErrLeg=new Array('Légende',
  244. 'A corriger',
  245. 'A vérifier',
  246. 'Pour information',
  247. 'Réglages',
  248. 'Opacité des icônes',
  249. 'Afficher seulements les éditables',
  250. 'Verrouillé par la publicité',
  251. 'Auto-verrouillage'
  252. );
  253. }
  254. else {
  255. CErrSeg=new Array('Segments Checking',
  256. 'Bad Segments',
  257. 'Private with possible bad name',
  258. 'Parking with bad name or without',
  259. 'Railroad with name or altname',
  260. 'Highways with bad name',
  261. 'Ramp with several directions',
  262. 'Direction (but Ramp/Freeway)',
  263. 'Wrong prefix (RoadShield)',
  264. 'Double spacing in name',
  265. 'Toll (but Ramp/Freeway)',
  266. 'Ramp/Freeway with city name',
  267. 'RoadShield must be in alt',
  268. 'Road name must be in alt',
  269. 'RoadShield but bad type',
  270. 'HN but bad type',
  271. 'Bad speed verified',
  272. 'Alt State dirrent to Main State',
  273. 'Bad lock (Auto or value)',
  274. 'Bad Alt',
  275. 'RoadShield without city in alt'
  276. );
  277. CErrPoi=new Array('Places Checking',
  278. 'Bad Places',
  279. 'Parking with bad name or null',
  280. 'No address or Dxxx/Nxxx within',
  281. 'Entry Point not defined',
  282. 'Natural features with address',
  283. 'Double spacing in name',
  284. 'Maybe a residential place',
  285. 'No link with Google',
  286. 'Place created by WazeFeed',
  287. 'Place type is "Other"',
  288. 'Place created by WazeParking1',
  289. 'Parking : type undefined',
  290. 'Bad phone number format',
  291. 'Religious Center (name or cat)',
  292. 'Transportation (name or cat)',
  293. 'Gas Station with bad name'
  294. );
  295. CErrLeg=new Array('Legend',
  296. 'To correct',
  297. 'To check',
  298. 'For information',
  299. 'Settings',
  300. 'Icons opacity',
  301. 'Show when editable',
  302. 'Locked by ad',
  303. 'Autolock'
  304. );
  305. }
  306. //Create content in CErrors's tab
  307. var CEnewtab=document.createElement('li');
  308. CEnewtab.innerHTML="<a href='#sidepanel-ColorErrors' data-toggle='tab'><span class='fa fa-eye' title='Color Errors'></span></a>";
  309. CErrorshandleClass.appendChild(CEnewtab);
  310.  
  311. var WMECErrors=JSON.parse(localStorage.getItem('WMEColorErrors'));
  312. if (typeof(WMECErrors.autoLock) == "undefined") { WMECErrors.autoLock=false; }
  313. var CEaddon=document.createElement('section');
  314. CEaddon.id="sidepanel-ColorErrors";
  315. var CEcontent='<div style="float:left; margin-left:5px;padding-bottom:10px;"><b><a href="https://greasyfork.org/fr/scripts/21186-wme-color-errors" target="_blank"><u>WME Color Errors</u></a></b> v'+ GM_info.script.version +'</div>'
  316. + '<H6 style="float:left;clear:both;">'+CErrLeg[4]+'</H6><span style="float:left;clear:both;font-weight:bold;margin-top:10px;">'+CErrLeg[5]+'</span><input id="errOpacity" type="range" max="1" min="0" step="0.05" style="float:left;width:240px;"><div id="opacityValue" style="float:left;font-weight:bold;padding-left:10px;"></div>'
  317. + '<div style="float:left;clear:both;"><input type="checkbox" id="_myLvl"'+(WMECErrors.myLvl ? ' checked' : '')+'/> '+CErrLeg[6]+'</div>'
  318. + '<br><br><H6 style="float:left;margin-top:10px;">'+CErrSeg[0]+'</H6><div style="clear:both;">'
  319. + '<input type="checkbox" id="_seg_Bad"'+(WMECErrors.seg_Bad ? ' checked' : '')+'/> <label for="_seg_Bad" style="font-weight:normal;">'+CErrSeg[1]+'</label><br><div id="BadSeg" style="margin-left:5px;"><table>'
  320. + fillHtml("seg_Priv", "seg_Bad","#ff7700","\uf256",CErrSeg[2])
  321. + fillHtml("seg_Ramp_name", "seg_Bad","#ff7700","\uf25a",CErrSeg[6])
  322. + fillHtml("seg_BadSpeed", "seg_Bad","#ff7700","\uf1ce",CErrSeg[16])
  323. + fillHtml("seg_BadAltState","seg_Bad","#ff7700","\uf037",CErrSeg[17])
  324. + fillHtml("seg_EmptyCityAlt","seg_Bad","#ff7700","\uf064",CErrSeg[19])
  325. + fillHtml("seg_LockValue", "seg_Bad","#ff7700","\uf023",CErrSeg[18])
  326. + fillHtml("seg_Park", "seg_Bad","#ff0000","\uf288",CErrSeg[3])
  327. + fillHtml("seg_Rail", "seg_Bad","#ff0000","\uf238",CErrSeg[4])
  328. + fillHtml("seg_Dir_name", "seg_Bad","#ff0000","\uf0a9",CErrSeg[7])
  329. + fillHtml("seg_Toll", "seg_Bad","#ff0000","\uf155",CErrSeg[10])
  330. + fillHtml("seg_Ramp_city", "seg_Bad","#ff0000","\uf015",CErrSeg[11])
  331. + fillHtml("seg_SNameAlt", "seg_Bad","#ff0000","\uf079",CErrSeg[13])
  332. + fillHtml("seg_DleSpace", "seg_Bad","#ff0000","\uf101",CErrSeg[9])
  333. + fillHtml("seg_HW_name", "seg_Bad","#ff0000","\uf018",CErrSeg[5])
  334. + fillHtml("seg_RSAlt", "seg_Bad","#ff0000","\uf074",CErrSeg[12])
  335. + fillHtml("seg_RShield", "seg_Bad","#ff0000","\uf152",CErrSeg[8])
  336. + fillHtml("seg_SegBadRS", "seg_Bad","#ff0000","\uf044",CErrSeg[14])
  337. + fillHtml("seg_SegRSWithoutCity", "seg_Bad","#ff0000","\uf044",CErrSeg[20])
  338. + fillHtml("seg_HNFree", "seg_Bad","#ff0000","\uf162",CErrSeg[15])
  339.  
  340. + '</table></div></div><br><H6 style="float:left;">'+CErrPoi[0]+'</H6><div style="clear:both;"><tr><td><input type="checkbox" id="_poi_Bad"'+(WMECErrors.poi_Bad ? ' checked' : '')+'/> <label for="_poi_Bad" style="font-weight:normal;">'+CErrPoi[1]+'</label><br><div id="BadPoi" style="margin-left:5px;"><table>'
  341. + fillHtml("poi_Address", "poi_Bad","#ff0000","\uf2bc",CErrPoi[3])
  342. + fillHtml("poi_LandM", "poi_Bad","#ff0000","\uf1bb",CErrPoi[5])
  343. + fillHtml("poi_DleSpace", "poi_Bad","#ff0000","\uf101",CErrPoi[6])
  344. + fillHtml("poi_Transp", "poi_Bad","#ff0000","\uf207",CErrPoi[15])
  345. + fillHtml("poi_GasSta", "poi_Bad","#ff0000","\uf1b9",CErrPoi[16])
  346. + fillHtml("poi_Park_name","poi_Bad","#ff0000","\uf288",CErrPoi[2])
  347. + fillHtml("poi_Park_type","poi_Bad","#ff0000","\uf11d",CErrPoi[12])
  348. + fillHtml("poi_Relig", "poi_Bad","#ff0000","\uf015",CErrPoi[14])
  349. + fillHtml("poi_Entry", "poi_Bad","#ff7700","\uf18e",CErrPoi[4])
  350. + fillHtml("poi_Resid", "poi_Bad","#ff7700","\uf015",CErrPoi[7])
  351. + fillHtml("poi_Google", "poi_Bad","#ff7700","\uf1a0",CErrPoi[8])
  352. + fillHtml("poi_Phone", "poi_Bad","#ff7700","\uf095",CErrPoi[13])
  353. + fillHtml("poi_Other", "poi_Bad","#ff7700","\uf29c",CErrPoi[10])
  354. + fillHtml("poi_WFeed", "poi_Bad","#ffcc00","\uf263",CErrPoi[9])
  355. + fillHtml("poi_WPark", "poi_Bad","#ffcc00","\uf263",CErrPoi[11])
  356. + '</table></div></div><br><H6 style="float:left;">'+CErrLeg[0]+'</H6><div style="clear:both;">'
  357. + '<table><tr><td><div style="margin:5px;width:30px;height:2px;background-color:#ff0000;"></div></td><td>'+CErrLeg[1]+'</td></tr>'
  358. + '<tr><td><div style="margin:5px;width:30px;height:2px;background-color:#ff7700;"></div></td><td>'+CErrLeg[2]+'</td></tr>'
  359. + '<tr><td><div style="margin:5px;width:30px;height:2px;background-color:#ffcc00;"></div></td><td>'+CErrLeg[3]+'</td></tr>'
  360.  
  361. + '</table></div></div><div id="CMOnly"><br><H6 style="float:left;">'+CErrLeg[8]+'</H6><div style="clear:both;"><tr><td><input type="checkbox" id="_autoLock"'+(WMECErrors.autoLock ? ' checked' : '')+(typeof(ABBR) == 'undefined' ? 'disabled' : ' ')+'/> <label id="_autoLockLabel" for="_autoLock" style="font-weight:normal;">'+CErrLeg[8]+' ('+W.model.getTopCountry().attributes.name+')</label><br><div id="AutoLock" style="margin-left:5px;"><table>'
  362. + fillHtmlAL("Freeway",I18n.translations[I18n.locale].segment.road_types[3], (typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.fwy_lvl+1)))
  363. + fillHtmlAL("Ramp", I18n.translations[I18n.locale].segment.road_types[4], (typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.rmp_lvl+1)))
  364. + fillHtmlAL("Major", I18n.translations[I18n.locale].segment.road_types[6], (typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.maj_lvl+1)))
  365. + fillHtmlAL("Minor", I18n.translations[I18n.locale].segment.road_types[7], (typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.min_lvl+1)))
  366. + fillHtmlAL("Primary",I18n.translations[I18n.locale].segment.road_types[2], (typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.pri_lvl+1)))
  367. + fillHtmlAL("Street", I18n.translations[I18n.locale].segment.road_types[1], (typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.str_lvl+1)))
  368. + fillHtmlAL("Railway",I18n.translations[I18n.locale].segment.road_types[18],(typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.rwy_lvl+1)))
  369. + fillHtmlAL("Narrow", I18n.translations[I18n.locale].segment.road_types[22],(typeof(ABBR) == 'undefined' ? 'N/A' : (ABBR.nar_lvl+1)))
  370. + '</table></div></div>';
  371.  
  372. CEaddon.innerHTML=CEcontent;
  373. CEaddon.className='tab-pane';
  374. CErrorshandleClass2.appendChild(CEaddon);
  375.  
  376. getId('errOpacity').value=WMECErrors.opacity;
  377. getId('opacityValue').innerHTML = getId('errOpacity').value;
  378. getId('errOpacity').onmousemove = function(){
  379. getId('opacityValue').innerHTML = getId('errOpacity').value;
  380. var ls=JSON.parse(localStorage.WMEColorErrors);
  381. ls.opacity=getId('errOpacity').value;
  382. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  383. CErrColor();
  384. };
  385. getId('_myLvl').onclick=(function(){
  386. var ls=JSON.parse(localStorage.WMEColorErrors);
  387. (getId('_myLvl').checked === true ? ls.myLvl=true : ls.myLvl=false);
  388. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  389. CErrColor();
  390. });
  391. getId('_seg_Bad').onclick=(function(){
  392. var ls=JSON.parse(localStorage.WMEColorErrors);
  393. if (getId('_seg_Bad').checked === true) {
  394. for (var i=0; getElementsByClassName('_seg', BadSeg) [i]; i++) getElementsByClassName('_seg', BadSeg) [i].disabled=false;
  395. ls.seg_Bad=true;
  396. }
  397. else {
  398. for (var i=0; getElementsByClassName('_seg', BadSeg) [i]; i++) getElementsByClassName('_seg', BadSeg) [i].disabled=true;
  399. ls.seg_Bad=false;
  400. }
  401. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  402. CErrColor();
  403. });
  404. getId('_poi_Bad').onclick=(function(){
  405. var ls=JSON.parse(localStorage.WMEColorErrors);
  406. if (getId('_poi_Bad').checked === true) {
  407. for (var i=0; getElementsByClassName('_poi', BadPoi) [i]; i++) getElementsByClassName('_poi', BadPoi) [i].disabled=false;
  408. ls.poi_Bad=true;
  409. }
  410. else {
  411. for (var i=0; getElementsByClassName('_poi', BadPoi) [i]; i++) getElementsByClassName('_poi', BadPoi) [i].disabled=true;
  412. ls.poi_Bad=false;
  413. }
  414. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  415. CErrColor();
  416. });
  417. getId('_autoLock').onclick=(function(){
  418. var ls=JSON.parse(localStorage.WMEColorErrors);
  419. if (getId('_autoLock').checked === true) {
  420. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=false;
  421. ls.autoLock=true;
  422. getId('addLockButton').className = 'fabkm fa fa-lock';
  423. getId('addLockButton').style.color = '#7f0';
  424. }
  425. else {
  426. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=true;
  427. ls.autoLock=false;
  428. getId('addLockButton').className = 'fabkm fa fa-unlock';
  429. getId('addLockButton').style.color = '#f60';
  430. }
  431. localStorage.setItem('WMEColorErrors', JSON.stringify(ls));
  432. CErrColor();
  433. });
  434.  
  435. getId('_seg_Priv').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Priv').checked === true) ? ls.seg_Priv=true : ls.seg_Priv=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  436. getId('_seg_Park').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Park').checked === true) ? ls.seg_Park=true : ls.seg_Park=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  437. getId('_seg_Rail').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Rail').checked === true) ? ls.seg_Rail=true : ls.seg_Rail=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  438. getId('_seg_HW_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_HW_name').checked === true) ? ls.seg_HW_name=true : ls.seg_HW_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  439. getId('_seg_Dir_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Dir_name').checked === true) ? ls.seg_Dir_name=true : ls.seg_Dir_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  440. getId('_seg_Toll').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Toll').checked === true) ? ls.seg_Toll=true : ls.seg_Toll=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  441. getId('_seg_Ramp_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Ramp_name').checked === true) ? ls.seg_Ramp_name=true : ls.seg_Ramp_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  442. getId('_seg_Ramp_city').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_Ramp_city').checked === true) ? ls.seg_Ramp_city=true : ls.seg_Ramp_city=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  443. getId('_seg_RShield').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_RShield').checked === true) ? ls.seg_RShield=true : ls.seg_RShield=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  444. getId('_seg_RSAlt').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_RSAlt').checked === true) ? ls.seg_RSAlt=true : ls.seg_RSAlt=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  445. getId('_seg_SNameAlt').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_SNameAlt').checked === true) ? ls.seg_SNameAlt=true : ls.seg_SNameAlt=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  446. getId('_seg_DleSpace').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_DleSpace').checked === true) ? ls.seg_DleSpace=true : ls.seg_DleSpace=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  447. getId('_seg_SegBadRS').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_SegBadRS').checked === true) ? ls.seg_SegBadRS=true : ls.seg_SegBadRS=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  448. getId('_seg_SegRSWithoutCity').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_SegRSWithoutCity').checked === true) ? ls.seg_SegRSWithoutCity=true : ls.seg_SegRSWithoutCity=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  449. getId('_seg_HNFree').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_HNFree').checked === true) ? ls.seg_HNFree=true : ls.seg_HNFree=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  450. getId('_seg_BadSpeed').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_BadSpeed').checked === true) ? ls.seg_BadSpeed=true : ls.seg_BadSpeed=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  451. getId('_seg_BadAltState').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_BadAltState').checked === true) ? ls.seg_BadAltState=true : ls.seg_BadAltState=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  452. getId('_seg_EmptyCityAlt').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_EmptyCityAlt').checked === true) ? ls.seg_EmptyCityAlt=true : ls.seg_EmptyCityAlt=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  453. getId('_seg_LockValue').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_seg_LockValue').checked === true) ? ls.seg_LockValue=true : ls.seg_LockValue=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  454.  
  455. getId('_poi_Park_name').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Park_name').checked === true) ? ls.poi_Park_name=true : ls.poi_Park_name=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  456. getId('_poi_Park_type').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Park_type').checked === true) ? ls.poi_Park_type=true : ls.poi_Park_type=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  457. getId('_poi_Address').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Address').checked === true) ? ls.poi_Address=true : ls.poi_Address=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  458. getId('_poi_Entry').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Entry').checked === true) ? ls.poi_Entry=true : ls.poi_Entry=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  459. getId('_poi_LandM').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_LandM').checked === true) ? ls.poi_LandM=true : ls.poi_LandM=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  460. getId('_poi_DleSpace').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_DleSpace').checked === true) ? ls.poi_DleSpace=true : ls.poi_DleSpace=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  461. getId('_poi_Resid').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Resid').checked === true) ? ls.poi_Resid=true : ls.poi_Resid=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  462. getId('_poi_Google').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Google').checked === true) ? ls.poi_Google=true : ls.poi_Google=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  463. getId('_poi_Phone').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Phone').checked === true) ? ls.poi_Phone=true : ls.poi_Phone=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  464. getId('_poi_WFeed').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_WFeed').checked === true) ? ls.poi_WFeed=true : ls.poi_WFeed=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  465. getId('_poi_WPark').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_WPark').checked === true) ? ls.poi_WPark=true : ls.poi_WPark=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  466. getId('_poi_Relig').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Relig').checked === true) ? ls.poi_Relig=true : ls.poi_Relig=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  467. getId('_poi_Other').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Other').checked === true) ? ls.poi_Other=true : ls.poi_Other=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  468. getId('_poi_Transp').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_Transp').checked === true) ? ls.poi_Transp=true : ls.poi_Transp=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  469. getId('_poi_GasSta').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_poi_GasSta').checked === true) ? ls.poi_GasSta=true : ls.poi_GasSta=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  470.  
  471. getId('_Freeway').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Freeway').checked === true) ? ls.Freeway=true : ls.Freeway=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  472. getId('_Ramp').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Ramp').checked === true) ? ls.Ramp=true : ls.Ramp=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  473. getId('_Major').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Major').checked === true) ? ls.Major=true : ls.Major=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  474. getId('_Minor').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Minor').checked === true) ? ls.Minor=true : ls.Minor=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  475. getId('_Primary').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Primary').checked === true) ? ls.Primary=true : ls.Primary=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  476. getId('_Street').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Street').checked === true) ? ls.Street=true : ls.Street=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  477. getId('_Railway').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Railway').checked === true) ? ls.Railway=true : ls.Railway=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  478. getId('_Narrow').onclick=(function(){ var ls=JSON.parse(localStorage.WMEColorErrors); (getId('_Narrow').checked === true) ? ls.Narrow=true : ls.Narrow=false; localStorage.setItem('WMEColorErrors', JSON.stringify(ls)); CErrColor(); });
  479.  
  480. if (CErrWaze.loginManager.user.attributes.rank > 3) {
  481. setTimeout(function () {
  482. var addLockButton = document.createElement('div');
  483. addLockButton.id = 'addLockButton';
  484. $(addLockButton).css({'float':'left','margin-right':'5px','cursor':'pointer','opacity':'0.6'});
  485. addLockButton.className = 'fabkm fa fa-lock';
  486. addLockButton.onclick = (function() {
  487. getId('_autoLock').click();
  488. if (getId('_autoLock').checked)
  489. { addLockButton.className = 'fabkm fa fa-lock';
  490. addLockButton.style.color = '#7f0';
  491. } else {
  492. addLockButton.className = 'fabkm fa fa-unlock';
  493. addLockButton.style.color = '#f60';
  494. }
  495. });
  496. getElementsByClassName('topbar')[0].insertBefore(addLockButton,getElementsByClassName('location-info-region')[0]);
  497. getElementsByClassName('topbar')[0].style.padding = '0 10px';
  498. addLockButton.onmouseover = (function () { getId('addLockButton').style.opacity = '1'; });
  499. addLockButton.onmouseout = (function () { getId('addLockButton').style.opacity = '0.6'; });
  500. if (WMECErrors.autoLock) {
  501. addLockButton.className = 'fabkm fa fa-lock';
  502. addLockButton.style.color = '#7f0';
  503. } else {
  504. addLockButton.className = 'fabkm fa fa-unlock';
  505. addLockButton.style.color = '#f60';
  506. }
  507. }, 1000);
  508. }
  509.  
  510. CErrWaze.selectionManager.events.register("selectionchanged", null, CErrAddInfo);
  511. CErrWaze.selectionManager.events.register("selectionchanged", null, CErrColor);
  512. CErrorsModel.actionManager.events.register("afterclearactions", null, CErrColor);
  513. CErrorsModel.actionManager.events.register("afterundoaction", null, CErrColor);
  514. CErrorsMap.events.register("zoomend", null, CErrColor);
  515. CErrorsMap.events.register("moveend", null, CErrColor);
  516. window.setTimeout(CErrColor, 500);
  517. }
  518. function fillHtml(id,type,color,icon,text) {
  519. var WMECErrors=JSON.parse(localStorage.getItem('WMEColorErrors'));
  520. return '<tr style="line-height:14px;"><td style="width:20px;"><input type="checkbox" class="'+(type==="seg_Bad" ? '_seg' : '_poi')+'" id="_'+id+'"'+(WMECErrors[id] ? ' checked' : '')+(WMECErrors[type] ? '' : ' disabled')+'/></td><td style="width:20px;"><font style="color:'+color+';font-family:FontAwesome;">'+icon+'</font></td><td><label for="_'+id+'" style="font-weight:normal;">'+text+'</label></td></tr>';
  521. }
  522. function fillHtmlAL(id,text,lockValue) {
  523. var WMECErrors=JSON.parse(localStorage.getItem('WMEColorErrors')), colorLock;
  524. switch (lockValue) {
  525. case 1: colorLock="#00cf00"; break;
  526. case 2: colorLock="#0179B5"; break;
  527. case 3: colorLock="#ffcc00"; break;
  528. case 4: colorLock="orange"; break;
  529. case 5: colorLock="red"; break;
  530. }
  531. return '<tr style="line-height:14px;"><td style="width:20px;"><input type="checkbox" class="_auto" id="_'+id+'" '+(WMECErrors[id] ? ' checked' : '')+(WMECErrors.autoLock ? '' : ' disabled')+'/></td><td style="width:30px;"><i class="fa fa-lock" style="color:'+colorLock+';"></i> '+lockValue+'</td><td><label for="_'+id+'" style="font-weight:normal;">'+text+'</label></td></tr>';
  532. }
  533. function checkClicLayer(){
  534. var lieu=CErrorsI18n.translations[CErrorsI18n.locale].layers.name.landmarks;
  535. getId('layer-switcher-'+CErrorsMap.getLayersByName(lieu)[0].id).onclick=(function(){
  536. window.setTimeout((function() {
  537. CErrColor();
  538. }),10);
  539. });
  540. }
  541. function getGeoBoundsFromID(featureID, featureArray) {
  542. var array = featureArray.features;
  543. for (var i = 0; i < array.length; i++) {
  544. if (array[i].data.wazeFeature){
  545. if (array[i].data.wazeFeature.id == featureID) {
  546. return array[i].geometry.bounds;
  547. }
  548. }
  549. }
  550. }
  551. function addIcon(icon,color,geometry,type,pos) {
  552. var style = {
  553. fill: false,
  554. stroke: false,
  555. label: icon,
  556. labelAlign: "cb",
  557. labelXOffset: -4,
  558. labelYOffset: (pos*20),
  559. fontColor: color,
  560. fontSize:"20px",
  561. fontOpacity: getId('errOpacity').value,
  562. fontFamily: "FontAwesome",
  563. labelOutlineWidth: 2,
  564. zIndex: 99999
  565. };
  566. if (type==="segment") {
  567. if(geometry.length==2){
  568. var midX = (((geometry[0].x + geometry[1].x) / 2) + geometry[0].x) / 2;
  569. var midY = (((geometry[0].y + geometry[1].y) / 2) + geometry[0].y) / 2;
  570. var labelPoint = new CErrorsOpenLayers.Geometry.Point(midX,midY);
  571. var imageFeature = new CErrorsOpenLayers.Feature.Vector(labelPoint, null, style);
  572. ColorErrors_mapLayer.addFeatures([imageFeature]);
  573. }
  574. else {
  575. for(i=0;i<geometry.length-1;i++){
  576. if(i%3==1){
  577. var midX = (((geometry[i].x + geometry[i+1].x) / 2) + geometry[i].x) / 2;
  578. var midY = (((geometry[i].y + geometry[i+1].y) / 2) + geometry[i].y) / 2;
  579. var labelPoint = new CErrorsOpenLayers.Geometry.Point(midX,midY);
  580. var imageFeature = new CErrorsOpenLayers.Feature.Vector(labelPoint, null, style);
  581. ColorErrors_mapLayer.addFeatures([imageFeature]);
  582. }
  583. }
  584. }
  585. }
  586. else {
  587. if (geometry){
  588. var midX = (((geometry.left + geometry.right) / 2) + geometry.right) / 2;
  589. var midY = (((geometry.bottom + geometry.top) / 2) + geometry.bottom) / 2;
  590. var labelPoint = new CErrorsOpenLayers.Geometry.Point(midX,midY);
  591. var imageFeature = new CErrorsOpenLayers.Feature.Vector(labelPoint, null, style);
  592. ColorErrors_mapLayer.addFeatures([imageFeature]);
  593. }
  594. }
  595. }
  596. function addLegend(id,icon,color,text,url){
  597. if(getSelectedDataModelObjects()[0] && getSelectedDataModelObjects()[0].attributes.id===id && getId('ErrorsList')) {
  598. getId('ErrorsList').innerHTML +="<div id='item"+id+"'><span style='color:"+color+";font-family:FontAwesome;'>"+icon+"</span> <span style='color:"+color+";'>"+text+"</span></div><br>";
  599. //getId('item'+id).onclick=openInNewTab(url);
  600. }
  601. }
  602. function relock(obj, key) {
  603. var objects = obj[key], _i = 0;
  604. while (typeof(objects[_i]) != "undefined") {
  605. W.model.actionManager.add(objects[_i]);
  606. _i++;
  607. }
  608. }
  609. function CErrColor(){
  610. var lineFeature=[], ls=JSON.parse(localStorage.WMEColorErrors);
  611. var lieu=CErrorsI18n.translations[CErrorsI18n.locale].layers.name.landmarks;
  612.  
  613. //Check if Autolock is defined for active country
  614. if (ActiveCountry != W.model.getTopCountry().attributes.abbr) {
  615. ActiveCountry = W.model.getTopCountry().attributes.abbr;
  616. ABBR = cntryDB[ActiveCountry];
  617. if (typeof(ABBR) == 'undefined') {
  618. getId('_autoLock').disabled=true;
  619. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=true;
  620. } else {
  621. getId('_autoLock').disabled=false;
  622. for (var i=0; getElementsByClassName('_auto', AutoLock) [i]; i++) getElementsByClassName('_auto', AutoLock) [i].disabled=false;
  623. }
  624. getId('_autoLockLabel').innerHTML=CErrLeg[8]+' ('+W.model.getTopCountry().attributes.name+')';
  625. }
  626. if (CErrWaze.loginManager.user.attributes.rank > 3) { if (getId('CMOnly')) {getId('CMOnly').style.display="block";}} else { if (getId('CMOnly')) {getId('CMOnly').style.display="none"; }}
  627.  
  628. // Initialize layer
  629. try { ColorErrors_mapLayer.destroyFeatures(); }
  630. catch(err){ log('err destroyFeatures: ',err); }
  631. if (getId('ErrorsList')) { getId('ErrorsList').innerHTML=""; }
  632. //Segments Checking
  633. if (ls.seg_Bad || ls.autoLock) {
  634. var autoLockId=[], relockObject = {'str':[], 'pri':[], 'min':[], 'maj':[], 'rmp':[], 'fwy':[], 'rwy':[], 'nar':[] };
  635.  
  636. for (var seg in CErrorsModel.segments.objects) {
  637. // Get values
  638. var segment=CErrorsModel.segments.getObjectById(seg), j=0;
  639. var attributes=segment.attributes;
  640. var geometry=attributes.geometry.components;
  641. if (segment===null || segment.state === "Update") continue;
  642. //Name
  643. var sid=attributes.primaryStreetID;
  644. var street=CErrorsModel.streets.getObjectById(sid);
  645. if (street===null) continue;
  646. //Alt Name
  647. var salt=attributes.streetIDs[0];
  648. var streetalt=CErrorsModel.streets.getObjectById(salt);
  649. if (streetalt) {
  650. var altname=streetalt.attributes.name;
  651. var streetAltCity = CErrorsModel.cities.getObjectById(streetalt.attributes.cityID);
  652. } else { var altname=""; }
  653.  
  654. //Alt Name for roadshield
  655. saltArray=attributes.streetIDs;
  656. const altnameArray = [];
  657. const streetCityArray = [];
  658. if (saltArray.length > 0){
  659. var i=0;
  660. for (const idsalt of saltArray) {
  661. streetaltTest=CErrorsModel.streets.getObjectById(idsalt);
  662. if (streetaltTest) {
  663. altnameArray.push(streetaltTest.attributes.name);
  664. var streetAltCityTest = CErrorsModel.cities.getObjectById(streetaltTest.attributes.cityID);
  665. if (streetAltCityTest){
  666. streetCityArray.push(streetAltCityTest.attributes.name);
  667. }
  668. }
  669. i++;
  670. }
  671. }
  672. //City
  673. var streetCity = CErrorsModel.cities.getObjectById(street.attributes.cityID);
  674. if (streetCity===null) continue;
  675. streetCity = streetCity.attributes.name;
  676.  
  677. var roadType=attributes.roadType;
  678. if (attributes.primaryStreetID === null || attributes.primaryStreetID === undefined) continue;
  679. if (CErrorsModel.streets.getObjectById(attributes.primaryStreetID) === null || CErrorsModel.streets.getObjectById(attributes.primaryStreetID) === undefined) continue;
  680.  
  681. if (W.model.cities.objects[W.model.streets.objects[sid].attributes.cityID].attributes.countryID != W.model.getTopCountry().attributes.id || segment.isAllowed(segment.permissionFlags.EDIT_PROPERTIES) == false) { continue; }
  682.  
  683. var newWidth="", newColor="", newOpacity="0", gline="";
  684. if (ls.seg_Bad && ((ls.myLvl && attributes.lockRank <= CErrWaze.loginManager.user.attributes.rank) || ls.myLvl===false)) {
  685. if (ls.seg_Ramp_city) { // Ramp/Freeway with city name
  686. if (streetCity && /^(3|4)$/.test(attributes.roadType)) {
  687. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  688. j++;
  689. addIcon("\uf015",newColor,geometry,"segment",j);
  690. addLegend(attributes.id,"\uf015",newColor,CErrSeg[11],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  691. }
  692. }
  693. if (street.attributes.name || altname) {
  694. if (/( - )/.test(street.attributes.name)) { var trs=street.attributes.name.split(" - "); }
  695. if (ls.seg_Priv) { // Private with bad name
  696. if (attributes.roadType===17 && new RegExp(streetNameSeg).test(street.attributes.name)===false) {
  697. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  698. j++;
  699. addIcon("\uf256",newColor,geometry,"segment",j);
  700. addLegend(attributes.id,"\uf256",newColor,CErrSeg[2],"");
  701. }
  702. }
  703. if (ls.seg_Park && street.attributes.name) { // Parking with name (But Place / Square)
  704. if (attributes.roadType===20 && new RegExp(parkNameSeg).test(street.attributes.name)===false) {
  705. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  706. j++;
  707. addIcon("\uf288",newColor,geometry,"segment",j);
  708. addLegend(attributes.id,"\uf288",newColor,CErrSeg[3],"");
  709. }
  710. }
  711. if (ls.seg_Rail && street.attributes.name) { // Railroad with bad name
  712. if (attributes.roadType===18 && (altname || street.attributes.name)) { //Railroad with name
  713. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  714. j++;
  715. addIcon("\uf238",newColor,geometry,"segment",j);
  716. addLegend(attributes.id,"\uf238",newColor,CErrSeg[4],"Routes_Nommage#1.5.4_Voies_ferr.C3.A9es");
  717. }
  718. }
  719. if (ls.seg_Ramp_name && street.attributes.name) {
  720. if (/^(3|4)$/.test(attributes.roadType) && /\/.*\//.test(street.attributes.name)) { // Ramp with 3 directions or more
  721. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  722. j++;
  723. addIcon("\uf25b",newColor,geometry,"segment",j);
  724. addLegend(attributes.id,"\uf25b",newColor,CErrSeg[6],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  725. }
  726. else if (/^(3|4)$/.test(attributes.roadType) && /\//.test(street.attributes.name)) { // Ramp with 2 directions
  727. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  728. j++;
  729. addIcon("\uf25a",newColor,geometry,"segment",j);
  730. addLegend(attributes.id,"\uf25a",newColor,CErrSeg[6],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  731. }
  732. }
  733. if (ls.seg_Dir_name && street.attributes.name) { // Directions but not Ramp/Freeway/Major
  734. if (/^[^3|4|6]$/.test(attributes.roadType) && /[:|>]/.test(street.attributes.name)) {
  735. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  736. j++;
  737. addIcon("\uf0a9",newColor,geometry,"segment",j);
  738. addLegend(attributes.id,"\uf0a9",newColor,CErrSeg[7],"Routes_Nommage#1.4.4_Bretelles_d.27entr.C3.A9e_ou_de_sortie_des_autoroutes_et_voies_rapides");
  739. }
  740. }
  741. if (ls.seg_Toll) { // Toll but not Ramp/Freeway
  742. if (/^[^3|4]$/.test(attributes.roadType) && (attributes.fwdToll || attributes.revToll)) {
  743. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  744. j++;
  745. addIcon("\uf155",newColor,geometry,"segment",j);
  746. addLegend(attributes.id,"\uf155",newColor,CErrSeg[10],"");
  747. }
  748. }
  749. if (ls.seg_RSAlt && street.attributes.name) { // RoadShield must be in alt
  750. if (attributes.roadType!=19 && trs
  751. && /^[A|C|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(trs[0].replace(".",""))===true // Roadshield (1st part)
  752. && / - /.test(street.attributes.name)===true // Roadshield & street name (separator -)
  753. && /Intérieure|Extérieure/.test(trs[1])===false
  754. && streetCity // City ok
  755. ) {
  756. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  757. j++;
  758. addIcon("\uf074",newColor,geometry,"segment",j);
  759. addLegend(attributes.id,"\uf074",newColor,CErrSeg[12],"Routes_Nommage#1.3_Les_nommages_en_Agglom.C3.A9ration");
  760. }
  761. }
  762. if (ls.seg_HW_name && street.attributes.name) { // Highways with bad name
  763. if (/^(3|4|6)$/.test(attributes.roadType) && (/:/.test(street.attributes.name)===true && /^[A|C|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(street.attributes.name)===false) && /^>/.test(street.attributes.name)===false && /^[Sortie ]+[0-9]+/.test(street.attributes.name)===false && /^(Rocade|Périphérique)/.test(street.attributes.name)===false) {
  764. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  765. j++;
  766. addIcon("\uf018",newColor,geometry,"segment",j);
  767. addLegend(attributes.id,"\uf018",newColor,CErrSeg[5],"Routes_Nommage#1.4.2_Autoroutes");
  768. }
  769. }
  770. if (ls.seg_SegBadRS && street.attributes.name) { // RoadShield but bad type
  771. if (/^(1|8|17|20)$/.test(attributes.roadType) && (/^[A|D|N|M|R|T][0-9]+/.test(street.attributes.name) || /^[A|D|N|M|R|T]$/.test(street.attributes.name))) {
  772. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  773. j++;
  774. addIcon("\uf044",newColor,geometry,"segment",j);
  775. addLegend(attributes.id,"\uf044",newColor,CErrSeg[14],"Routes_Classification#2.4_Famille_des_Routes");
  776. }
  777. }
  778. if (ls.seg_HNFree) { // House number on Freeway or ramp (and some undrivables)
  779. if (/^(3|4|8|14|18|19)$/.test(attributes.roadType) && attributes.hasHNs===true) {
  780. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  781. j++;
  782. addIcon("\uf162",newColor,geometry,"segment",j);
  783. addLegend(attributes.id,"\uf162",newColor,CErrSeg[15],"");
  784. }
  785. }
  786. if (ls.seg_BadSpeed) { // Bad speed (ex: >70km/h in city)
  787. if (attributes.fwdMaxSpeed>70 && attributes.fwdMaxSpeedUnverified===false && attributes.revMaxSpeed>70 && attributes.revMaxSpeedUnverified===false && streetCity) {
  788. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  789. j++;
  790. addIcon("\uf1ce",newColor,geometry,"segment",j);
  791. addLegend(attributes.id,"\uf1ce",newColor,CErrSeg[16],"Routes_Vitesses#4.2_Tour_d.27horizon_des_diff.C3.A9rentes_vitesses_limites");
  792. }
  793. }
  794. if (ls.seg_RShield && street.attributes.name) { // Wrong prefix (RoadShield)
  795. if ((trs && attributes.roadType!=19 && /^[A|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(trs[0].replace(".",""))===false && / - /.test(street.attributes.name)===true)
  796. || /^[A|D|N|M|R|T][0-9]+[a-z]?[0-9]? ?-[A-Za-z]/.test(street.attributes.name)===true || /^[A|D|N|M|R|T][0-9]+[a-z]?[0-9]?- ?[A-Za-z]/.test(street.attributes.name)===true// No space between RS and street name
  797. ) {
  798. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  799. j++;
  800. addIcon("\uf152",newColor,geometry,"segment",j);
  801. addLegend(attributes.id,"\uf152",newColor,CErrSeg[8],"");
  802. }
  803. }
  804.  
  805. if (ls.seg_SegRSWithoutCity && street.attributes.name) {// RoadShield without city in alt
  806. if (/^(1|2|3|6|7)$/.test(attributes.roadType) && (/^[A|C|D|N|M|R|T][0-9]+/.test(street.attributes.name)) && !streetCity && altnameArray && streetCityArray){
  807. BadAltRoadshield = false;
  808. NoRoadshield = true;
  809. if (altnameArray.length>=1){
  810. for (let i = 0; i < altnameArray.length; i++) {
  811. if ((/^[A|C|D|N|M|R|T][0-9]+/.test(altnameArray[i]))==true && NoRoadshield == true){
  812. NoRoadshield = false;
  813. }
  814. if (((/^[A|C|D|N|M|R|T][0-9]+/.test(altnameArray[i]))==true && !streetCityArray[i])){
  815. BadAltRoadshield = true;
  816. }
  817. }
  818. }
  819. if (BadAltRoadshield || NoRoadshield) {
  820. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  821. j++;
  822. addIcon("\uf044",newColor,geometry,"segment",j);
  823. addLegend(attributes.id,"\uf044",newColor,CErrSeg[20],"Routes_Classification#2.4_Famille_des_Routes");
  824. }
  825. }
  826. }
  827.  
  828. if (ls.seg_SNameAlt && street.attributes.name) { // Street Name must be in alt
  829. if (attributes.roadType!=19 && trs
  830. && /^[A|C|D|N|M|R|T][0-9]+[a-z]?[0-9]?/.test(trs[0].replace(".",""))===true // Roadshield (1st part)
  831. && /^[E][0-9]/.test(trs[1])===false // European Roadshield (2nd part)
  832. && new RegExp(excepNameSeg).test(street.attributes.name)===false // Exception
  833. && / - /.test(street.attributes.name)===true // Roadshield & street name (separator -)
  834. && /Intérieure|Extérieure/.test(trs[1])===false
  835. && !streetCity // No city
  836. ) {
  837. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  838. j++;
  839. addIcon("\uf079",newColor,geometry,"segment",j);
  840. addLegend(attributes.id,"\uf079",newColor,CErrSeg[13],"Routes_Nommage#1.4_Les_nommages_hors_Agglom.C3.A9ration");
  841. }
  842. }
  843. if (ls.seg_DleSpace && street.attributes.name) { // Double spacing in name
  844. if (/ /.test(street.attributes.name)===true) {
  845. newColor="#ff0000"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  846. j++;
  847. addIcon("\uf101",newColor,geometry,"segment",j);
  848. addLegend(attributes.id,"\uf101",newColor,CErrSeg[9],"");
  849. }
  850. }
  851. if (ls.seg_BadAltState) {
  852. if (streetalt != null && CErrorsModel.cities.getObjectById(street.attributes.cityID).attributes.stateID != streetAltCity.attributes.stateID) { // Alt State != Main State
  853. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  854. j++;
  855. addIcon("\uf037",newColor,geometry,"segment",j);
  856. addLegend(attributes.id,"\uf037",newColor,CErrSeg[17]+"<br>Est <b><i>"+CErrorsModel.states.getObjectById(streetAltCity.attributes.stateID).name+"</i></b><br>Devrait être <b><i>"+CErrorsModel.states.getObjectById(CErrorsModel.cities.getObjectById(street.attributes.cityID).attributes.stateID).name+"</i></b>","");
  857. }
  858. }
  859. if (ls.seg_EmptyCityAlt && streetalt != null) { // Bad Alt
  860. var g=0;
  861. for (var f=0; f < attributes.streetIDs.length; f++) {
  862. var streetalt=CErrorsModel.streets.getObjectById(attributes.streetIDs[f]);
  863. if (CErrorsModel.cities.getObjectById(streetalt.attributes.cityID).attributes.name === "" && /^[A|C|D|E|N|M|R|T|V][0-9]+[a-z]?[0-9]?/.test(streetalt.name)===false && new RegExp(excepNameSeg).test(street.attributes.name)===false) {
  864. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  865. j++;
  866. addIcon("\uf064",newColor,geometry,"segment",j);
  867. addLegend(attributes.id,"\uf064",newColor,CErrSeg[19],"");
  868. }
  869. }/*
  870. g=0;
  871. for (var f=0; f < attributes.streetIDs.length; f++) {
  872. if (street.attributes.name == streetalt.name && streetAltCity.attributes.name != "") { g=1; }
  873. }
  874. if (g == 0) {
  875. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  876. j++;
  877. addIcon("\uf064",newColor,geometry,"segment",j);
  878. addLegend(attributes.id,"\uf064",newColor,CErrSeg[19],"");
  879. }*/
  880. }
  881. }
  882. if (ls.seg_LockValue && attributes.lockRank != 5) { // Ignore Lock 6
  883. if (
  884. ((attributes.fwdFlags==1 || attributes.revFlags==1) && attributes.lockRank != 4) || // Speedcam but not locked 5
  885. attributes.fwdFlags != 1 && attributes.revFlags != 1 && // no speedcam
  886. (/^(3|4|6|18)$/.test(attributes.roadType) && attributes.lockRank != 4 //Lock 5 for freeway, ramp, major and railroad
  887. || attributes.roadType==7 && attributes.lockRank != 3 //Lock 4 for minor
  888. || attributes.roadType==2 && attributes.lockRank != 2 //Lock 3 for primary
  889. || /^(1|8|17|19|22)$/.test(attributes.roadType) === true && attributes.lockRank != 0 && attributes.lockRank != null) //Lock 1 for others (5,10,15,16,20)
  890. ) {
  891. newColor="#ff7700"; newWidth=3; newOpacity=0.95; gline=segment.attributes.geometry.getVertices();
  892. j++;
  893. addIcon("\uf023",newColor,geometry,"segment",j);
  894. addLegend(attributes.id,"\uf023",newColor,CErrSeg[18],"WME_Droits");
  895. }
  896. }
  897. // Highlight if error
  898. if (gline !== "") {
  899. var style={
  900. strokeWidth: newWidth,
  901. strokeColor: newColor,
  902. strokeOpacity: newOpacity
  903. };
  904. var points=[];
  905. for (var i=0; i<gline.length; i++) { points.push(new CErrorsOpenLayers.Geometry.Point(gline[i].x, gline[i].y)); }
  906. var newline=new CErrorsOpenLayers.Geometry.LineString(points);
  907. lineFeature.push(new CErrorsOpenLayers.Feature.Vector(newline, null, style));
  908. }
  909. }
  910.  
  911. //Autolock
  912. var lock=attributes.lockRank;
  913. if (ls.autoLock === true &&
  914. (ls.myLvl && lock <= CErrWaze.loginManager.user.attributes.rank || ls.myLvl === false) &&
  915. lock != 5 &&
  916. onScreen(segment) &&
  917. autoLockId.indexOf(attributes.id) == -1 &&
  918. getId('_autoLock').disabled == false &&
  919. CErrWaze.loginManager.user.attributes.rank > 3) {
  920. if ( attributes.revFlags != '1' && attributes.fwdFlags != '1') {
  921. switch (attributes.roadType) {
  922. case 1: if ((lock == null || lock < ABBR.str_lvl) && ls.Street==true) { autoLockId.push(attributes.id); relockObject.str.push(new UpdateObject(segment, {lockRank: ABBR.str_lvl })); } break;
  923. case 2: if ((lock == null || lock < ABBR.pri_lvl) && ls.Primary==true) { autoLockId.push(attributes.id); relockObject.pri.push(new UpdateObject(segment, {lockRank: ABBR.pri_lvl })); } break;
  924. case 3: if ((lock == null || lock < ABBR.fwy_lvl) && ls.Freeway==true) { autoLockId.push(attributes.id); relockObject.fwy.push(new UpdateObject(segment, {lockRank: ABBR.fwy_lvl })); } break;
  925. case 4: if ((lock == null || lock < ABBR.rmp_lvl) && ls.Ramp==true) { autoLockId.push(attributes.id); relockObject.rmp.push(new UpdateObject(segment, {lockRank: ABBR.rmp_lvl })); } break;
  926. case 6: if ((lock == null || lock < ABBR.maj_lvl) && ls.Major==true) { autoLockId.push(attributes.id); relockObject.maj.push(new UpdateObject(segment, {lockRank: ABBR.maj_lvl })); } break;
  927. case 7: if ((lock == null || lock < ABBR.min_lvl) && ls.Minor==true) { autoLockId.push(attributes.id); relockObject.min.push(new UpdateObject(segment, {lockRank: ABBR.min_lvl })); } break;
  928. case 18: if ((lock == null || lock < ABBR.rwy_lvl) && ls.Railway==true) { autoLockId.push(attributes.id); relockObject.rwy.push(new UpdateObject(segment, {lockRank: ABBR.rwy_lvl })); } break;
  929. case 22: if ((lock == null || lock < ABBR.nar_lvl) && ls.Narrow==true) { autoLockId.push(attributes.id); relockObject.nar.push(new UpdateObject(segment, {lockRank: ABBR.nar_lvl })); } break;
  930. }
  931. }
  932. // Lock 5 if ASC
  933. if ((attributes.fwdFlags == '1' || attributes.revFlags == '1') && lock != '4') { autoLockId.push(attributes.id); relockObject.others.push(new UpdateObject(segment, {lockRank: '4' })); }
  934. }
  935. }
  936.  
  937. $.each(relockObject, function( key, value ) {
  938. relock(relockObject, key);
  939. });
  940. }
  941.  
  942. //Places Checking
  943. if (ls.poi_Bad && getId('layer-switcher-group_places').checked) {
  944. for (var poi in CErrorsModel.venues.objects) {
  945. // Get values
  946. var venue=CErrorsModel.venues.getObjectById(poi), j=0;
  947. var pattributes=venue.attributes;
  948. var poly=pattributes.id;
  949. var geometry=getGeoBoundsFromID(poly, W.map.venueLayer);
  950. if (venue===null || poly === null || poi.state=="Update" || poi.selected) continue;
  951. //if (venue===null || poly === null || geometry === null || poi.state=="Update" || poi.selected) continue;
  952. var categories=pattributes.categories;
  953. var pname=pattributes.name;
  954. var venueStreetId=CErrorsModel.streets.getObjectById(pattributes.streetID);
  955. if (venueStreetId===null) continue;
  956. var venueStreet=venueStreetId.attributes;
  957. if (venueStreet) { var venueCity = CErrorsModel.cities.getObjectById(venueStreet.cityID); }
  958. var newWidth="", newColor="", newOpacity="0", gpoly="";
  959.  
  960. if ((ls.myLvl && pattributes.lockRank <= CErrWaze.loginManager.user.attributes.rank && pattributes.adLocked===false) || ls.myLvl===false) {
  961. if (ls.poi_Resid) { // maybe a residential POI
  962. if ((/^[0-9][ ]?[a-zA-Z]/.test(pname)===true || new RegExp(privNameSeg).test(pname)===true) && pattributes.residential===false && pattributes.categories.indexOf("PARKING_LOT")===-1) {
  963. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  964. if (venue.isPoint()) { newWidth=26; }
  965. j++;
  966. addIcon("\uf015",newColor,geometry,"venue",j);
  967. addLegend(poly,"\uf015",newColor,CErrPoi[7],"");
  968. }
  969. }
  970. if (ls.poi_Google) { //POI without Google link
  971. if (pattributes.externalProviderIDs.length===0 && pattributes.residential===false && new RegExp(excepCatPoi).test(categories)===false) {
  972. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  973. if (venue.isPoint()) { newWidth=26; }
  974. j++;
  975. addIcon("\uf1a0",newColor,geometry,"venue",j);
  976. addLegend(poly,"\uf1a0",newColor,CErrPoi[8],"");
  977. }
  978. }
  979. if (ls.poi_Phone && pattributes.phone) { //POI with bad phone number
  980. // Phone prefix
  981. var prefPhone;
  982. switch(CErrorsModel.getTopCountry().attributes.id) {
  983. case 3: prefPhone='+213[ ](\\d{2})'; break; // format +213 (dd) xx xx xx @ Algeria
  984. case 73: prefPhone='+33[ ]\\d[ ]\\d{2}'; break; // format +33 d xx xx xx xx @ France
  985. case 74: prefPhone='+594[ ](594|694)'; break; // format +594 594 xx xx xx @ French Guiana
  986. case 88: prefPhone='+590[ ](590|690)'; break; // format +590 590 xx xx xx @ Guadeloupe
  987. case 141: prefPhone='+596[ ]596'; break; // format +596 596 xx xx xx @ Martinique
  988. case 148: prefPhone='+377[ ]\\d{2}'; break; // format +377 xx xx xx xx @ Monaco
  989. case 152: prefPhone='+212[ ](\\d{3})'; break; // format +212 xxx xx xx xx @ Morocco
  990. case 184: prefPhone='+262[ ](262|692|693)'; break; // format +262 (262 ou 692) xx xx xx @ Reunion
  991. default : break;
  992. }
  993. if (new RegExp('^(\\'+prefPhone + ')([ ](\\d{2})){3}$').test(pattributes.phone)===false // Prefix + 4 digits
  994. && new RegExp('^(\\'+prefPhone + ')([ ](\\d{3})){2}$').test(pattributes.phone)===false // Prefix + 3 digits
  995. && (/^[13]\d[ ](\d{2})$/).test(pattributes.phone)===false // 1x xx or 3x xx
  996. && (/^(0[ ](8|9)\d{2})([ ](\d{3})){2}/).test(pattributes.phone)===false // 0 8xx xxx xxx
  997. && (/^(0[ ](8|9)\d{2})([ ](\d{2})){3}/).test(pattributes.phone)===false // 0 8xx xx xx xx
  998. && (/^(15|17|18|112|115)$/).test(pattributes.phone)===false // Emergency numbers
  999. ) {
  1000. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1001. if (venue.isPoint()) { newWidth=26; }
  1002. j++;
  1003. addIcon("\uf095",newColor,geometry,"venue",j);
  1004. addLegend(poly,"\uf095",newColor,CErrPoi[13],"Lieux_Generalites#1.7._Format_du_num.C3.A9ro_de_t.C3.A9l.C3.A9phone");
  1005. }
  1006. }
  1007. if (ls.poi_Other) { // Place type is "Other"
  1008. if (categories.indexOf("OTHER") > -1 && (/^Déchèterie/).test(pname)===false) {
  1009. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1010. if (venue.isPoint()) { newWidth=26; }
  1011. j++;
  1012. addIcon("\uf29c",newColor,geometry,"venue",j);
  1013. addLegend(poly,"\uf29c",newColor,CErrPoi[10],"");
  1014. }
  1015. }
  1016. if (ls.poi_Entry) { // POI with default entryExitPoints
  1017. if (new RegExp(entryPointPoi).test(categories)===false && pattributes.entryExitPoints.length===0 && venue.isPoint()===false) {
  1018. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1019. j++;
  1020. addIcon("\uf18e",newColor,geometry,"venue",j);
  1021. addLegend(poly,"\uf18e",newColor,CErrPoi[4],"Lieux_Generalites#1.3._Positionner_le_point_de_destination_d.27un_POI");
  1022. }
  1023. }
  1024. if (ls.poi_Park_name && categories.indexOf("PARKING_LOT") > -1) { // Parking with bad name
  1025. if (new RegExp(streetNameSeg).test(pname)===true) { continue; } //If parking name is a road
  1026. if (new RegExp('^'+parkNamePoi+'$').test(pname)===true || // Only Parkings or Aire // ?️|?️️|
  1027. new RegExp('^'+parkNamePoi).test(pname)===false // Don't start by ?️ or Parking
  1028. // /^(Parking[s]?)( de[s]?| du | le[s]? | la | pour )/.test(pname)===true // Contain bad words
  1029. ) {
  1030. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1031. j++;
  1032. addIcon("\uf288",newColor,geometry,"venue",j);
  1033. addLegend(poly,"\uf288",newColor,CErrPoi[2],"Lieux_Particuliers#2.3._Parkings");
  1034. }
  1035. else if (pname==="") {
  1036. newColor="#ff7700"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1037. j++;
  1038. addIcon("\uf288",newColor,geometry,"venue",j);
  1039. addLegend(poly,"\uf288",newColor,CErrPoi[2],"Lieux_Particuliers#2.3._Parkings");
  1040. }
  1041. if (venue.isPoint()) newWidth=26;
  1042. }
  1043. if (ls.poi_Park_type && categories.indexOf("PARKING_LOT") > -1) { // Parking with type undefined
  1044. if (/PUBLIC|RESTRICTED|PRIVATE/.test(pattributes.categoryAttributes.PARKING_LOT.parkingType)===false) {
  1045. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1046. j++;
  1047. addIcon("\uf11d",newColor,geometry,"venue",j);
  1048. addLegend(poly,"\uf11d",newColor,CErrPoi[12],"Lieux_Particuliers#2.3._Parkings");
  1049. }
  1050. }
  1051. if (ls.poi_Address) { // POI with bad address (Nxxx/Dxxx) or without address
  1052. if (venueStreet===null) continue;
  1053. if ((/^[A|D|N|M|R][0-9]+/.test(venueStreet.name) && /[ - ]/.test(venueStreet.name)) || (venueStreet.name===null && new RegExp(landmarkPoi).test(categories) === 'false')) {
  1054. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1055. if (venue.isPoint()) { newWidth=26; }
  1056. j++;
  1057. addIcon("\uf2bc",newColor,geometry,"venue",j);
  1058. addLegend(poly,"\uf2bc",newColor,CErrPoi[3],"Lieux_Generalites#1.2._Nommage_et_Adresse_d.27un_POI");
  1059. }
  1060. }
  1061. if (ls.poi_LandM) { // Landmark with road name or city name
  1062. if (new RegExp(landmarkPoi).test(categories) && pname==="" && ((venueStreet && venueStreet.name) || (venueCity && venueCity.attributes.name))) {
  1063. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1064. if (venue.isPoint()) { newWidth=26; }
  1065. j++;
  1066. addIcon("\uf1bb",newColor,geometry,"venue",j);
  1067. addLegend(poly,"\uf1bb",newColor,CErrPoi[5],"");
  1068. }
  1069. }
  1070. if (ls.poi_DleSpace) { // Double spacing in name
  1071. if (venueStreet && (/ /.test(venueStreet.name)===true || / /.test(pname)===true)) {
  1072. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1073. j++;
  1074. addIcon("\uf101",newColor,geometry,"venue",j);
  1075. addLegend(poly,"\uf101",newColor,CErrPoi[6],"");
  1076. if (venue.isPoint()) { newWidth=26; }
  1077. }
  1078. }
  1079. if (ls.poi_GasSta && categories.indexOf("GAS_STATION") > -1) { // Gas Station with bad name
  1080. if (new RegExp(streetNameSeg).test(pname)===true) { continue; } //If parking name is a road
  1081. if (/^(Station-service )/.test(pname)===false) { // Don't start by
  1082. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1083. j++;
  1084. addIcon("\uf1b9",newColor,geometry,"venue",j);
  1085. addLegend(poly,"\uf288",newColor,CErrPoi[16],"Lieux_Particuliers#2.5._Stations-services");
  1086. if (venue.isPoint()) newWidth=26;
  1087. }
  1088. }
  1089. if (ls.poi_Transp && new RegExp(stationsPoi).test(categories)===false && categories.indexOf("FAST_FOOD") == -1) { //Bus Subway and Tram Station wihtout others stations
  1090. if ((
  1091. categories.indexOf("BUS_STATION") > -1 && // Good category for bus station
  1092. new RegExp('^'+busPoi).test(pname)===false // Bad name
  1093. ) || (
  1094. categories.indexOf("SUBWAY_STATION") > -1 && // Good category for subway station
  1095. new RegExp('^'+tramPoi).test(pname)===false // Bad name
  1096. ) || (
  1097. categories.indexOf("TRAIN_STATION") > -1 && // Good category for train station
  1098. /Gare d[e|u|es|\']/.test(pname)===false // Bad name
  1099. ) || (
  1100. categories.indexOf("OTHER") == -1 && categories.indexOf("BUS_STATION") == -1 && categories.indexOf("SUBWAY_STATION") == -1 && categories.indexOf("TRAIN_STATION") == -1 &&
  1101. new RegExp('^'+possibleTransPoi).test(pname)===true // Maybe a transport station
  1102. ) ){
  1103. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1104. j++;
  1105. addIcon("\uf207",newColor,geometry,"venue",j);
  1106. addLegend(poly,"\uf207",newColor,CErrPoi[15],"Lieux_Particuliers#2.8._Arr.C3.AAts_de_bus.2C_m.C3.A9tro_et_tramway");
  1107. if (venue.isPoint()) { newWidth=26; }
  1108. }
  1109. }
  1110. if (ls.poi_Relig && categories.indexOf("RELIGIOUS_CENTER") > -1) { // Religious Center with bad name
  1111. if (new RegExp('^'+religiousPoi+'$').test(pname)===true || // category without name
  1112. new RegExp('^'+religiousPoi).test(pname)===false) { // Bad 1st name
  1113. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1114. j++;
  1115. addIcon("\uf015",newColor,geometry,"venue",j);
  1116. addLegend(poly,"\uf015",newColor,CErrPoi[14],"Lieux_Particuliers#2.10._Site_religieux");
  1117. if (venue.isPoint()) { newWidth=26; }
  1118. }
  1119. }
  1120. if ((ls.poi_Relig && new RegExp('^'+religiousPoi).test(pname)===true && categories.indexOf("RELIGIOUS_CENTER") == -1) || // Religious Center Name but bad category
  1121. (new RegExp('^'+religiousPoi+'$').test(pname)===true && categories.indexOf("RELIGIOUS_CENTER") == -1)) { // Bad Religious Center Name with bad category
  1122. newColor="#ff0000"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1123. j++;
  1124. addIcon("\uf015",newColor,geometry,"venue",j);
  1125. addLegend(poly,"\uf015",newColor,CErrPoi[14],"Lieux_Particuliers#2.10._Site_religieux");
  1126. if (venue.isPoint()) { newWidth=26; }
  1127. }
  1128. if (ls.poi_WFeed || ls.poi_WPark) { //Place updated by WazeFeed
  1129. if (pattributes.updatedBy && CErrorsModel.users.getObjectById(pattributes.updatedBy)) {
  1130. var updName = CErrorsModel.users.getObjectById(pattributes.updatedBy).userName;
  1131. if (((ls.poi_WFeed && new RegExp(wazeBot).test(updName)) || (ls.poi_WPark && updName=="WazeParking1")) && pattributes.residential===false) {
  1132. newColor="#ffcc00"; newWidth=15; newOpacity=0.5; gpoly=pattributes.geometry.getVertices();
  1133. if (venue.isPoint()) { newWidth=26; newOpacity=0.75; }
  1134. j++;
  1135. addIcon("\uf263",newColor,geometry,"venue",j);
  1136. if (updName=="WazeFeed") { addLegend(poly,"\uf263",newColor,CErrPoi[9],""); }
  1137. else { addLegend(poly,"\uf263",newColor,CErrPoi[11],""); }
  1138. }
  1139. }
  1140. }
  1141. // Highlight if error
  1142.  
  1143. }
  1144. if (pattributes.adLocked) {
  1145. newColor="#ff0000"; newWidth=15; newOpacity=0.75; gpoly=pattributes.geometry.getVertices();
  1146. j++;
  1147. addIcon("\uf023",newColor,geometry,"venue",j);
  1148. addLegend(poly,"\uf023",newColor,CErrLeg[7],"");
  1149. if (venue.isPoint()) { newWidth=26; }
  1150. }
  1151. if (gpoly!=="") {
  1152. var style={
  1153. strokeWidth: newWidth,
  1154. strokeColor: newColor,
  1155. strokeOpacity: newOpacity,
  1156. fillOpacity: 0
  1157. };
  1158. var points=[];
  1159. for (var i=0; i<gpoly.length; i++) { points.push(new CErrorsOpenLayers.Geometry.Point(gpoly[i].x, gpoly[i].y)); }
  1160. var newpoly=new CErrorsOpenLayers.Geometry.LinearRing(points);
  1161. lineFeature.push(new CErrorsOpenLayers.Feature.Vector(newpoly, null, style));
  1162. }
  1163. }
  1164. }
  1165.  
  1166. // Display highlighted features
  1167. try{ ColorErrors_mapLayer.addFeatures(lineFeature); }
  1168. catch(err){ log('err addFeatures: ',err); }
  1169. }
  1170. // **********************
  1171. // ** Telephone fix **
  1172. // **********************
  1173. function fixTel(){
  1174.  
  1175. var editpanel = $('#edit-panel');
  1176. if (editpanel.length==0) { window.setTimeout(fixTel, 1000); return; }
  1177.  
  1178. $('#edit-panel').bind('DOMSubtreeModified',function(e){
  1179. var g= $('td[name ="roadType"]');
  1180. g.change(function(){
  1181. alert($(this).val());
  1182. })
  1183. //var g = document.getElementsByName('roadType');
  1184. //console.log("test ",g.value, g.text, g.options[g.selectedIndex].text);
  1185.  
  1186.  
  1187. var editLM = $('#venue-edit-more-info');
  1188. //console.debug("PHONE: editLM" , editLM);
  1189. if (editLM.length==1) {
  1190. var fixPhoneBtn = $('#wme-telephonefix-fr'); //console.debug("PHONE: fixPhoneBtn" , fixPhoneBtn);
  1191. if (fixPhoneBtn.length==0) {
  1192. fixPhoneBtn=document.createElement('button');
  1193. fixPhoneBtn.innerHTML='fix';
  1194. fixPhoneBtn.id='wme-telephonefix-fr';
  1195. $(fixPhoneBtn).css({'float':'right','position':'relative','right':'0px','bottom':'56px','background-color':'#ade71f','font-weight': 'bold','border-top-right-radius':'6px','border-bottom-right-radius':'6px','border':'0','border-left':'1px dashed #cccccc'});
  1196. $('[name=phone]').parent().append(fixPhoneBtn);
  1197.  
  1198. try {
  1199. var venue=W.selectionManager.getSelectedDataModelObjects()[0];
  1200. var phone=venue.attributes.phone;
  1201. var newPhone='';
  1202. var phoneTo='';
  1203.  
  1204. // num 0800 et 0900
  1205. if (venue.attributes.phone.startsWith('08')==true) {
  1206. phoneTo = venue.attributes.phone.replace(/^0[.| |-]?8[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])[.| |-]?([0-9])([0-9])$/g, "0 8$1$2 $3$4$5 $6$7$8");
  1207. } else {
  1208. // rules by country
  1209. switch(CErrorsModel.getTopCountry().attributes.id) {
  1210. case 3: // Algeria
  1211. if (venue.attributes.phone.startsWith('+213')==true) {
  1212. phoneTo = venue.attributes.phone.replace(/^\+213[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+213 $1 $2 $3 $4 $5");
  1213. } else {
  1214. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+213 $1 $2 $3 $4 $5");
  1215. }
  1216. break;
  1217. case 73: // France
  1218. if (venue.attributes.phone.startsWith('+33')==true) {
  1219. phoneTo = venue.attributes.phone.replace(/^\+33[.| |-]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+33 $1 $2 $3 $4 $5");
  1220. } else if (venue.attributes.phone.startsWith('0033')==true) {
  1221. phoneTo = venue.attributes.phone.replace(/^0033[.| |-]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+33 $1 $2 $3 $4 $5");
  1222. } else {
  1223. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+33 $1 $2 $3 $4 $5");
  1224. }
  1225. break;
  1226. case 74: // French Guiana
  1227. if (venue.attributes.phone.startsWith('+594 5 94')==true || venue.attributes.phone.startsWith('+594594')==true) {
  1228. phoneTo = venue.attributes.phone.replace(/^\+594[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+594 $1$2 $3 $4 $5");
  1229. } else {
  1230. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+594 $1$2 $3 $4 $5");
  1231. }
  1232. break;
  1233. case 88: // Guadeloupe
  1234. if (venue.attributes.phone.startsWith('+590 5 90')==true || venue.attributes.phone.startsWith('+590590')==true) {
  1235. phoneTo = venue.attributes.phone.replace(/^\+590[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+590 $1$2 $3 $4 $5");
  1236. } else {
  1237. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+590 $1$2 $3 $4 $5");
  1238. }
  1239. break;
  1240. case 141: // Martinique
  1241. if (venue.attributes.phone.startsWith('+596 5 96')==true || venue.attributes.phone.startsWith('+596596')==true) {
  1242. phoneTo = venue.attributes.phone.replace(/^\+596[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+596 $1$2 $3 $4 $5");
  1243. } else {
  1244. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+596 $1$2 $3 $4 $5");
  1245. }
  1246. break;
  1247. case 148: // Monaco
  1248. if (venue.attributes.phone.startsWith('+377')==true) {
  1249. phoneTo = venue.attributes.phone.replace(/^\+377[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+377 $1 $2 $3 $4 $5");
  1250. } else {
  1251. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+377 $1 $2 $3 $4 $5");
  1252. }
  1253. break;
  1254. case 152: // Morocco
  1255. if (venue.attributes.phone.startsWith('+212')==true) {
  1256. phoneTo = venue.attributes.phone.replace(/^\+212[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+212 $1 $2 $3 $4 $5");
  1257. } else {
  1258. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+212 $1 $2 $3 $4 $5");
  1259. }
  1260. break;
  1261. case 184: // Reunion
  1262. if (venue.attributes.phone.startsWith('+262 2 62')==true || venue.attributes.phone.startsWith('+262262')==true) {
  1263. phoneTo = venue.attributes.phone.replace(/^\+262[ ]?([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g ,"+262 $1$2 $3 $4 $5");
  1264. } else {
  1265. phoneTo = venue.attributes.phone.replace(/^0([0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])[.| |-]?([0-9][0-9])$/g, "+262 $1$2 $3 $4 $5");
  1266. }
  1267. break;
  1268. default : break;
  1269. }
  1270. }
  1271.  
  1272. if (phoneTo != venue.attributes.phone) { newPhone=phoneTo; }
  1273.  
  1274. if (newPhone!='')
  1275. {
  1276. fixPhoneBtn.addEventListener("click", function (v, p) {
  1277. return function () {
  1278. var newAtts = { phone: p, id: v.attributes.id };
  1279. W.model.actionManager.add(new (require("Waze/Action/UpdateObject"))(v, newAtts));
  1280. $(fixPhoneBtn).css({'display': 'none'});
  1281. }
  1282. }(venue, newPhone), false);
  1283. }
  1284. else
  1285. $(fixPhoneBtn).css({'display': 'none'});
  1286. }
  1287. catch (err)
  1288. {
  1289. $(fixPhoneBtn).css({'display': 'none'});
  1290. }
  1291. //.debug("PHONE: append fixPhoneBtn" , fixPhoneBtn);
  1292. }
  1293.  
  1294. var fixPhoneBtn = $('#wme-telephonefix-fr'); //console.debug("PHONE: fixPhoneBtn" , fixPhoneBtn);
  1295. }
  1296.  
  1297. })
  1298. }
  1299.  
  1300. CErrors_bootstrap();