WME Map Tiles Update

Show the last server update and different times

当前为 2017-11-06 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         WME Map Tiles Update
// @version      1.29
// @description  Show the last server update and different times
// @namespace    Sebiseba
// @copyright    Sebiseba 2014-2016
// @include      https://www.waze.com/editor*
// @include      https://www.waze.com/*/editor*
// @include      https://beta.waze.com/*
// @exclude      https://www.waze.com/user/*editor/*
// @exclude      https://www.waze.com/*/user/*editor/*
// @connect      status.waze.com
// @connect      status-il.waze.com
// @connect      maps.googleapis.com
// @grant        GM_xmlhttpRequest
// @grant        unsafeWindow
// ==/UserScript==
/* jshint -W097 */
'use strict';
/***
Thanks
   Translations :
   Brazilian Portuguese by fsmallmann
   Hebrew by gad_m
***/
// **********************************
// **  DOWNLOAD HELPER BY DUMMYD2  **
// **********************************
/******** AUTO INJECTED PART ***************/
function MTUdownloadHelperInjected() {
  window.MTUDownloadHelper = {
    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 (params, callback, progressCallback)
    {
      this.jobs.push({
        params: params,
        data: null,
        callback: callback,
        progressCallback: progressCallback,
        status: 'added',
        progression: 0,
        error: ''
      });
      var id = this.jobs.length - 1;
      var _this = this;
      window.setTimeout(function () {
        _this._waitForData(id);
      }, 500);
    }
  };
}
var MTUdownloadHelperInjectedScript = document.createElement('script');
MTUdownloadHelperInjectedScript.textContent = '' + MTUdownloadHelperInjected.toString() + ' \n' + 'MTUdownloadHelperInjected();';
MTUdownloadHelperInjectedScript.setAttribute('type', 'application/javascript');
document.body.appendChild(MTUdownloadHelperInjectedScript);
/******** SANDBOX PART ***************/
function MTUlookFordownloadHelperJob() {
  for (var i = 0; i < unsafeWindow.MTUDownloadHelper.jobs.length; i++) {
    if (unsafeWindow.MTUDownloadHelper.jobs[i].status == 'added') {
      unsafeWindow.MTUDownloadHelper.jobs[i].status = cloneInto('downloading', unsafeWindow.MTUDownloadHelper.jobs[i]);
      var f = function () {
        var job = i;
        GM_xmlhttpRequest({
          method: unsafeWindow.MTUDownloadHelper.jobs[job].params.method,
          headers: unsafeWindow.MTUDownloadHelper.jobs[job].params.headers,
          data: unsafeWindow.MTUDownloadHelper.jobs[job].params.data,
          synchronous: false,
          timeout: 3000,
          url: unsafeWindow.MTUDownloadHelper.jobs[job].params.url,
          //job: i,
          onerror: function (r) {
            unsafeWindow.MTUDownloadHelper.jobs[job].status = cloneInto('error', unsafeWindow.MTUDownloadHelper.jobs[job]);
          },
          ontimeout: function (r) {
            unsafeWindow.MTUDownloadHelper.jobs[job].status = cloneInto('error', unsafeWindow.MTUDownloadHelper.jobs[job]);
          },
          onload: function (r) {
            unsafeWindow.MTUDownloadHelper.jobs[job].status = cloneInto('success', unsafeWindow.MTUDownloadHelper.jobs[job]);
            unsafeWindow.MTUDownloadHelper.jobs[job].data = cloneInto(r.responseText, unsafeWindow.MTUDownloadHelper.jobs[job]);
          },
          onprogress: function (r) {
            unsafeWindow.MTUDownloadHelper.jobs[job].progression = cloneInto(r.total == 0 ? 0 : (r.loaded / r.total), unsafeWindow.MTUDownloadHelper.jobs[job]);
          }
        });
      }();
    }
  }
  window.setTimeout(MTUlookFordownloadHelperJob, 2000);
}
window.setTimeout(MTUlookFordownloadHelperJob);
/*******************/
function run_MTU() {
  var WME_MUpdate_Version = '1.29',
  lang,
  MTUhandle,
  MTUenv,
  MTULang,
  userLang,
  timermaphours,
  timerupd,
  tz,
  timestamp,
  whendate,
  whentimeutc,
  whentimeloc,
  dw,
  debug = '';
  var icon_info = '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';
  var icon_close = 'iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAACprHcmAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAABbSURBVHjajJBLFsAgCAOB5724OjmZXbUvxWjLys+MQryqpv2sYWaWmf4FApjBmx10rx84M70LACb/GnzJQgcXmAU1R6geVUsLzC8qIXbDKOGVhoqOz8cp417XAOaUPpt0thLzAAAAAElFTkSuQmCC';
  function getId(node) {
    return document.getElementById(node);
  }
  function getElementsByClassName(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;
  }
  function translate_server(lang) {
    var elt = '',
    trad = new Array('en', 'SERVER', 'en-GB', 'SERVER', 'es', 'SERVIDOR', 'es-419', 'SERVIDOR', 'fr', 'SERVEUR', 'it', 'SERVER', 'ru', 'сервер', 'ja', 'サーバー', 'he', 'שרת', 'de', 'SERVER', 'ro', 'SERVER', 'tr', 'SUNUCU', 'af', 'BEDIENER', 'cs', 'SERVER', 'ko', '서버', 'ms', 'SERVER', 'pl', 'SERWER', 'pt-BR', 'SERVIDOR', 'pt-PT', 'SERVIDOR', 'hu', 'SZERVER', 'nl', 'SERVER', 'sv', 'SERVER', 'no', 'SERVER', 'sk', 'SERVERA', 'da', 'SERVER', 'gl', 'GWEINYDDWR', 'lt', 'SERVERIS', 'zh', 'SERVER', 'bg', 'СЪРВЪРА', 'fi', 'SERVER', 'hr', 'SERVER'
    );
    var i = - 1;
    for (elt in trad) {
      i++;
      if (trad[elt] == lang) {
        return trad[i + 1];
      }
    }
    return 'SERVER';
  }
  function IsJsonString(str) {
    try {
      JSON.parse(str);
    } catch (e) {
      return false;
    }
    return true;
  }
  function pad(str) {
    str = str.toString();
    return str.length < 2 ? pad('0' + str, 2)  : str;
  }
  function toTimestamp(strDate) {
    var datum = Date.parse(strDate);
    return datum / 1000;
  }
  function checkTimestamp(strDate) {
    if (timestamp < strDate) {
      return '#f00';
    } 
    else {
      return '#3a0';
    }
  }
  function MTUinit() {
    if (typeof (Waze.location) === 'undefined') {
      window.setTimeout(MTUinit, 500);
      return;
    }
    if (typeof (Waze.Config.api_base) === 'undefined') {
      setTimeout(MTUinit, 500);
      return;
    }
    if (typeof (I18n) === 'undefined') {
      setTimeout(MTUinit, 500);
      return;
    }
    MTUhandle = getElementsByClassName('olControlPanZoomBar') [0];
    if (!MTUhandle) {
      setTimeout(MTUinit, 1000);
      return;
    } // Detect Country Server (World/US/Israel)

    MTUenv = Waze.location.code;
    if (debug) {
      console.info('WME Map Tiles Update - Serveur : ' + MTUenv);
    } //    Then running

    if (!localStorage.getItem('MTUlastupdate') || !IsJsonString(localStorage.getItem('MTUlastupdate'))) {
      localStorage.setItem('MTUlastupdate', '{"usa":"","row":"","il":""}');
    } // Translation

    MTULang = I18n.locale;
    if (debug) {
      console.info('WME Map Tiles Update - Langue: ' + MTULang);
    }
    html();
    Waze.selectionManager.events.register('selectionchanged', null, Check_MTU);
    //Check_MTU();
    setTimeout(Back_Info, 2000);
  }
  function html() {
    //CSS
    var cssElt = document.createElement('style');
    cssElt.type = 'text/css';
    var css = '#Info_div { z-index:10;width:25px;margin:0 auto;margin-top:18px; }';
    if (MTULang == 'he') {
      var float = 'right';
      css += '#Info_content {direction:rtl;}';
    } else {
      var float = 'left';
    }
    css += '.Info_title { clear:both;float:' + float + ';width:160px;padding-right:15px;line-height:22px; text-align:' + float + '; }';
    css += '.Info_data { float:' + float + '; }';
    css += '.Info_line { clear:both;float:' + float + ';height:1px;min-width:330px;background-color:#59899e; }';
    css += '#Info_server { z-index:10;float:' + float + ';width:22px;height:22px;background:url(data:image/png;base64,' + icon_info + ') no-repeat ' + float + ' top; }';
    css += '#Info_text { z-index:11;float:' + float + '; }';
    css += '#Info_close { z-index:11;float:right;width:11px;height:11px;margin-right:3px;background:url(data:image/png;base64,' + icon_close + ') no-repeat right top; }';
    css += '#lastupderr { clear:both;float:' + float + ';width:330px;color:#F23456;line-height:22px;}';
    css += '#Info_content { z-index:10;position:fixed;top:80px;margin-left:30px;line-height:22px;padding:8px 5px 5px 8px;color:white;background-color:rgba(0,0,0,0.7);border-radius:6px;display:none; }';
    cssElt.innerHTML = css;
    document.body.appendChild(cssElt);
    //HTML
    var div = document.createElement('div');
    div.id = 'Info_div';
    var divicon = document.createElement('div');
    divicon.id = 'Info_server';
    divicon.onmouseover = (function () {
      Back_Info();
      Show_Info_content();
    });
    divicon.onmouseout = (function () {
      getId('Info_content').style.display = 'none';
      divicon.style.opacity = '0.5';
      clearTimeout(timermaphours);
    });
    divicon.onclick = (function () {
      if (MTUenv === 'il') {
        window.open('https://status-il.waze.com/');
      } 
      else {
        window.open('https://status.waze.com/');
      }
    });
    div.appendChild(divicon);
    var divinfo = document.createElement('div');
    divinfo.id = 'Info_content';
    div.appendChild(divinfo);
    var divtext = document.createElement('div');
    divtext.id = 'Info_text';
    switch (MTULang) {
      case 'fr':
        userLang = new Array('Mis &agrave; jour jusqu\'au', 'Fait le', 'Dernier problème', 'Heure locale', 'Heure carte', 'Heure UTC', 'local');
        break;
      case 'pt-BR':
        userLang = new Array('Dados de', 'Efetuado em', 'Última problema', 'Hora local', 'Hora mapa', 'Hora UTC', 'local');
        break;
      case 'he':
        userLang = new Array('עדכון אחרון', 'בוצע', 'בעיה אחרונה', 'זמן מקומי', 'זמן מפה', 'זמן UTC', 'מקומי');
        break;
      default:
        userLang = new Array('Last update', 'Performed', 'Last problem', 'Home time', 'Map time', 'UTC time', 'home');
        break;
    }
    var content = '<div class=\'Info_title\'>' + translate_server(MTULang) + ' :</div><div class=\'Info_data\'><b>' + I18n.translations[MTULang].envs[MTUenv] + '</b></div>';
    content += '<div class=\'Info_title\'>' + userLang[0] + ' :</div><div class=\'Info_data\' style=\'color:#93C4D3;\' id=\'lastdate\'></div>';
    content += '<div class=\'Info_title\'>&nbsp;</div><div class=\'Info_data\' style=\'color:#59899e;\' id=\'lasttimeutc\'></div>';
    content += '<div class=\'Info_title\'>' + userLang[1] + ' :</div><div class=\'Info_data\' style=\'color:#93C4D3;\' id=\'whendate\'></div>';
    content += '<div class=\'Info_title\'>&nbsp;</div><div class=\'Info_data\' style=\'color:#59899e;\' id=\'whentimeutc\'></div>';
    content += '<div class=\'Info_line\'></div><div id=\'mtuerror\'>';
    content += '<div class=\'Info_title\'>' + userLang[2] + ' :</div><div class=\'Info_data\' style=\'color:#F23456;\' id=\'probdate\'></div>';
    content += '<div id=\'lastupderr\'></div>';
    content += '<div class=\'Info_line\'></div></div>';
    content += '<div class=\'Info_title\'>' + userLang[5] + ' :</div><div class=\'Info_data\' style=\'color:#93C4D3;font-weight:bold;\' id=\'utchours\'></div>';
    content += '<div class=\'Info_title\'>' + userLang[3] + ' :</div><div class=\'Info_data\' style=\'color:#93C4D3;font-weight:bold;\' id=\'localhours\'></div>';
    content += '<div class=\'Info_title\'>' + userLang[4] + ' :</div><div class=\'Info_data\' style=\'color:#93C4D3;font-weight:bold;\' id=\'maphours\'></div>';
    content += '<div id=\'tzname\' style=\'color:#59899e;font-weight:bold;font-size:10px;float:' + float + ';padding:0 5px;\'></div>';
    divtext.innerHTML = content;
    divinfo.appendChild(divtext);
    var divclose = document.createElement('div');
    divclose.id = 'Info_close';
    divclose.onclick = (function () {
      divinfo.style.backgroundColor = 'rgba(' + [0,
      0,
      0,
      0.7].join(',') + ')';
      divinfo.style.display = 'none';
      divicon.style.opacity = '0.5';
    });
    divinfo.appendChild(divclose);
    MTUhandle.appendChild(div);
    if (debug) {
      console.log('WME Map Tiles Update - HTML OK');
  }
}
function Show_Info_content() {
  getId('Info_content').style.display = 'block';
  getId('Info_server').style.opacity = '1';
  if (getComputedStyle(getElementsByClassName('olControlPanZoomBar') [0]).getPropertyValue('left') === '10px') {
    getId('Info_content').style.left = '350px';
    getId('Info_content').style.right = '';
  } else {
    getId('Info_content').style.right = '50px';
    getId('Info_content').style.left = '';
  }
}
function Back_Info() {
  try {
    if (MTUenv == 'il') {
      var url = 'https://status-il.waze.com/feeds/posts/default';
    } 
    else {
      var url = 'https://status.waze.com/feeds/posts/default';
    }
    var params = {
      url: url,
      headers: {
        'User-Agent': 'Mozilla/5.0',
        'Accept': 'text/plain'
      },
      data: null,
      method: 'GET'
    };
    MTUDownloadHelper.add(params, function (data) {
      if (debug) {
        console.log('MTU - Data from ', MTUenv, url, data);
      }
      if (data && data.status == 'success') {
        // Get XML data
        var parser = new DOMParser(),
        whenupdate,
        lastupdate,
        probDate,
        probReason;
        var xml = parser.parseFromString(data.data, 'text/xml');
        var items = xml.getElementsByTagName('entry');
        for (var i = 0; i < items.length; i++) {
          var title = items[i].getElementsByTagName('title') [0].innerHTML;
          var pubdate = items[i].getElementsByTagName('published') [0].innerHTML;
          var category = title.split(' ');
          if (!probReason && category[0] != 'INTL' && category[0] != 'NA' && category[0] != 'ISRAEL') {
            probDate = pubdate;
            probReason = title;
          }
          if (!whenupdate) {
            if (MTUenv == 'usa' && category[0] == 'NA' || MTUenv == 'row' && category[0] == 'INTL' || MTUenv == 'il' && category[0] == 'ISRAEL') {
              whenupdate = pubdate;
              lastupdate = title.substring(title.indexOf('successfully updated to:') + 25);
              break;
            }
          } else {
            break;
          }
        }
        if (debug) {
          console.log('MTU ' + category[0] + ' / ' + whenupdate + ' / ' + lastupdate + ' / ' + probDate + ' / ' + probReason);
        }
        var step = new Date().getTimezoneOffset() / 60;
        timestamp = toTimestamp(lastupdate) * 1000;
        // Update date
        var lastdate,
        a = lastupdate.split(' ');
        if (MTULang == 'fr') {
          lastdate = pad(a[1].replace(',', '')) + ' ' + a[0] + ' ' + a[2];
        } else {
          lastdate = a[0] + ' ' + pad(a[1].replace(',', '')) + ', ' + a[2];
        } // Update UTC Time

        var lasttimeutc = a[3] + ' ' + a[4];
        // Update local Time
        var lasttimeloc,
        b = a[3].split(':');
        var hb = parseInt(b[0]);
        if ((hb - step) < 10) {
          lasttimeloc = '0' + (hb - step) + ':' + b[1];
          var dd = '';
        } 
        else if ((hb - step) > 23) {
          if ((hb - step - 24) < 10) {
            lasttimeloc = '0' + (hb - step - 24) + ':' + b[1];
            var dd = ' (+1)';
          } 
          else {
            lasttimeloc = (hb - step - 24) + ':' + b[1];
            var dd = ' (+1)';
          }
        } 
        else {
          lasttimeloc = (hb - step) + ':' + b[1];
          var dd = '';
        }
        if (debug) {
          console.log('MTU dernier Update le ' + lastdate + ' à ' + lasttimeutc + ' / ' + lasttimeloc);
        } // Last  update

        convertDate(whenupdate, step);
        getId('lastdate').innerHTML = '<b>' + lastdate + '</b>';
        getId('whendate').innerHTML = '<b>' + whendate + '</b>';
        if (MTULang == 'he') {
          getId('lasttimeutc').innerHTML = dd + '<b>' + lasttimeloc + ' ' + userLang[6] + ' / ' + lasttimeutc + '</b>';
          getId('whentimeutc').innerHTML = dw + '<b>' + whentimeloc + ' ' + userLang[6] + ' / ' + whentimeutc + '</b>';
        } 
        else {
          getId('lasttimeutc').innerHTML = '<b>' + lasttimeutc + ' / ' + lasttimeloc + ' ' + userLang[6] + '</b>' + dd;
          getId('whentimeutc').innerHTML = '<b>' + whentimeutc + ' / ' + whentimeloc + ' ' + userLang[6] + '</b>' + dw;
        } // Problem message

        if (probDate) {
          convertDate(probDate, step);
          getId('mtuerror').style.display = 'block';
          getId('probdate').innerHTML = '<b>' + whendate + '</b>';
          getId('lastupderr').innerHTML = '<b>' + probReason + '</b>';
        } else {
          getId('mtuerror').style.display = 'none';
        } // If new update

        var checklast = JSON.parse(localStorage.getItem('MTUlastupdate'));
        if (checklast[MTUenv] != whenupdate) {
          getId('Info_content').style.backgroundColor = 'rgba(' + [25,
          50,
          0,
          0.7].join(',') + ')';
          Show_Info_content();
          checklast[MTUenv] = whenupdate;
          localStorage.setItem('MTUlastupdate', JSON.stringify(checklast));
          if (typeof (timerupd) != 'undefined') {
            clearTimeout(timerupd);
          }
        } else {
          timerupd = setTimeout(function () {
            getId('Info_content').style.backgroundColor = 'rgba(' + [0,
            0,
            0,
            0.7].join(',') + ')';
            getId('Info_content').style.display = 'none';
            getId('Info_server').style.opacity = '0.5';
            clearTimeout(timermaphours);
          }, 5000);
        }
      } 
      else {
        console.log('Error: ', data);
        getId('probdate').innerHTML = '<b>Error with datas</b>';
      }
    }, null);
  } 
  catch (e) {
    console.error('Error @ upload data:', e);
    getId('probdate').innerHTML = '<font color=\'red\'>Error width datas</font>';
  }
  gettimezone();
  setTimeout(Back_Info, 1000 * 60 * 30);
}
function Check_MTU() {
  try {
    var a = getElementsByClassName('additional-attributes list-unstyled side-panel-section') [0];
    if (typeof (a) === 'undefined') {
      return;
    }
    var so = Waze.selectionManager.selectedItems[0];
    if (so.model.attributes.residential) { // Special residential
      var createdOn = so.model.attributes.createdOn,
      domCreated = I18n.translations[MTULang].edit.created + ' ',
      cd = new Date(createdOn).toString();
      var updatedOn = so.model.attributes.updatedOn,
      domUpdated = I18n.translations[MTULang].edit.updated + ' ',
      ud = new Date(updatedOn).toString();
      var content = '<li>' + domCreated.replace('%{time}', '<font color="' + checkTimestamp(createdOn) + '"><b>' + cd.substring(0, cd.indexOf(' GMT')) + '</b></font>').replace('%{user}', 'Wazer') + '</li>';
      if (typeof (updatedOn) !== 'undefined') {
        content += '<li>' + domUpdated.replace('%{time}', '<font color="' + checkTimestamp(updatedOn) + '"><b>' + ud.substring(0, ud.indexOf(' GMT')) + '</b></font>').replace('%{user}', 'Wazer') + '</li>';
      }
      a.children[0].innerHTML = content + a.children[0].innerHTML;
    } 
    else if ((so.model.type === 'segment' || so.model.type === 'venue') && typeof (so.model.attributes.createdBy) !== 'undefined') {
      var createdOn = so.model.attributes.createdOn,
      createdBy = Waze.model.users.get(so.model.attributes.createdBy).userName,
      createdByRank = Waze.model.users.get(so.model.attributes.createdBy).normalizedLevel,
      domCreated = I18n.translations[MTULang].edit.created + ' ',
      cd = new Date(createdOn).toString();
      if (typeof (so.model.attributes.updatedBy) !== 'undefined') {
        var updatedOn = so.model.attributes.updatedOn,
        updatedBy = Waze.model.users.get(so.model.attributes.updatedBy).userName,
        updatedByRank = Waze.model.users.get(so.model.attributes.updatedBy).normalizedLevel,
        domUpdated = I18n.translations[MTULang].edit.updated + ' ',
        ud = new Date(updatedOn).toString();
      }
      if (so.model.type == 'segment') {
        var b = a.children[1].innerHTML,
        c = a.children[2].innerHTML; // segment
      } else {
        if (typeof (updatedOn) === 'undefined') {
          var b = null,
          c = a.children[0].innerHTML; // venue without update
        } else {
          var b = a.children[0].innerHTML,
          c = a.children[1].innerHTML; // venue
        }
      }
      if (so.model.type == 'segment') {
        a.children[2].innerHTML = domCreated.replace('%{time}', '<font color="' + checkTimestamp(createdOn) + '"><b>' + cd.substring(0, cd.indexOf(' GMT')) + '</b></font>').replace('%{user}', colorUser(createdBy, createdByRank));
        if (updatedOn) {
          a.children[1].innerHTML = domUpdated.replace('%{time}', '<font color="' + checkTimestamp(updatedOn) + '"><b>' + ud.substring(0, ud.indexOf(' GMT')) + '</b></font>').replace('%{user}', colorUser(updatedBy, updatedByRank));
        }
      } 
      else {
        if (typeof (updatedOn) === 'undefined') {
          a.children[0].innerHTML = domCreated.replace('%{time}', '<font color="' + checkTimestamp(createdOn) + '"><b>' + cd.substring(0, cd.indexOf(' GMT')) + '</b></font>').replace('%{user}', colorUser(createdBy, createdByRank));
        } else {
          a.children[1].innerHTML = domCreated.replace('%{time}', '<font color="' + checkTimestamp(createdOn) + '"><b>' + cd.substring(0, cd.indexOf(' GMT')) + '</b></font>').replace('%{user}', colorUser(createdBy, createdByRank));
        }
        if (updatedOn) {
          a.children[0].innerHTML = domUpdated.replace('%{time}', '<font color="' + checkTimestamp(updatedOn) + '"><b>' + ud.substring(0, ud.indexOf(' GMT')) + '</b></font>').replace('%{user}', colorUser(updatedBy, updatedByRank));
        }
      }
    } 
    else {
      return;
    }
  } 
  catch (e) {
    console.error('MTU Error @ catch data:', e);
  }
}
function gettimezone() {
  var a = getElementsByClassName('WazeControlPermalink') [0].innerHTML;
  var b = a.substring(a.indexOf('https')).split('?');
  var c = b[1].split(/"/g);
  var d = c[0].split('&amp;');
  for (var i = 0; d[i]; i++) {
    if (d[i].substring(0, 3) == 'lon') {
      var lon = d[i].substring(4);
    }
    if (d[i].substring(0, 3) == 'lat') {
      var lat = d[i].substring(4);
    }
  }
  try {
    if (debug) {
      console.log('MTU - url : https://maps.googleapis.com/maps/api/timezone/json?location=' + lat + ',' + lon + '&timestamp=' + Math.floor(new Date().getTime() / 1000) + '&language=' + MTULang);
    }
    var params = {
      url: 'https://maps.googleapis.com/maps/api/timezone/json?location=' + lat + ',' + lon + '&timestamp=' + Math.floor(new Date().getTime() / 1000) + '&language=' + MTULang,
      headers: {
        'User-Agent': 'Mozilla/5.0',
        'Accept': 'text/plain'
      },
      data: null,
      method: 'GET'
    };
    MTUDownloadHelper.add(params, function (data) {
      if (data.status == 'success') {
        var timezone = JSON.parse(data.data);
        tz = timezone.rawOffset * 1000 + timezone.dstOffset * 1000;
        if (debug) {
          console.log('MTU - Loading Time Zone Success');
        }
        getId('tzname').innerHTML = ' (' + timezone.timeZoneId.replace(/\_/g, ' ') + ')';
        maphours();
      }
    }, null);
  } 
  catch (e) {
    console.error('MTU Error @ upload data:', e);
  }
}
function convertDate(date, step) {
  var c = date.split('T');
  var d = c[0].split('-');
  if (MTULang == 'fr') {
    whendate = d[2] + ' ' + I18n.translations[MTULang].date.month_names[parseInt(d[1])] + ' ' + d[0];
  } 
  else {
    whendate = I18n.translations[MTULang].date.month_names[parseInt(d[1])] + ' ' + d[2] + ', ' + d[0];
  } // Publishing UTC Time

  var e = c[1].split('.');
  whentimeutc = e[0].substring(0, 5) + ' UTC';
  // Publishing local Time
  var b = e[0].split(':');
  var hb = parseInt(b[0]);
  if ((hb - step) < 10) {
    whentimeloc = '0' + (hb - step) + ':' + b[1];
    dw = '';
  } 
  else if ((hb - step) > 23) {
    if ((hb - step - 24) < 10) {
      whentimeloc = '0' + (hb - step - 24) + ':' + b[1];
      dw = ' (+1)';
    } 
    else {
      whentimeloc = (hb - step - 24) + ':' + b[1];
      dw = ' (+1)';
    }
  } 
  else {
    whentimeloc = (hb - step) + ':' + b[1];
    dw = '';
  }
  if (debug) {
    console.log('MTU Update le ' + whendate + ' à ' + whentimeutc + ' / ' + whentimeloc);
  }
  return;
}
function maphours() {
  //Local time
  var d = new Date();
  var h = pad(d.getHours());
  var m = pad(d.getMinutes());
  var s = pad(d.getSeconds());
  getId('localhours').innerHTML = h + ':' + m + ':' + s;
  //Map time
  var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
  var dtz = utc + tz;
  var md = new Date(dtz);
  var mh = pad(md.getHours());
  var mm = pad(md.getMinutes());
  var ms = pad(md.getSeconds());
  getId('maphours').innerHTML = mh + ':' + mm + ':' + ms;
  // UTC Time
  var ud = new Date(utc);
  var uh = pad(ud.getHours());
  var um = pad(ud.getMinutes());
  var us = pad(ud.getSeconds());
  getId('utchours').innerHTML = uh + ':' + um + ':' + us;
  timermaphours = setTimeout(maphours, 1000);
}
function colorUser(editor, rank) {
  var user;
  if (/^(admin|avseu|WazeFeed|WazeParking1|waze-maint-bot|Waze3rdparty)/.test(editor)) {
    user = '<font color="red">' + editor + '(' + rank + ')</font>';
  } 
  else if (editor === 'Inactive User') {
    user = '<font color="grey">' + editor + '(' + rank + ')</font>';
  } 
  else if (typeof (editor) === 'undefined') {
    user = '<font color="grey">Wazer(' + rank + ')</font>';
  } 
  else {
    user = '<a target="_blank" href="https://www.waze.com/user/editor/' + editor + '">' + editor + '(' + rank + ')</a>';
  }
  return user;
}
console.log('WME Map Tiles Update - ' + WME_MUpdate_Version + ' starting');
MTUinit();
}
var MTUscript = document.createElement('script');
MTUscript.textContent = '' + run_MTU.toString() + ' \n' + 'run_MTU();';
MTUscript.setAttribute('type', 'application/javascript');
document.body.appendChild(MTUscript);