Freedit L1+

Vrstva míst úprav pro nováčky Freedit L1+

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

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

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==UserScript==
// @name                Freedit L1+
// @namespace           https://greasyfork.org/users/10038-janek250
// @author              Janek250 & Martin Kolář & krizecek
// @description         Vrstva míst úprav pro nováčky Freedit L1+
// @include             https://www.waze.com/editor/*
// @include             https://www.waze.com/*/editor/*
// @include             https://editor-beta.waze.com/*
// @include             https://beta.waze.com/*
// @version             0.6.7.2
// @grant               none
// ==/UserScript==
//--------------------------------------------------------------------------------------

FE_version = '0.6.7.2';

/* definice trvalých proměných */
  var FE_data = [];
  var FE_dataLoad = false;
  var FE_dataCount = 0;
  var FE_colors = ['#00BBFF', '#FFAE00', '#FFFF00', '#5E8F47', '#FF0000']; //HTML barvy modrá = #00BBFF oranžová = #FFAE00 žlutá = #FFFF00 zelená = #5E8F47 červená = #FF0000
  var FE_date = new Date();
  var Fe_me = null;
  var FE_baseURLs = [new RegExp("https://www.waze.com/editor/"), new RegExp("https://www.waze.com/[^/]+/editor/"), new RegExp("https://editor-beta.waze.com/")];
  var freedit_select_dataWaitForMergeEnd = false;
  var freedit_div_perma = null;
  var FE_url = '//www.wazer.cz/f/';
  // var FE_url = '//freedit.local/';

  //  controllors keys settings
  var FE_controllorKey = localStorage.getItem('FE_controllorKey');
  if (typeof FE_controllorKey != 'string') {
    FE_controllorKey = '';
  }
  else if (FE_controllorKey == '') {
    FE_controllorKey = '';  //  pokud jsi dostal klic pro kontrolory, sem ho prosim zadej!
  }

  //  controllors keys settings
  var FE_controllorKeyEnable = localStorage.getItem('FE_controllorKeyEnable');
  if (typeof FE_controllorKeyEnable != 'string') {
    FE_controllorKeyEnable = '';
  }

  //  online/offline status
  var FE_status = localStorage.getItem('FE_status');
  if (FE_status === null) { //  default status
    FE_status = 'on';
  }

  console.log('WME Freedit Status: ' + FE_status);

  var FE_linksSettings = {
    'add_new': FE_url + 'addFreedit.php?name={name}&link={link}&region={region}&district={district}&added_by={added_by}',
    'register_freedit': FE_url + 'giveMeEdit.php?editor={editor}&freedit={freedit}&state=1',
    'send_freedit_to_control': FE_url + 'giveMeEdit.php?editor={editor}&freedit={freedit}',
    'send_control_report': FE_url + 'sendControlMessage.php?freedit={freedit}&editor={editor}&key={key}',
    'get_all_data_of_freedit': FE_url + 'getDataById.php?freedit={freedit}'
  };

  //  language settings
  // var FE_allowLanguage = ['cs', 'en'];
  var FE_allowLanguage = ['cs'];
  var FE_language = 'cs';  //  default language
  var FE_translation = [];

  //  cs translation
  FE_translation['cs'] = {
    'link': 'https://www.waze.com/cs/editor/?env=row&lon={lon}&lat={lat}&zoom={zoom}',
    'map_layer_state_0': 'Freedit: {id}\nVložil: {added_by}',
    'map_layer_state_1': 'Freedit: {id}\nEdituje: {editor}',
    'map_layer_state_2': 'Freedit: {id}\neditoval: {editor}\n ke kontrole',
    'map_layer_state_3': 'Freedit: {id}\neditoval: {editor}\n HOTOVO, děkujeme',
    'map_layer_state_4': 'Freedit: {id}\neditoval: {editor}\n CHYBA',
    'tab_add_new_freedit': 'Formulář pro zadání nového',
    'tab_freedit_table': 'Tabulka',
    'tab_graphs': 'Grafy',
    'tab_forum': 'Fórum',
    'tab_signpost': 'Rozcestník',
    'tab_status_message_online': 'Status: <a href="#" id="freedit-switch-on-off">{state}</a><br> Načteno: {freedit_count} F',
    'tab_status_message_offline': 'Status: <a href="#" id="freedit-switch-on-off">{state}</a><br> Načteno: {freedit_count} F<br>Data pochází z data: {date}',
    'tab_hot_tips_headline': '<br /><br /><b>K editaci:</b>',
    'tab_hot_tips_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a> {attrs}',
    'tab_editing_headline': '<br /><b>Edituji:</b><br />',
    'tab_editing_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a></u> {editor}: {attrs}',
    'tab_control_headline': '<br /><b>Ke kontrole:</b><br />',
    'tab_control_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a></u> {editor}: {attrs}',
    'tab_mistake_headline': '<br /><b>Přepracovat:</b><br />',
    'tab_mistake_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a> {editor}: {attrs}',
    'tab_my_complete_freedit_headline': '<br /><b>Moje hotové freedity:</b><br />',
    'tab_my_complete_freedit_link': '<a href="{link}" class="freedit-link" data-freedit-id="{id}">Freedit {id}</a> {editor}: {attrs}',
    'tab_bottom_legend': '<font size="1">Legenda:<br />G - oprava geometrie<br />K - kreslit nové uličky / parkoviště<br />O - kontrola odbočení / jednosměrek<br />N - kontrola názvu ulic / obce<br />A - Areály</font>',
    'script_version': '<font size="1"><a href="https://www.waze.com/forum/viewtopic.php?f=22&t=136397" target="_blank">Script Freedit L1+ verze {version}</a></font>',
    'add_new_form_error': 'Formulář není kompletní! Vyplň všechny údaje!',
    'add_new_form_success': 'Nový freedit byl úspěšně zadán. Děkujeme!',
    'register_editing_error': 'Formulář není kompletní! Vyplň všechny údaje!',
    'register_editing_success': 'Úspěšně jsi se přihlásil k editování. Můžeš začít!',
    'freedit_to_control_error': 'Formulář není kompletní! Vyplň všechny údaje!',
    'freedit_to_control_success': 'Díky za opravení. V nejbližší době se na tvoje dílo podívá L3+ editor a upozorní tě na případné chyby.',
    'control_message_error': 'Formulář není kompletní! Vyplň všechny údaje!',
    'control_message_success': 'Díky za kontrolu!',
    'msg_center_change_status': 'Změna stavu:',
    'msg_center_change_status_0': '0',
    'msg_center_change_status_1': 'přihlášen k editaci.',
    'msg_center_change_status_2': 'odevzdáno.',
    'msg_center_change_status_3': 'uzavřeno.',
    'msg_center_change_status_4': 'vráceno s chybou.',
    //  forms
    'modal-window-close': 'Zavřít okno',
    'add-new-form-name': 'Název:',
    'add-new-form-permalink': 'Permalink:',
    'add-new-form-shape': 'Tvar:',
    'add-new-form-shape-1': '1 - Obdelník na ležato (výřez z obrazovky)',
    'add-new-form-shape-2': '2 - Obdelník na stojato',
    'add-new-form-shape-3': '3 - Čtverec',
    'add-new-form-region': 'Kraj:',
    'add-new-form-district': 'Okres:',
    'add-new-form-attr-header': 'Co je potřeba udělat:',
    'add-new-form-shape-g': 'G - oprava geometrie',
    'add-new-form-shape-k': 'K - kreslit nové uličky / parkoviště',
    'add-new-form-shape-o': 'O - kontrola odbočení / jednosměrek',
    'add-new-form-shape-n': 'N - kontrola názvu ulic / obce',
    'add-new-form-shape-a': 'A - areál',
    'add-new-form-added-by': 'Vložil:',
    'add-new-form-button': 'Přidat',

    'register-editing-freedit-number': 'Číslo Freeditu:',
    'register-editing-editor': 'Editor:',
    'register-editing-freedit-state': 'Stav:',
    'register-editing-freedit-state-1': '1 - Přihlásit se k editování',
    'register-editing-freedit-state-2': '2 - Mám hotovo prosím zkontrolujte',
    'register-editing-comment': 'Komentář:',
    'register-editing-button': 'Odeslat',

    'control-message-freedit-number': 'Číslo Freeditu:',
    'control-message-editor': 'Editor:',
    'control-message-state': 'Stav:',
    'control-message-state-3': '3 - Zkontrolováno, bez výhrad',
    'control-message-state-4': '4 - Nedostatky, nutná oprava',
    'control-message-comment': 'Komentář:',
    'control-message-button': 'Odeslat',

    'send_error': 'Při odesílání formuláře došlo k chybě. Zkus to za chvíli znovu…',
  };

  //  en translation
  FE_translation['en'] = {

  };

  //Obdelník na ležato
  var FE_shape1x = [0.245760,0.122880,0.061440,0.030720,0.015360,0.007680,0.003840,0.001920,0.000960,0.000480,0.000240];
  var FE_shape1y = [0.088064,0.044032,0.022016,0.011008,0.005504,0.002752,0.001376,0.000688,0.000344,0.000172,0.000086];
  //Obdelní na stojato
  var FE_shape2x = [0.075562,0.037781,0.018890,0.009445,0.004723,0.002361,0.001181,0.000590,0.000295,0.000148,0.000074];
  var FE_shape2y = [0.088064,0.044032,0.022016,0.011008,0.005504,0.002752,0.001376,0.000688,0.000344,0.000172,0.000086];
  //Čtverec
  var FE_shape3x = [0.136272,0.068136,0.034068,0.017034,0.008517,0.004259,0.002129,0.001065,0.000532,0.000266,0.000133];
  var FE_shape3y = [0.088064,0.044032,0.022016,0.011008,0.005504,0.002752,0.001376,0.000688,0.000344,0.000172,0.000086];

  //  styles
  var FE_styles = '<style type="text/css">'
    + '#fe-modal-window-background { position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.5);z-index:99990; }'
    + '#fe-modal-window { position:fixed;width:900px;left:50%;margin-left:-450px;height:700px;top:50%;margin-top:-350px;z-index:99992;background:#ffffff;padding:20px; }'
    + '.fe-hot-tips {width:100%;height:300px;overflow-y:scroll;}'
    + '#FEmsg textarea {height: 140px;}'
    + '#FEmsg .header{background-color:#906090;}'
    + '#FEmsg .list-unstyled{overflow-y:auto;}'
    + '#FEmsg .problem-data{overflow-y:hidden;}'
    + '</style>';

if (FE_status == 'on') {
  console.log('WME Freedit: Start load data');

  $.get(FE_url + 'getData.php', function(data) {
    localStorage.setItem("FE_data", JSON.stringify(data));
    localStorage.setItem("FE_data_date", FE_date.toLocaleDateString());
    for (var i in data) {
      FE_data[data[i].id] = data[i];
    }

    FE_dataCount = FE_data.length;
    FE_dataLoad = true;
  }, 'json');
}
else {
  data = JSON.parse(localStorage.getItem("FE_data"));

  for (var i in data) {
    FE_data[data[i].id] = data[i];
  }

  FE_dataCount = FE_data.length;
  FE_dataLoad = true;
}

//Ošetření service Greasymonkey
function freedit_bootstrap() {
  bGreasemonkeyServiceDefined = false;

  try {
    bGreasemonkeyServiceDefined = (typeof Components.interfaces.gmIGreasemonkeyService == 'object');
  }
  catch (err) {
    /* Ignore */
  }

  if (typeof unsafeWindow == 'undefined' || !bGreasemonkeyServiceDefined) {
    unsafeWindow  = (function (){
      dummyElem = document.createElement('p');
      dummyElem.setAttribute ('onclick', 'return window;');
      return dummyElem.onclick ();
    });
  }

  /* Začátek kódu */
  freedit_wait();
}

//definování funkce a vzhled polygonu
function AddRaidPolygon(raidLayer, groupPoints, groupColor, groupNumber) {
  mro_Map = Waze.map;
  mro_OL = OpenLayers;
  groupName = 'RaidGroup' + groupNumber;

  style = { //nastavení vzhledu polygonu
    strokeColor: groupColor,
    strokeOpacity: .7,      //pruhlednost čáry
    strokeWidth: 2,   //toušťka obvodové čáry
    fillColor: groupColor,
    fillOpacity: 0.10,    //průhlednost výplně
    label: groupNumber,
    labelOutlineColor: 'black',   //linka kolem textu
    labelOutlineWidth: 3,     //šířka linky
    fontSize: 14,
    fontColor: groupColor,
    fontOpacity: .85,
    fontWeight: 'bold'
  };

  attributes = {
    name: groupName,
    number: groupNumber
  };

  pnt= [];

  for (i = 0; i < groupPoints.length; i++){
    convPoint = new OpenLayers.Geometry.Point(groupPoints[i].lon,groupPoints[i].lat).transform(new OpenLayers.Projection('EPSG:4326'), mro_Map.getProjectionObject());
    pnt.push(convPoint);
  }

  ring = new mro_OL.Geometry.LinearRing(pnt);
  polygon = new mro_OL.Geometry.Polygon([ring]);
  feature = new mro_OL.Feature.Vector(polygon,attributes,style);
  raidLayer.addFeatures([feature]);
}

//funkce vycuc lon / lat / zoom z permalinku
function getQueryString(link, name) {
  pos = link.indexOf( name + '=' ) + name.length + 1;
  len = link.substr(pos).indexOf('&');
  if (-1 == len) len = link.substr(pos).length;
  return link.substr(pos,len);
}

//funkce MMR??
function CurrentRaidLocation(raid_mapLayer) {
  mro_Map = Waze.map;

  for(i = 0; i < raid_mapLayer.features.length; i++){
    raidMapCenter = mro_Map.getCenter();
    raidCenterPoint = new OpenLayers.Geometry.Point(raidMapCenter.lon,raidMapCenter.lat);
    raidCenterCheck = raid_mapLayer.features[i].geometry.components[0].containsPoint(raidCenterPoint);

    if (raidCenterCheck === true) {
      raidLocationLabel = 'Editorův ráj - ' + $('.WazeControlLocationInfo').text();

      setTimeout(function(){
        $('.WazeControlLocationInfo').text(raidLocationLabel);
      },200);
    }
  }
}

//funkce inicializace MMR??
function InitMapRaidOverlay() {
  mro_Map = Waze.map;
  mro_OL = OpenLayers;
  mro_mapLayers = mro_Map.getLayersBy('uniqueName','Freedit L1+');
  raid_mapLayer = new mro_OL.Layer.Vector('Freedit L1+', {
    displayInLayerSwitcher: true,
    uniqueName: 'Freedit L1+'
  });

  // I18n.translations.en.layers.name['Freedit L1+'] = 'Freedit L1+';
  mro_Map.addLayer(raid_mapLayer);


 //  // ***
 //  // Načtení stavu vrstvy zobrazena/skryta
 //  //

 //  // defaultně je vrstva zapnutá
 //  var FE_visible = true;

 //  // načte poslední uložený stav zobrazení vrstvy z localstorage
 //  if (localStorage) {
 //    var options = JSON.parse(localStorage.getItem("FE_options"));

 //    FE_visible = options[0];
 //    console.log("WME Freedit: Options loaded.");
 //  }

 // // uložení stavu zobrazení vrstvy při exitu WME
 //  saveOptions = function() {
 //    if (localStorage) {
 //      var options = [];

 //      FE_visible = raid_mapLayer.visibility;
 //      options[0] = FE_visible;

 //      localStorage.setItem("FE_options", JSON.stringify(options));
 //      console.log("WME Freedit: Options saved.");
 //    }
 //  }

 //  window.addEventListener("beforeunload", saveOptions, false);

 //  // zobrazení nebo skrytí vrstvy podle posledního uloženého stavu
 //  raid_mapLayer.setVisibility(true);

  for (var i in FE_data) {
    actualFe = FE_data[i];
    if (typeof actualFe == 'object') {
      switch(actualFe.shape) {
        case 1:
          zx = FE_shape1x;
          zy = FE_shape1y;
          break;
        case 2:
          zx = FE_shape2x;
          zy = FE_shape2y;
          break;
        default:
          zx = FE_shape3x;
          zy = FE_shape3y;
      }

      b1x = actualFe.lon - zx[actualFe.zoom];
      b1y = actualFe.lat + zy[actualFe.zoom];
      b2x = actualFe.lon + zx[actualFe.zoom];
      b3y = actualFe.lat - zy[actualFe.zoom];

      FE_shapeOptions = [{lon:b1x,lat:b1y},{lon:b2x,lat:b1y},{lon:b2x,lat:b3y},{lon:b1x,lat:b3y}];
      FE_info = '';
      optionsTranslation = {};

      switch(actualFe.state) {
        case 0:
          FE_info = fe_t('map_layer_state_0', {'id': actualFe.id, 'added_by': actualFe.added_by});
          break;
        case 1:
          FE_info = fe_t('map_layer_state_1', {'id': actualFe.id, 'editor': actualFe.editor});
          break;
        case 2:
          FE_info = fe_t('map_layer_state_2', {'id': actualFe.id, 'editor': actualFe.editor});
          break;
        case 3:
          FE_info = fe_t('map_layer_state_3', {'id': actualFe.id, 'editor': actualFe.editor});
          break;
        case 4:
          FE_info = fe_t('map_layer_state_4', {'id': actualFe.id, 'editor': actualFe.editor});
          break;
      }

      AddRaidPolygon(raid_mapLayer, FE_shapeOptions, FE_colors[actualFe.state], FE_info);
    }
  }

  setTimeout(function(){CurrentRaidLocation(raid_mapLayer);},3000);
  mro_Map.events.register('moveend', Waze.map, function(){CurrentRaidLocation(raid_mapLayer);});
  mro_Map.events.register('zoomend', Waze.map, function(){CurrentRaidLocation(raid_mapLayer);});
}

//fce k záložce
function getElementsByClassName(classname, node) {
  if (!node) {
    node = document.getElementsByTagName('body')[0];
  }

  a = [];
  re = new RegExp('\\b' + classname + '\\b');
  els = node.getElementsByTagName('*');

  for (i = 0, j = els.length; i<j; i++) {
    if (re.test(els[i].className)) {
       a.push(els[i]);
     }
  }

  return a;
}

//fce obsah záložky
function getId(node) {
  return document.getElementById(node);
}

function getActualGpsLon() {
  return getQueryString($('.WazeControlPermalink a').attr('href'), 'lon');
}

function getActualGpsLat() {
  return getQueryString($('.WazeControlPermalink a').attr('href'), 'lat');
}

function getActualZoom() {
  return parseInt(getQueryString($('.WazeControlPermalink a').attr('href'), 'zoom'));
}

function returnWazeLink(lon, lat, zoom) {
  return fe_t('link', {'lon': lon, 'lat': lat, 'zoom': zoom});
}

function prepareLinkForSend(url) {
  do {
    url = url.replace('&', '%26');
  } while (url.indexOf('&') !== -1);

  return url;
}

function checkCtrlPress() {
  if (event.ctrlKey || event.shiftKey || event.metaKey || (event.button && event.button == 1)) {
    return true;
  }

  return false;
}

function getUrlParameter(param, url) {
  sPageURL = url.substring(1);
  sURLVariables = sPageURL.split('&');

  for (i = 0; i < sURLVariables.length; i++) {
    sParameterName = sURLVariables[i].split('=');

    if (sParameterName[0] == param) {
      return sParameterName[1];
    }
  }
}

function fe_t(name, params) { //  function for translation
  if (typeof params === 'object') {
    returnString = FE_translation[FE_language][name];

    for (var i in params) {
      do {
        returnString = returnString.replace('{' + i + '}', params[i]);
      } while (returnString.indexOf('{' + i + '}') !== -1);
    }

    return returnString;
  }
  else {
    return FE_translation[FE_language][name];
  }
}

function fe_l(name, params) { //  function for links
  if (typeof params === 'object') {
    returnString = FE_linksSettings[name];

    for (var i in params) {
      do {
        returnString = returnString.replace('{' + i + '}', params[i]);
      } while (returnString.indexOf('{' + i + '}') !== -1);
    }

    return returnString;
  }
  else {
    return FE_linksSettings[FE_language][name];
  }
}

function freedit_can_controll() {
  console.log(FE_controllorKey, FE_controllorKeyEnable);
  if (FE_controllorKey != '' && FE_controllorKeyEnable == '') {
    return true;
  }

  return false;
}

function freedit_can_control_disable() {
  if (FE_controllorKey != '' && FE_controllorKeyEnable == '0') {
    return true;
  }

  return false;
}

function freedit_make_tab() {
  FE_tipsHtml = '';
  FE_editingHtml = '';
  FE_forControllHtml = '';
  FE_mistakesHtml = '';
  FE_editlink = [];
  FE_onlineContent = '';
  FE_myCompleteHtml = '';

  tCon = '';  //  tabContent (obsah zalozky)
  tCon += '<div class="fe-tab-header">';

  if (Fe_me.rank > 1) {
    tCon += '<a href="#" id="freedit-add-new">' + fe_t('tab_add_new_freedit') + '</a><br />';
  }

  // + '<a href="https://docs.google.com/spreadsheets/d/1wywD5uYNmejO_t6Gufzu5tBW0SeVAFdr2KVdeSY1mWg/edit#gid=0" target="_blank">' + fe_t('tab_freedit_table') + '</a>'

  tCon += ' / (' + fe_t('tab_graphs') + ') / '
    + '<a href="https://www.waze.com/forum/viewtopic.php?f=274&amp;t=134151#p1065158&quot;" target="_blank">' + fe_t('tab_forum') + '</a> <font size="1">(' + fe_t('tab_signpost') + ')</font><br><br>'
    + '<form action="" class="freedit_id_form"><input type="text" name="freedit_id_input" class="freedit_id_input" placeholder="Zadej číslo F…"><input type="submit" name="freedit_id_search" class="freedit_id_search" value="Přejít"></form>';

  if (FE_status == 'on') {
    tCon += '<br /><br />' + fe_t('tab_status_message_online', {'state': 'ONline', 'freedit_count': FE_dataCount});
  }
  else {
    tCon += '<br /><br />' + fe_t('tab_status_message_offline', {'state': 'OFFline', 'freedit_count': FE_dataCount, 'date': localStorage.getItem("FE_data_date")});
  }

  if (freedit_can_controll()) {
    tCon += '<br><br><a href="#" class="freedit-turn-off-controlor">Vypnout kontrolu</a>';
  }
  else if (freedit_can_control_disable()) {
    tCon += '<br><br><a href="#" class="freedit-turn-on-controlor">Zapnout kontrolu</a>';
  }

  for (var i in FE_data) {
    switch(FE_data[i].state) {
      case 0:
        if (!freedit_can_controll()) {
          FE_tipsHtml += fe_t('tab_hot_tips_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'attrs': FE_data[i].attrs, 'user': Fe_me.userName});
          FE_tipsHtml += '<br />';
        }
        break;

      case 1:
        if (FE_data[i].editor == Fe_me.userName) {
          FE_editingHtml += fe_t('tab_editing_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs});
          FE_editingHtml += '<br />';
        }
        break;

      case 2:
        if (freedit_can_controll() || FE_data[i].editor == Fe_me.userName) {
          FE_forControllHtml += fe_t('tab_control_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs});
          FE_forControllHtml += '<br />';
        }
        break;

      case 3:
        if (FE_data[i].editor == Fe_me.userName) {
          FE_myCompleteHtml += fe_t('tab_my_complete_freedit_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs});
          FE_myCompleteHtml += '<br />';
        }
        break;

      case 4:
        FE_mistakesHtml += fe_t('tab_mistake_link', {'link': returnWazeLink(FE_data[i].lon, FE_data[i].lat, FE_data[i].zoom), 'id': FE_data[i].id, 'editor': FE_data[i].editor, 'attrs': FE_data[i].attrs});
        FE_mistakesHtml += '<br />';
        break;
    }
  }

  if (FE_editingHtml != '') { //  pokud se prave neco edituje, zobrazime to
    FE_onlineContent += fe_t('tab_editing_headline') + FE_editingHtml;
  }

  if (FE_forControllHtml != '') { //  pokud je neco ke kontrole, zobrazime to
    FE_onlineContent += fe_t('tab_control_headline') + FE_forControllHtml;
  }

  if (FE_mistakesHtml != '') { //  pokud jsou nekde nejake chyby, zobrazime to
    FE_onlineContent += fe_t('tab_mistake_headline') + FE_mistakesHtml;
  }

  if (FE_tipsHtml != '') { //  pokud jsou nejake horke tipy, zobrazime
    FE_onlineContent += fe_t('tab_hot_tips_headline') + '<div class="fe-hot-tips">' + FE_tipsHtml + '</div>';
  }

  if (FE_myCompleteHtml != '') {  //  pokud jsem neco dokoncil, tak to zobrazime
    FE_onlineContent += fe_t('tab_my_complete_freedit_headline') + FE_myCompleteHtml;
  }

  tCon += '<br /><br />' + FE_onlineContent + '<br /><br />';

  tCon += fe_t('tab_bottom_legend') + '<br />' + fe_t('script_version', {'version': FE_version});

  userTabs = getId('user-info');
  navTabs = getElementsByClassName('nav-tabs', userTabs)[0];
  tabContent = getElementsByClassName('tab-content', userTabs)[0];

  newtab = document.createElement('li');
  newtab.innerHTML = '<a href="#sidepanel-freedit" data-toggle="tab">Freedit</a>';
  navTabs.appendChild(newtab);

  addon = document.createElement('section');
  addon.innerHTML = tCon;
  addon.id = 'sidepanel-freedit';
  addon.className = 'tab-pane';
  tabContent.appendChild(addon);

  $('.freedit_id_form').on('submit', function(event) {
    event.preventDefault();

    freedit_id = parseInt($('.freedit_id_input').val());

    if (!isNaN(freedit_id) && typeof FE_data[freedit_id] === 'object') {
      $('.freedit_id_input').val('');
      freedit_jump_to({lon:FE_data[freedit_id].lon, lat:FE_data[freedit_id].lat, zoom:FE_data[freedit_id].zoom, segments:null, nodes:null, venues:null, mapUpdateRequest:null});
      freedit_message_center(freedit_id);
    }
    else {
      alert('Freedit nenalezen.');
    }
  });
}

function freedit_message_center(freedit_id) {
  var actualFe = FE_data[freedit_id];

  $.get(fe_l('get_all_data_of_freedit', {'freedit': freedit_id}), function(data) {
    // console.log(actualFe, data, data.msgs, data.msgs.length);

    msgCnt = '<div class="problem-edit severity-low" id="FEmsg">'
      + '<div class="header">'
      + '<a class="close-panel">×</a>'
      + '<div class="type">Freedit ' + freedit_id + '</div>'
      + '<div class="reported">' + actualFe.name + ' (' + actualFe.district + ') - ' + actualFe.attrs + '<br />Vložil: ' + actualFe.added_by;

      if (actualFe.editor != null) {
        msgCnt += '<br> Editoval: ' + actualFe.editor;
      }

    msgCnt += '</div>'
      + '</div>'
      + '<div class="body">'
      + '<div class="problem-data">'
      + '<div class="conversation section">'
      + '<div class="title">Diskuze<span class="comment-count-badge">' + data.msgs.length + '</span></div>'
      + '<div class="collapsible content">'
      + '<div class="conversation-view">'
      + '<div>'
      + '<ul class="list-unstyled" style="max-height: ' + ($('#WazeMap').height() - 430) + 'px;">';

    prevStat = 0;

    for (var i in data.msgs) {
      if (typeof data.msgs[i] === 'object') {
        if (data.msgs[i].comment != '' && prevStat != data.msgs[i].state) {
          msgCnt += freedit_message_center_comment(false, data.msgs[i].nick, data.msgs[i].date, data.msgs[i].comment);
          msgCnt += freedit_message_center_comment(true, data.msgs[i].nick, data.msgs[i].date, fe_t('msg_center_change_status') + ' ' + fe_t('msg_center_change_status_' + data.msgs[i].state));
          prevStat = data.msgs[i].state;
        }
        else if (data.msgs[i].comment == '') {
          msgCnt += freedit_message_center_comment(true, data.msgs[i].nick, data.msgs[i].date, fe_t('msg_center_change_status') + ' ' + fe_t('msg_center_change_status_' + data.msgs[i].state));
          prevStat = data.msgs[i].state;
        }
        else {
          msgCnt += freedit_message_center_comment(false, data.msgs[i].nick, data.msgs[i].date, data.msgs[i].comment);
        }
      }
    }

    msgCnt += '</ul>';

    if (actualFe.editor != null) {
      msgCnt += '<div class="clearfix new-comment-form">'
      + '<textarea class="form-control new-comment-text" placeholder="Přidat komentář..." required=""></textarea>'
      + '<div style="float: left; position: relative; left: 0; margin-top: 6px; display: block;"><a class=" fa fa-link icon-link">+</a></div>'
      + '<button class="btn btn-default" type="submit">Poslat</button>'
      + '</div>';
    }

    msgCnt += '</div>'
      + '</div>'
      + '</div>'
      + '</div>'
      + '<div class="actions">'
      + '<div class="section">'
      + '<div class="content">';

    if (actualFe.editor == null) {
      msgCnt += '<div class="navigation">'
        + '<div class="btn btn-block next" id="freedit-want-edit" data-freedit-id="' + freedit_id + '">Chci začít editovat!</div>'
        + '</div>';
    }
    else if (actualFe.editor == Fe_me.userName && (actualFe.state != 2 || actualFe.state != 3)) {
      msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_freedit_to_control', {'editor': Fe_me.userName, 'freedit': freedit_id}) + '">'
        + '<input type="radio" name="state" value="solved" id="state-solved"><label for="state-solved">Odevzdat ke kontrole</label>'
        + '<input type="radio" name="state" value="' + actualFe.state + '" id="state-not-identified" checked="checked"><label for="state-not-identified">Neměnit stav</label>'
        + '</div>';
    }
    else if (actualFe.editor == Fe_me.userName && actualFe.state >= 2) {
      msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_freedit_to_control', {'editor': Fe_me.userName, 'freedit': freedit_id}) + '"></div>';
    }
    else if (freedit_can_controll() && actualFe.state < 4) {
      msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_control_report', {'editor': Fe_me.userName, 'freedit': freedit_id, 'key': FE_controllorKey}) + '">'
        + '<input type="radio" name="state" value="4" id="state-open"><label for="state-open">Vrátit s chybou</label>'
        + '<input type="radio" name="state" value="3" id="state-solved"><label for="state-solved">Uzavřít freedit jako hotový</label>'
        + '<input type="radio" name="state" value="' + actualFe.state + '" id="state-not-identified" checked="checked"><label for="state-not-identified">Neměnit stav</label>'
        + '</div>';
    }
    else if (freedit_can_controll()) {
      msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_control_report', {'editor': Fe_me.userName, 'freedit': freedit_id}) + '"></div>';
    }
    else {
      msgCnt += '<div class="controls-container" data-freedit-href="' + fe_l('send_freedit_to_control', {'editor': Fe_me.userName, 'freedit': freedit_id, 'key': FE_controllorKey}) + '"></div>';
    }

    msgCnt += '<input type="hidden" name="actualState" value="' + data.acutalState + '" />'
      + '</div>'
      + '</div>'
      + '</div>'
      + '</div>'
      + '</div>'
      + '</div>';

    freedit_message_center_remove();
    panelContainer = getId('panel-container');
    msgCenter = document.createElement('div');
    msgCenter.innerHTML = msgCnt;
    msgCenter.className = 'panel';
    panelContainer.appendChild(msgCenter);

    $('#FEmsg .close-panel').on('click', function(event) {
      event.preventDefault();
      freedit_message_center_remove();
    });

    $('#freedit-want-edit').on('click', function(event) {
      event.preventDefault();

      $.get(fe_l('register_freedit', {'state': 1, 'editor': Fe_me.userName, 'freedit': freedit_id}), {}, function(data) {
        if (data.error == 0) {
          if (typeof data.msg !== 'undefined') {
            alert(data.msg);
          }

          if (typeof data.state !== 'undefined') {
            FE_data[freedit_id].state = data.state;
          }

          FE_data[freedit_id].editor = Fe_me.userName;
          freedit_message_center(freedit_id);
        }
        else {
          alert(data.msg);
        }
      }, 'json');
    });

    $('#FEmsg button').on('click', function(event) {
      event.preventDefault();

      $.get($('#FEmsg .controls-container').attr('data-freedit-href'), {actualState: $('#FEmsg input[name=actualState]').val(), state: $('input[name=state]:checked').val(), comment: $('#FEmsg textarea').val()}, function(data) {
        if (data.error == 0) {
          if (typeof data.msg !== 'undefined') {
            alert(data.msg);
          }

          if (typeof data.state !== 'undefined') {
            FE_data[freedit_id].state = data.state;
          }

          freedit_message_center(freedit_id);
        }
        else {
          alert(data.msg);
        }
      }, 'json');
    });

    $('#FEmsg .icon-link').on('click', function(event) {
      event.preventDefault();

      var inputmessage = $('#FEmsg textarea');
      var curPermalink = null;
      for (var i = 0;i < freedit_div_perma.children.length;i++) {
        if (freedit_div_perma.children[i].className == "icon-link" || freedit_div_perma.children[i].className == "fa fa-link") {
          curPermalink = freedit_div_perma.children[i].href;
          break;
        }
      }
      inputmessage.val(inputmessage.val() + ' ' + curPermalink);
      window.setTimeout(freedit_set_focus_on_inputs_message, 100);
    });

    $('#FEmsg .fe-msg-permalink').on('click', function(event) {
      linkData = $(this);
      event.preventDefault();

      lon = parseFloat(linkData.attr('data-link-lon'));
      lat = parseFloat(linkData.attr('data-link-lat'));
      zoom = parseInt(linkData.attr('data-link-zoom'));
      segments = linkData.attr('data-link-segments') == 'null' ? null : linkData.attr('data-link-segments').split(",");
      nodes = linkData.attr('data-link-nodes') == 'null' ? null : linkData.attr('data-link-nodes').split(",");

      freedit_jump_to({lon:lon, lat:lat, zoom:zoom, segments:segments, nodes:nodes, venues:null, mapUpdateRequest:null});
    });
  }, 'json');
}


function freedit_set_focus_on_inputs_message() {
  $('#FEmsg textarea').focus();
}

function freedit_message_center_comment(statusChange, nick, date, comment) {
  htmlComment = '<li class="comment">'
    + '<div class="comment-content' + (statusChange ? ' reporter' : '') + ' ">'
    + '<div class="comment-title">'
    + '<span class="username">' + nick + '</span> '
    + '<span class="date">' + date + '</span>'
    + '</div>'
    + '<div class="text">' + freedit_return_msg_with_permalink(comment) + '</div>'
    + '</div>'
    + '</li>';

  return htmlComment;
}

function freedit_message_center_remove() {
  $('#panel-container').empty();
}

function freedit_make_modal_window(content) {
  $('<div id="fe-modal-window-background" />').appendTo('body');
  $('<div id="fe-modal-window" />').appendTo('body');
  $('#fe-modal-window').html(content);

  $('.fe-close-modal-window').on('click', function(event) {
    event.preventDefault();
    freedit_close_modal_window();
  });
}

function freedit_close_modal_window() {
  $('#fe-modal-window-background').remove();
  $('#fe-modal-window').remove();
}

function freedit_add_new() {
  actualLon = getActualGpsLon();
  actualLat = getActualGpsLat();

  $.get('https://maps.googleapis.com/maps/api/geocode/json?latlng=' + actualLat + ',' + actualLon, function(data) {
    cityEdit = '';
    countryEdit = '';
    countryEdit2 = '';  //  kraj

    for (var i in data.results[1].address_components) {
      if (data.results[1].address_components[i].types[0] == 'locality' && data.results[1].address_components[i].types[1] == 'political') {
        cityEdit = data.results[1].address_components[i].long_name;
      }
      else if (data.results[1].address_components[i].types[0] == 'administrative_area_level_2' && data.results[1].address_components[i].types[1] == 'political') {
        countryEdit2 = data.results[1].address_components[i].long_name;
      }
      else if (data.results[1].address_components[i].types[0] == 'administrative_area_level_1' && data.results[1].address_components[i].types[1] == 'political') {
        countryEdit = data.results[1].address_components[i].long_name;
        break;
      }
    }

    $.get(fe_l('add_new', {'name': cityEdit, 'link': prepareLinkForSend(returnWazeLink(actualLon, actualLat, getActualZoom())), 'region': countryEdit, 'district': countryEdit2, 'added_by': Fe_me.userName}), function(data) {
      freedit_make_modal_window(data);
      freedit_form_translator();

      $('#add-new-freedit').on('submit', function(event) {
        event.preventDefault();

        $.post($(this).attr('action'), $(this).serialize(), function(data) {
          if (data.error) {
            alert(fe_t('add_new_form_error'));
          }
          else {
            alert(fe_t('add_new_form_success'));
            freedit_close_modal_window();
          }
        }, 'json');
      });
    });
  }, 'json');
}

function freedit_form_translator() {
  $('#fe-modal-window *[data-fe-translate]').each(function() {
    $(this).empty().text(fe_t($(this).attr('data-fe-translate')));
  });
}

function freedit_get_first_permalink(str) {
  for (var i = 0;i < FE_baseURLs.length;i++) {
    var start = str.search(FE_baseURLs[i]);
    if (start == -1) {
      continue;
    }
    var end = start + 1;
    while (end < str.length && str.charAt(end) != " " && str.charAt(end) != "\n") {
      end++;
    }
    return {start:start, end:end, permalink:str.substring(start, end)};
  }
  return null;
}

function freedit_get_jump_set_from_permalink(permalink) {
  var lon = permalink.match(/lon=([\-]?[0-9]*[.]?[0-9]*)/);
  var lat = permalink.match(/lat=([\-]?[0-9]*[.]?[0-9]*)/);
  var zoom = permalink.match(/zoom=([0-9]+)/);
  var segments = permalink.match(/segments=(([0-9]+[,]?)+)+/);
  var nodes = permalink.match(/nodes=(([0-9]+[,]?)+)+/);
  var venues = permalink.match(/venues=(([0-9|\.|\-]+[,]?)+)+/);
  var mapUpdateRequest = permalink.match(/mapUpdateRequest=([0-9]*)/);
  return {lon:lon == null ? null : lon.length == 2 ? parseFloat(lon[1]) : null, lat:lat == null ? null : lat.length == 2 ? parseFloat(lat[1]) : null, zoom:zoom == null ? null : zoom.length == 2 ? parseFloat(zoom[1]) : null, segments:segments ? segments[1].split(",") : null, nodes:nodes ? nodes[1].split(",") : null, venues:venues ? venues[1].split(",") : null, mapUpdateRequest:mapUpdateRequest ? mapUpdateRequest[1].split(",") : null};
}

function freedit_return_msg_with_permalink(msg) {
  var pos = 0;
  var remainigMessage = msg;

  while (remainigMessage.length > 0) {
    var permalink = freedit_get_first_permalink(remainigMessage);
    if (permalink) {
      var details = freedit_get_jump_set_from_permalink(permalink.permalink);
      if (details.lon && details.lat) {
        var elements = 0;
        var elType = "";
        if (details.segments != null) {
          elements = details.segments.length;
          elType = "segment" + (elements > 1 ? "s" : "");
        } else {
          if (details.nodes != null) {
            elements = details.nodes.length;
            elType = "node" + (elements > 1 ? "s" : "");
          } else {
            if (details.venues != null) {
              elements = details.venues.length;
              elType = "venue" + (elements > 1 ? "s" : "");
            }
          }
        }

        linkData = freedit_get_jump_set_from_permalink(permalink.permalink);
        msg = msg.replace(permalink.permalink, '<a href="#" class="fe-msg-permalink" data-link-lat="' + linkData.lat + '" data-link-lon="' + linkData.lon + '" data-link-zoom="' + linkData.zoom + '" data-link-segments="' + linkData.segments + '" data-link-nodes="' + linkData.nodes + '" data-link-venues="' + linkData.venues + '" data-link-mapUpdateRequest="' + linkData.mapUpdateRequest + '"><i class="crosshair fa fa-crosshairs icon-screenshot"></i></a>');
        remainigMessage = remainigMessage.substring(permalink.end);
        continue;
      } else {
        //  Bad permalink: no lon or lat
      }
    }
    remainigMessage = remainigMessage.substring(1);
  }
  msg = msg.replace(/(https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,})/g, function(match, contents, offset, s) {
    return '<a target="_blank" href="' + (match.indexOf("://") != -1 ? match : "http://" + match) + '">' + match + "</a>";
  });

  return msg;
}

function freedit_jump_to(jumpSet) {
  Waze.selectionManager.unselectAll();
  if (typeof ChatJumper !== "undefined") {
    if (ChatJumper.isLast) {
    } else {
      var c = Waze.map.getCenter();
      var zoom = Waze.map.getZoom();
      ChatJumper.last = [c.lon, c.lat];
      ChatJumper.zoom = zoom;
      ChatJumper.isLast = true;
      ChatJumper.saveLS();
      ChatJumper.showButton();
    }
  }
  freedit_select_dataWaitForMergeEnd = false;
  if (jumpSet.segments || jumpSet.nodes || jumpSet.venues || jumpSet.mapUpdateRequest) {
    currentJumpSet = jumpSet;
    Waze.model.events.register("freedit_mergestart", null, freedit_mergestart);
  }
  var xy = OpenLayers.Layer.SphericalMercator.forwardMercator(jumpSet.lon, jumpSet.lat);
  if (jumpSet.zoom) {
    Waze.map.setCenter(xy, jumpSet.zoom);
  } else {
    Waze.map.setCenter(xy);
  }
  if (jumpSet.segments || jumpSet.nodes || jumpSet.venues || jumpSet.mapUpdateRequest) {
    window.setTimeout(freedit_get_function_with_args(freedit_select_data, [jumpSet]), 500);
  }
}

function freedit_mergestart() {
  try {
    freedit_select_dataWaitForMergeEnd = true;
    Waze.model.events.unregister("freedit_mergestart", null, freedit_mergestart);
    Waze.model.events.register("freedit_mergeend", null, freedit_mergeend);
  } catch (e) {
    console.log("Error:", e);
  }
}
function freedit_mergeend() {
  try {
    Waze.model.events.unregister("freedit_mergeend", null, freedit_mergeend);
    freedit_select_dataWaitForMergeEnd = false;
    freedit_select_data(currentJumpSet);
  } catch (e) {
    console.log("Error:", e);
  }
}
function freedit_select_data(jumpSet) {
  if (freedit_select_dataWaitForMergeEnd == true) {
    console.log("waiting for data...");
    return;
  }
  Waze.model.events.unregister("freedit_mergestart", null, freedit_mergestart);
  Waze.model.events.unregister("freedit_mergeend", null, freedit_mergeend);
  var success = true;
  var notFound = [];
  var elements = 0;
  if (jumpSet.segments) {
    var segs = [];
    for (var i = 0;i < jumpSet.segments.length;i++) {
      var segId = parseInt(jumpSet.segments[i]);
      if (typeof Waze.model.segments.objects[segId] === "undefined") {
        success = false;
        notFound.push(segId);
      } else {
        segs.push(Waze.model.segments.objects[segId]);
      }
    }
    elements = jumpSet.segments.length;
    Waze.selectionManager.select(segs);
  }
  if (jumpSet.nodes) {
    var nodes = [];
    for (var i = 0;i < jumpSet.nodes.length;i++) {
      var nodeId = parseInt(jumpSet.nodes[i]);
      if (typeof Waze.model.nodes.objects[nodeId] === "undefined") {
        success = false;
        notFound.push(nodeId);
      } else {
        nodes.push(Waze.model.nodes.objects[nodeId]);
      }
    }
    elements = jumpSet.nodes.length;
    Waze.selectionManager.select(nodes);
  }
  if (jumpSet.venues) {
    Waze.map.landmarkLayer.setVisibility(true);
    var venues = [];
    for (var i = 0;i < jumpSet.venues.length;i++) {
      var venueId = jumpSet.venues[i];
      if (typeof Waze.model.venues.objects[venueId] === "undefined") {
        success = false;
        notFound.push(venueId);
      } else {
        venues.push(Waze.model.venues.objects[venueId]);
      }
    }
    elements = jumpSet.venues.length;
    Waze.selectionManager.select(venues);
  }
  if (jumpSet.mapUpdateRequest && jumpSet.mapUpdateRequest.length >= 1 && !jumpSet.segments && !jumpSet.nodes && !jumpSet.venues) {
    var mp = Waze.model.problems.objects[parseInt(jumpSet.mapUpdateRequest[0])];
    var tp = null;
    if (mp == null) {
      tp = Waze.model.turnProblems.objects[parseInt(jumpSet.mapUpdateRequest[0])];
    }
    if (mp != null) {
      problemsControl.selectProblem(mp);
      success = true;
    }
    if (tp != null) {
      problemsControl.selectProblem(tp);
      success = true;
    }
  }
  if (!success) {
    if (jumpSet.hasOwnProperty("attempt") && jumpSet.attempt >= 2) {
      if (confirm("Some elements can't be found.\nSelection: " + Waze.selectionManager.selectedItems.length + "/" + elements + "\nNot found: " + (notFound.length != 0 ? "Elements ids: " + notFound.join(", ") + "\n" : "") + "Try again to select elements?")) {
        window.setTimeout(freedit_get_function_with_args(freedit_select_data, [jumpSet]), 500);
      }
      return;
    }
    if (jumpSet.hasOwnProperty("attempt")) {
      jumpSet.attempt++;
    } else {
      jumpSet.attempt = 0;
    }
    window.setTimeout(freedit_get_function_with_args(freedit_select_data, [jumpSet]), 500);
  } else {
    console.log("Data selected...:", jumpSet);
  }
}
function freedit_get_function_with_args(func, args) {
  return function() {
    var json_args = JSON.stringify(args);
    return function() {
      var args = JSON.parse(json_args);
      func.apply(this, args);
    };
  }();
}

//fce záložka obsah
function freedit_init() {
  localStorage.setItem('FE_controllorKey', FE_controllorKey);
  $(FE_styles).appendTo('head');
  freedit_make_tab();

  $('#freedit-add-new').on('click', function(event) {
    event.preventDefault();
    freedit_add_new();
  });

  $('.freedit-register').on('click', function(event) {
    event.preventDefault();
    freedit_register_editing($(this));
  });

  $('.freedit-to-control').on('click', function(event) {
    event.preventDefault();
    freedit_send_to_control($(this));
  });

  $('.freedit-control-message').on('click', function(event) {
    event.preventDefault();
    freedit_control_message($(this));
  });

  $('.freedit-link').on('click', function(event) {
    if (!checkCtrlPress()) { //  pokud pri kliknuti nedrzel control
      event.preventDefault();
      event.stopPropagation();
      href = $(this).attr('href');

      freedit_jump_to({lon:parseFloat(getUrlParameter('lon', href)), lat:parseFloat(getUrlParameter('lat', href)), zoom:getUrlParameter('zoom', href), segments:null, nodes:null, venues:null, mapUpdateRequest:null});
      freedit_message_center($(this).attr('data-freedit-id'));
    }
  });

  $('#freedit-switch-on-off').on('click', function(event) {
    event.preventDefault();
    if (FE_status == "on") {
      localStorage.setItem('FE_status', 'off');
    } else {
      localStorage.setItem('FE_status', 'on');
    }
    window.location.reload();
  });

  $('.freedit-turn-off-controlor').on('click', function(event) {
    event.preventDefault();
    localStorage.setItem('FE_controllorKeyEnable', '0');
    alert('Refreshni prohlížeč.');
  });

  $('.freedit-turn-on-controlor').on('click', function(event) {
    event.preventDefault();
    localStorage.setItem('FE_controllorKeyEnable', '');
    alert('Refreshni prohlížeč.');
  });

  var mapFooter = getElementsByClassName("WazeControlPermalink");
  if (mapFooter.length == 0) {
    console.log("error: can't find permalink container");
  } else {
    freedit_div_perma = mapFooter[0];
  }
}

//fce wait co volá freedit_init
function freedit_wait() {
  if (!window.Waze.map || typeof map === 'undefined' || typeof Waze.loginManager.user === 'undefined' || Waze.loginManager.user == null) {
    setTimeout(freedit_wait, 500);
    return ;
  }

  hasStates = Waze.model.hasStates();
  freedit_after_load_data();
}

function freedit_after_load_data() {
  if (FE_dataLoad) {
    console.log('WME Freedit: Start showing layer');

    if (FE_allowLanguage.indexOf(I18n.locale) != -1) {
      FE_language = I18n.locale;
    }

    Fe_me = Waze.loginManager.user;
    freedit_init();
    InitMapRaidOverlay();
  }
  else {
    setTimeout(freedit_after_load_data, 500);
  }
}

//volání fce a samotný script
freedit_bootstrap();

/*--------------------------------------------------------------------------------------
poznámky pod čarou :D
*/