Waze - Local Champs Tools script

Waze Map Editor script that creates a link to the current position in Google Maps™, Bing, OSM and other map sites.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name			Waze - Local Champs Tools script
// @version			1.3.23
// @author			Mylan, d2-mac, MajkiiTelini
// @description		Waze Map Editor script that creates a link to the current position in Google Maps™, Bing, OSM and other map sites.
// @match 			https://*.waze.com/*editor*
// @run-at			document-end
// @namespace		https://greasyfork.org/cs/users/135686
// @license			MIT
// @icon			data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAAA0VJREFUWIWt182L1WUUB/CPd8TRbjqaY94QVBJXwYBQkK5qEygNmm4FN4OrFkWE9iamhbRrUQQtel1kEERRpBK+RTroIv+Awja9UZk1vevMtDjPb+7v3vnd3+937/SFB+4993m+55znOW93SP9ooYF/uuQrsQJ/9EPWGMCAO/FIgfwxbBiArxTNAtlOXMeqnGwUU9hRk2MOVTfwBMa6ZGswIjzO8DhuTb/lsQUHKnSU4iGdnm3G+5jFTNeaxXvYlPaO43c8WKZgUYUBt+AnDOMc7sc0JvEFfkjfW8LbrRjCWdwnAnIN/q7ytAxnhHc/46B4715YLa78Wjpzqh9FTTyPXcJzeCYRfWD++5ZhFB+ms1kMNLEbR3P88zAm3vxPbc9fNli6NvBK4jidOH/FXVUHd4h3zTwfRHneiOwmbuKBugdPp0OTuGcBBtyLy4nrZN1Dm9OB4/g6fX4dd/SheB3eSme/wrsiVTcWbW5hm6hwEyLP/8VtWIanRDpNiSxYWqJ4KZ4U+Z/tHxYBfEPUiYmka1vSbQUOiQCZTetsgUdv5zzapbOGLMIeXE2evmH+jX2e4/8lObY8v2EVnksEL/bwcCsuJZJPsT+tLGYu6h0zL4ngPiI6Z0/MiB7QCw3sw3c5j77BXuWV9WnxDB1Y3GNzGdEM3hTzwDtJ9rCInTIMFQnzOT6KF9LnVgUZEdmT+KyG8oyzgWMiwOewUpTHKe0rPV+DkIiDEzX3Tub4f8NhjCzGElGtLop0GRdpMio64f+BFu4Wt/YJfkxruGjzJvHOB2sQ172BQyID1tfYi0ira6o7YB0DWqLG1H0q49oTzkd6RG9NA4ZED5gVN7C9SvkW7TJ6Kh18tcSIMgMaeE27EWW83TPmHJp4VsxwWb0/kAg+xto+DGhpe/5oki0Tt3tYyUBShKzMZvX79hID1oop6ro+W3AvNMUkczORzYi3vCAmpav4UtT5C2nfdDJqWlx7WfesxG4Rwdkks1G01CyobqSVTVDHtVNtu3jz8YUYcNT8GW4iKTuSkx1Lsn1de8dEXA2MomDZKeIh31JXi/Ja9NesNODKcpyC9pmUfa9z5v9LvPUVfFuDY0Fo6ZpkEkZ0Zkgt/AcYZ93gg/6CbgAAAABJRU5ErkJggg==
// ==/UserScript==

var W;
var OL;
var I18n;

var lct_debug = false;
var lct_loop_debug = false;

var translations = {
	'sk' : {
		'LCT settings'			: 'Nastavenie LCT',
		'Bar settings' 			: 'Nastavenia lišty',
		'Floating bar' 			: 'Plávajúca lišta',
		'Vertical floating bar' : 'Vertikálna plávajúca lišta',
		'Bar color'				: 'Farba lišty',
		'Black' 				: 'Čierna',
		'White' 				: 'Biela',
		'Bar transparency' 		: 'Priesvitnosť lišty',
		'Button size'			: 'Veľkosť tlačítok',
		'Maps & waze links'		: 'Odkazy na mapy & waze',
		'CZ/SK permalinks'		: 'CZ/SK permalinky',
		'Czech permalinks' 		: 'České permalinky',
		'Closures'				: 'Uzávierky',
		'Waze users'			: 'Waze užívatelia',
		'Slovak permalinks'		: 'Slovenské permalinky',
		'Hide'	 				: 'Skryť',
		'Show LCT links (sk)'	: 'Zobrazovať LCT odkazy',
		'Reload'				: 'Obnoviť',
		'Where am I?'			: 'Kde som?',
		'Add current location'	: 'Pridať súčasnú polohu',
		'Rename favorite location'	 : 'Premenovať obľúbenú polohu',
		'Rename / Relocate (ctrl+click) location' : 'Premenovať / presunúť (ctrl+klik) obľúbenú polohu',
		'Relocate'					 : 'Presunúť',
		'to the current location?'	 : 'na súčasnú polohu?',
		'Delete favorite location'	 : 'Zmazať obľúbenú polohu',
		'Please enter location name' : 'Prosím, zadajte názov miesta',
	},
	'cs' : {
		'LCT settings'			: 'Nastavení LCT',
		'Bar settings' 			: 'Nastavení lišty',
		'Floating bar' 			: 'Plovoucí lišta',
		'Vertical floating bar' : 'Vertikální plovoucí lišta',
		'Bar color'				: 'Barva lišty',
		'Black' 				: 'Černá',
		'White' 				: 'Bíla',
		'Bar transparency' 		: 'Průsvitnost lišty',
		'Button size'			: 'Velikost tlačítek',
		'Maps & waze links'		: 'Odkazy na mapy & waze',
		'CZ/SK permalinks'		: 'CZ/SK permalinky',
		'Czech permalinks' 		: 'České permalinky',
		'Closures'				: 'Uzavírky',
		'Waze users'			: 'Waze uživatelé',
		'Slovak permalinks'		: 'Slovenské permalinky',
		'Hide'	 				: 'Skrýt',
		'Show LCT links (sk)'	: 'Zobrazovat LCT odkazy (sk)',
		'Reload'				: 'Obnovit',
		'Where am I?'			: 'Kde jsem?',
		'Add current location'	: 'Přidat současnou polohu',
		'Rename favorite location'	 : 'Přejmenovat oblíbenou polohu',
		'Rename / Relocate (ctrl+click) location' : 'Přejmenovat / přesunout (ctrl+klik) oblíbenou polohu',
		'Relocate'					 : 'Přesunout',
		'to the current location?'	 : 'na současnou polohu?',
		'Delete favorite location'	 : 'Smazat oblíbenou polohu',
		'Please enter location name' : 'Prosím, zadejte název místa',
	}
};

function LCT_init() {
	W = unsafeWindow.W;
	OL = unsafeWindow.OpenLayers;
	I18n = unsafeWindow.I18n;

	function save_bar_position(x,y){if (localStorage.LCT_Settings){var s=JSON.parse(localStorage.LCT_Settings);} else{s=new Object();}s.barX=x;s.barY=y;localStorage.setItem('LCT_Settings', JSON.stringify(s, null, 4));}
	//function copyToClipboard(t){var i=document.getElementById('CopyUrl');i.value=t;i.focus();i.select();document.execCommand('Copy');}
	function sqr(x) {return x*x;}
	function convert(t,a) {var h=Math.PI/180,M=6378137,s=298.257223563,r=-570.69,n=-85.69,q=-462.84,o=4.99821/3600*Math.PI/180,i=1.58676/3600*Math.PI/180,c=5.2611/3600*Math.PI/180,e=-3543e-9,v=a*h,x=t*h,I=200,P=1-sqr(1-1/s),g=M/Math.sqrt(1-P*sqr(Math.sin(v))),l=(g+I)*Math.cos(v)*Math.cos(x),p=(g+I)*Math.cos(v)*Math.sin(x),d=((1-P)*g+I)*Math.sin(v),u=r+(1+e)*(l+c*p-i*d),F=n+(1+e)*(-c*l+p+o*d),f=q+(1+e)*(i*l-o*p+d);M=6377397.15508;s=299.152812853;var y=s/(s-1),b=Math.sqrt(sqr(u)+sqr(F));P=1-sqr(1-1/s);var j=Math.atan(f*y/b),k=Math.sin(j),m=Math.cos(j),w=(f+P*y*M*k*k*k)/(b-P*M*m*m*m);v=Math.atan(w);I=Math.sqrt(1+w*w)*(b-M/Math.sqrt(1+(1-P)*w*w));x=2*Math.atan(F/(b+u));M=6377397.15508;var z=.081696831215303,A=.97992470462083,B=12310230.12797036,C=.863499969506341,D=.504348889819882,E=.420215144586493,G=.907424504992097,H=1.000597498371542,J=1.00685001861538,K=Math.sin(v);w=(1-z*K)/(1+z*K);w=sqr(1+K)/(1-sqr(K))*Math.exp(z*Math.log(w));w=J*Math.exp(H*Math.log(w));var L=(w-1)/(w+1),N=Math.sqrt(1-L*L),O=H*x,Q=Math.sin(O),R=Math.cos(O),S=G*R+E*Q,T=E*R-G*Q,U=C*L+D*N*S,V=Math.sqrt(1-U*U),W=T*N/V,X=Math.sqrt(1-W*W),Y=A*Math.atan(W/X);g=B*Math.exp(-A*Math.log((1+U)/V));var Z=g*Math.sin(Y)*-1,$=g*Math.cos(Y)*-1;return {x: Z.toFixed(),y: $.toFixed()}}
	$.fn.dragit=function(e){var t=(e=$.extend({handle:"",cursor:"move"},e),""===e.handle)?this:this.find(e.handle);return t.css("cursor",e.cursor).on("mousedown",function(t){var s=(""===e.handle)?$(this).addClass("dragit"):$(this).addClass("active-handle").parent().addClass("dragit");var a=s.css("z-index"),o=s.outerHeight(),i=s.outerWidth(),r=s.offset().top+o-t.pageY,n=s.offset().left+i-t.pageX;s.css("z-index",1e3).parents().on("mousemove",function(e){$(".dragit").offset({top:e.pageY+r-o,left:e.pageX+n-i})});t.preventDefault();}).on("mouseup",function(){save_bar_position($(this).offset().left,$(this).offset().top);""===e.handle?$(this).removeClass("dragit"):$(this).removeClass("active-handle").parent().removeClass("dragit")})};
	(function($){$.fn.tipr=function(options){var set=$.extend({'speed':200,'mode':'bottom'},options);return this.each(function(){var tipr_cont='.tipr_container_'+set.mode;$(this).hover(function() {var d_m=set.mode;if($(this).attr('data-mode')) {d_m=$(this).attr('data-mode'); tipr_cont='.tipr_container_'+d_m;} var out='<div class="tipr_container_'+d_m+'"><div class="tipr_point_'+d_m+'"><div class="tipr_content">'+$(this).attr('data-tip')+'</div></div></div>';$(this).append(out);var w_t=$(tipr_cont).outerWidth();var w_e=$(this).width();var m_l=(w_e / 2)-(w_t / 2);$(tipr_cont).css('margin-left',m_l+'px');$(this).removeAttr('title alt');$(tipr_cont).fadeIn(set.speed);},function() {$(tipr_cont).remove();});});};})(jQuery);
	function tr(str) {if (translations.hasOwnProperty(I18n.locale) && translations[I18n.locale].hasOwnProperty(str)) {return translations[I18n.locale][str];} return str;}
	function update_local_storage() {if (!o.hasOwnProperty('lctlinks')) {var lctVal = (I18n.locale == 'sk') ? 1 : 0; o.lctlinks = lctVal; localStorage.setItem('LCT_Settings', JSON.stringify(o, null, 4)); o = JSON.parse(localStorage.LCT_Settings);}}
	//function calculateSPN(){var projI = new OL.Projection("EPSG:900913"); var projE = new OL.Projection("EPSG:4326"); var center_lonlat = (new OL.LonLat(W.map.center.lon,W.map.center.lat)).transform(projI,projE); var topleft = (new OL.LonLat(W.map.getExtent().left,W.map.getExtent().top)).transform(projI,projE); var bottomright = (new OL.LonLat(W.map.getExtent().right,W.map.getExtent().bottom)).transform(projI,projE); var lat = Math.round(center_lonlat.lat*1000000)/1000000; var lon = Math.round(center_lonlat.lon*1000000)/1000000; return Math.abs(topleft.lat-bottomright.lat)+','+Math.abs(topleft.lon-bottomright.lon);}
	function epsg4326_epsg25834(lon,lat) {var a=6378137,e=0.0818191908469312,lambda0_rad=21*Math.PI/180,k_0=0.9996,fi_rad=lat*Math.PI/180,lambda_rad=lon*Math.PI/180,e_2=e*e/(1-e*e),N=a/Math.sqrt(1-e*e*Math.sin(fi_rad)*Math.sin(fi_rad)),T=Math.tan(fi_rad)*Math.tan(fi_rad),CC=e_2*Math.cos(fi_rad)*Math.cos(fi_rad),AA=(lambda_rad-lambda0_rad)*Math.cos(fi_rad),M=a*(fi_rad*(1-e*e/4-3*Math.pow(e,4)/64-5*Math.pow(e,6)/256)-Math.sin(2*fi_rad)*(3*e*e/8+3*Math.pow(e,4)/32+45*Math.pow(e,6)/1024)+Math.sin(4*fi_rad)*(15*Math.pow(e,4)/256+45*Math.pow(e,6)/1024)-Math.sin(6*fi_rad)*35*Math.pow(e,6)/3072),X=k_0*N*(AA+(1-T+CC)*Math.pow(AA,3)/6+(5-18*T+T*T+72*CC-85*e_2)*Math.pow(AA,5)/120)+500000,Y=k_0*(M+N*Math.tan(fi_rad)*(AA*AA/2+(5-T+9*CC+4*CC*CC)*Math.pow(AA,4)/24+(61-58*T+T*T+600*CC-330*e_2)*Math.pow(AA,6)/720));return{x:X.toFixed(),y:Y.toFixed()};} // zjednodusene pro ucely cdb.sk

	if (localStorage.LCT_Settings) {
		var o = JSON.parse(localStorage.LCT_Settings);
		update_local_storage();
	}
	else {
		var lctVal = (I18n.locale == 'sk') ? 1 : 0;
		o = {'barX': 700, 'barY': 80, 'float': 0, 'vertical': 0, 'bgimg': 3, 'size': 16, 'lctlinks' : lctVal, 'hidecopy': 1 };
	}

	function open_link(event, site) {
		var e = W.map.getExtent();
		var WazePermalink = $('.WazeControlPermalink a.permalink').attr('href');
		var w = WazePermalink ?JSON.parse('{"' + WazePermalink.replace(/&/g, '","').replace(/=/g, '":"') + '"}', function(key, value) { return key === '' ? value : decodeURIComponent(value); }):{};
		var lat = w.lat;
		var lon = w.lon;
		var zoom = Number(w.zoomLevel);
		var p0 = convert(lon, lat);
		var p1 = new OL.Geometry.Point(e[0], e[3]);
		var p2 = new OL.Geometry.Point(e[2], e[1]);
		var p3 = convert(p1.x, p1.y);
		var p4 = convert(p2.x, p2.y);
		var p5 = epsg4326_epsg25834(p1.x, p1.y);
		var p6 = epsg4326_epsg25834(p2.x, p2.y);

		var siteUrl;
		// --- Mapy.cz ---
		if (site == 'mapycz') {
			siteUrl = 'https://mapy.cz/zakladni?x=' + lon + '&y=' + lat + '&z=' + zoom + ((event.ctrlKey || event.metaKey) ? '&base=ophoto&pano=1&l=0' : '&l=0');
		}
		// --- Open Street map ---
		else if (site == 'osm') {
			siteUrl = 'https://www.openstreetmap.org/#map=' + zoom + '/' + lat + '/' + lon;
			if (event.ctrlKey || event.metaKey) {
				if (zoom >= 19) zoom = 18;
				siteUrl = 'https://openstreetcam.org/map/@' + lat + ',' + lon + ',' + zoom + 'z';
			}
		}
		// --- Bing maps ---
		else if (site == 'bing') {
			siteUrl = 'https://www.bing.com/maps/?cp=' + lat + '~' + lon + '&lvl=' + zoom + ((event.ctrlKey || event.metaKey) ? '&sty=h' : '');
		}
		// --- Google Maps ---
		else if (site == 'gmaps') {
			siteUrl = 'https://www.google.com/maps/@' + lat + ',' + lon + ',' + zoom + ((event.ctrlKey || event.metaKey) ? 'z/data=!3m1!1e3' : 'z');
		}
		// --- Google Maps Provoz ---
		else if (site == 'gmaps_provoz') {
			siteUrl = 'https://www.google.com/maps/@' + lat + ',' + lon + ',' + zoom + ((event.ctrlKey || event.metaKey) ? 'z/data=!3m1!1e3!5m1!1e1' : 'z/data=!5m1!1e1');
		}
		// --- TomTom ---
		else if (site == 'tomtom') {
			siteUrl = 'https://mydrive.tomtom.com/cs_cz/#+viewport=' + lat + ',' + lon + ',' + zoom;
		}
		// --- Here ---
		else if (site == 'here') {
			siteUrl = 'https://wego.here.com/traffic/explore?map=' + lat + ',' + lon + ',' + zoom + ',' + ((event.ctrlKey || event.metaKey) ? 'satellite_traffic' : 'traffic') + '&x=ep';
		}
		// --- Apple ---
		else if (site == 'apple') {
			siteUrl = 'https://beta.maps.apple.com/?ll=' + lat + ',' + lon + '&spn=' + (p1.y - p2.y) + ',' + (p2.x - p1.x) + '&t=' + ((event.ctrlKey || event.metaKey) ? 'h' : 'm');
		}
		// --- Open Street Cam ---
		else if (site == 'osv') {
			siteUrl = 'https://openstreetcam.org/map/@' + lat + ',' + lon + ',' + zoom + 'z';
		}
		// --- Instant Street View ---
		else if (site == 'instasw') {
			if (event.ctrlKey || event.metaKey) {
				siteUrl = 'https://www.mapillary.com/app/?lat=' + lat + '&lng=' + lon + '&z=' + zoom;
			}
			else {
				siteUrl = 'https://www.instantstreetview.com/@' + lat + ',' + lon + ',' + zoom + 'z,0t';
			}
		}
		// --- Mapillary ---
		else if (site == 'mapillary') {
			siteUrl = 'https://www.mapillary.com/app/?lat=' + lat + '&lng=' + lon + '&z=' + zoom;
		}
		// --- Pumpdroid N95/LPG ---
		else if (site == 'pumpdroid_n95') {
			siteUrl = 'http://www.pumpdroid.com/public/map?fuel=' + ((event.ctrlKey || event.metaKey) ? 'LPG' : 'NATURAL95');
		}
		// --- Pumpdroid Nafta/Bionafta ---
		else if (site == 'pumpdroid_nafta') {
			siteUrl = 'http://www.pumpdroid.com/public/map?fuel=' + ((event.ctrlKey || event.metaKey) ? 'BIODIESEL' : 'DIESEL');
		}
		// --- [SK] Cestná databanka ---
		else if (site == 'cdb') {
			var viewid = (event.ctrlKey || event.metaKey) ? '8506e8e604dc4e508e54f4919b07ea31' : '70ddf82c0243461fb614d7f6c8d22cb2';
			siteUrl = 'https://ismcs.cdb.sk/portal/mapviewer/?viewid=' + viewid + '&extent=' + p5.x + ',' + p5.y + ',' + p6.x + ',' + p6.y;
		}
		// --- [SK] ZBGIS ---
		else if (site == 'zbgis') {
			if (event.ctrlKey || event.metaKey) {
				siteUrl = 'https://zbgis.skgeodesy.sk/mkzbgis/sk/kataster?bm=zbgis&z=';
			}
			else {
				siteUrl = 'https://zbgis.skgeodesy.sk/mkzbgis/sk/zakladna-mapa?bm=zbgis&z=';
			}
			siteUrl += zoom + '&c=' + lon + ',' + lat;
		}
		// --- [SK] BSK UPN Doprava / Vse ---
		else if (site == 'blava') {
			siteUrl = 'https://bskgis.maps.arcgis.com/apps/webappviewer/index.html?' +
			    '&extent=' + p1.x + ',' + p1.y + ',' + p2.x + ',' + p2.y +
			    '&webmap=' + ((event.ctrlKey || event.metaKey) ? 'f89a341176cc499583701b95803f9a1f' : '33689c9771e04bbbb41eb32e9e5ac47b')
			;
		}
		// --- [SK] Prešov Webgis ---
		else if (site == 'presov') {
			zoom = (zoom > 19) ? 6 : zoom - 13;
			siteUrl = 'https://webgis.presov.sk/?mapSet=0&center=' + p0.x + ',' + p0.y + '&zoom=' + zoom + '&selVals=null&m=14&l=11,4';
		}
		// --- [SK] Kosice GISPLAN ---
		else if (site == 'kosice') {
			zoom = (zoom > 21) ? 10 : zoom - 11;
			siteUrl = 'https://gis.esluzbykosice.sk/mapa/zakladna-aplikacia/?lb=bmp&lbo=1&lyo=&ly=ad%2Cul&c=' + p0.x + '%3A'+ p0.y + '&z=' + zoom;
		}
		// --- [SK] CCS benzinky / mycky---
		else if (site == 'sk_ccs') {
			siteUrl = 'http://www.ccs.sk/odberna-mista?t=' + ((event.ctrlKey || event.metaKey) ? 'wash' : 'stations');
		}
		// --- [CZ] ŘSD ---
		else if (site == 'rsd') {
			zoom = (zoom > 18) ? 12 : zoom - 7;
			siteUrl = 'https://geoportal.rsd.cz/webappbuilder/apps/7/?center=' + lon + ',' + lat + '&level=' + zoom;
		}
		// --- [CZ] CUZK ---
		else if (site == 'cuzk') {
			siteUrl = 'https://ags.cuzk.cz/geoprohlizec/?' + ((event.ctrlKey || event.metaKey) ? 'k=490&' : '') + 'extent=' +
			    p3.x + ',' + p3.y + ',' + p4.x + ',' + p4.y;
		}
		else if (site == 'dopravniinfo') {
			siteUrl = 'https://dopravniinfo.gov.cz/?action=link&l_information=1&l_fcd=1&l_camera=1&l_vms=1&l_weather=1&l_others=1&i_crash=1&i_barrier=1&i_convoy=1&i_construction=1&i_road=1&i_cargo=1&i_parking=1&i_cone=1&i_planned=1&f_1=1&f_2=1&f_3=1&f_4=1&f_5=1&w_meteo=1&w_drivability=1&o_offenseSystems=1&o_trafficVideos=1' +
				'&e_X1=' + p3.x + '&e_X2=' + p4.x + '&e_Y1=' + p4.y + '&e_Y2=' + p3.y;
			if (event.ctrlKey || event.metaKey) {
				siteUrl = 'http://old.dopravniinfo.cz/default.aspx?l=TI,TIU,TL,Kamery&r=%3B%3B&rp=F%2CO%2CN&lang=cz' +
					'&e=' + p3.x + ',' + p4.x + ',' + p4.y + ',' + p3.y;
			}
		}
		// --- [CZ] TSK PRAHA ---
		else if (site == 'tskpraha') {
			siteUrl = 'http://dic.tsk-praha.cz/?v=' + p3.x + '|' + p3.y + '|' + p4.x + '|' + p4.y + '&l=11111';
		}
		// --- [CZ] iKatastr ---
		else if (site == 'ikatastr') {
			siteUrl = 'https://ikatastr.cz/#kde='+ lat + ',' + lon + ',' + zoom + '&mapa=' +
			    ((event.ctrlKey || event.metaKey) ? 'letecka' : 'zakladni') + '&vrstvy=parcelybudovy';
		}
		// --- [CZ] Správa železnic ---
		else if (site == 'sz') {
			siteUrl = 'https://provoz.spravazeleznic.cz/DYPOD/';
			if (event.ctrlKey || event.metaKey) {
				siteUrl = 'https://grapp.spravazeleznic.cz/';
			}
		}
		// --- [CZ] Closures ---
		else if (site == 'cz_closures') {
			siteUrl = 'http://goo.gl/' + ((event.ctrlKey || event.metaKey) ? 'FjLFPr' : 'J34DwA');
		}
		// --- [CZ] Waze users ---
		else if (site == 'cz_wazers') {
			siteUrl = 'http://goo.gl/' + ((event.ctrlKey || event.metaKey) ? 'NHc2Ah' : 'rQcDMS');
		}
		// --- [CZ] Test nazvu obci / Katastr ---
		else if (site == 'cz_obce') {
			siteUrl = 'http://goo.gl/U38BOz';
			if(event.ctrlKey || event.metaKey) {
				siteUrl = 'https://nahlizenidokn.cuzk.cz/MapaIdentifikace.aspx?&x=' + p0.x + '&y=' + p0.y + '&maplayers=7E6595D2%208244EA23';
			}
		}
		// --- [CZ] CCS benzinky / mycky---
		else if (site == 'cz_ccs') {
			siteUrl = 'http://www.ccs.cz/odberna-mista?t=' + ((event.ctrlKey || event.metaKey) ? 'wash' : 'stations');
		}
		// --- Kde jsem? ---
		else if (site == 'wtfami') {
			var jsonUrl = 'https://maps.googleapis.com/maps/api/geocode/json?address=' + lat + ',' + lon + '&key=AIzaSyC4EsYydXSc_bayhY0VfYUmTXAFKaYaVBw';
			$.getJSON(jsonUrl, function(data) {
				window.prompt('Copy to clipboard: Ctrl+C, Enter', data.results[(zoom > 17) ? 0 : 1].formatted_address);
			});
			return false;
		}
		// --- Waze Livemap ---
		else if (site == 'livemap') {
			siteUrl = 'https://www.waze.com/livemap?lat=' + lat + '&lon=' + lon + '&zoom=' + zoom + ((event.ctrlKey || event.metaKey) ? '&rp_subscription=*' : '');
		}
		// --- Waze permalink ---
		else {
			var re = new RegExp('&layers=' + w.layers, 'g');
			WazePermalink = WazePermalink.replace(re, '');
			window.open(WazePermalink, (event.ctrlKey || event.metaKey) ? '_blank' : '_self');
			//copyToClipboard(WazePermalink);
			return false;
		}
		window.open(siteUrl, '_blank');
	}

	function show_permalinks() {
		if (localStorage.LCT_Permalinks) {
			$.each(JSON.parse(localStorage.LCT_Permalinks), function(key, value) {
				if (value == 1) {
					$('#wmepl_' + key).show();
					$('#wmepl_opt_' + key).prop('checked', true);
				}
			});
		}
		else {
			$('#wmepl_gmaps, #wmepl_gmaps_provoz, #wmepl_osm, #wmepl_mapycz').show();
			$('#wmepl_opt_gmaps,#wmepl_opt_gmaps_provoz, #wmepl_opt_osm, #wmepl_opt_mapycz').prop('checked', true);

		}
	}

	function render_permalinksBar(float) {
		if (float === true) {
			$('#permalinksBar .map-link').remove();
			$('body').append('<div id="permalinksBar_float"></div>');
			if (o.vertical == 1) {
				$('#permalinksBar_float').addClass('vertical');
				$('#wmepl_bar_vertical').prop('checked', true);
			}
			$('#permalinksBar_float').append(map_links);
			setTimeout(show_permalinks, 200);
			$('#wmepl_bar_float').prop('checked', true);
			$('#permalinksBar_float').dragit();
			if (lct_debug) console.log('LCT: Permalinks Bar rendered');
		}
		else {
			$('#permalinksBar_float').remove();
			$('#permalinks-toggle').after(map_links);
			setTimeout(show_permalinks, 200);
			$('#wmepl_waze').hide();
			$('#wmepl_bar_float').prop('checked', false);
			if (lct_debug) console.log('LCT: Floating Permalinks Bar rendered');
		}
		$('.map-link').on('click', function(event) {open_link(event, $(this).attr('data-item'));});
	}

	var bgImgs = ['XPC1k3T', '1GBEcez', 'mNG7xrh', 'zio1bfv', 'XFL5lNY', 'QLJ1l1r', 'zyInquW', 'Ktf2S8g', 'QruTbKV', 'HUSp0IK'];
	var LCTstyle = '<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">';
	LCTstyle += '<style id="LCTstyle">#permalinksBar {height: 16px; padding: 1px; display: flex; align-items: center; z-index: 899; float: left;} #permalinksBar_float {border-radius: 3px; background: url("https://i.imgur.com/' + bgImgs[o.bgimg] + '.png") top left repeat; position: fixed; left: ' + o.barX + 'px; top: ' + o.barY + 'px; height: auto; width: auto; padding: 1px 8px; z-index: 1002 !important;} #permalinksBar_float.vertical {padding: 8px 1px; width: ' + (o.size+8) + 'px;} #permalinksBar img.map-link {width: 16px; height: 16px;} #permalinksBar i.map-link {font-size: 16px;} #permalinksBar_float img.map-link {width: ' + o.size + 'px; height: ' + o.size + 'px;} #permalinksBar_float i.map-link {font-size: ' + o.size + 'px;}'; // background: url("//i.imgur.com/FD7Csta.png"), url("//i.imgur.com/RBYGoP2.png"); background-repeat: repeat, no-repeat; background-position: top left, center right; background-size: auto, contain;
	LCTstyle += '.map-link, #permalinks-toggle {color: #59899e; cursor: pointer; float: left; display: inline-block; margin: 3px; opacity: 0.8;} .map-link.fa-building {font-size: 15px;} .map-link {display: none;} #permalinks-toggle {margin: 4px 7px 0 2px; opacity: 0.6; -webkit-transition: all 0.2s ease-out; -moz-transition: all 0.2s ease-out; -o-transition: all 0.2s ease-out; transition: all 0.2s ease-out; -webkit-animation-duration: 0.2s; animation-duration: 0.2s; -webkit-animation-fill-mode: both; animation-fill-mode: both; -webkit-animation-timing-function: ease-out; animation-timing-function: ease-out;} #permalinks-toggle.active {-ms-transform: rotate(80deg); -webkit-transform: rotate(80deg); transform: rotate(80deg); opacity: 1;} #permalinks-toggle:hover, .map-link:hover, #permalinksBar_float .map-link {opacity: 1;} #permalinksBar_float .map-link {text-shadow: -1px -1px 0 #fff, 1px -1px 0 #fff, -1px 1px 0 #fff, 1px 1px 0 #fff;} #permalinksBar_float.vertical .fa.fa-link.map-link {margin: 4px 0 0 4px;} #permalinksBar_float.vertical .fa.fa-unlock-alt.map-link {margin: 5px 0 0 6px;} #permalinksBar #wmepl_waze {display: none !important;}';
	LCTstyle += '#permalinks-settings {background: #eee; border-radius: 5px; box-shadow: 0 6px 12px rgba(0,0,0,0.175); padding: 5px; position: absolute; bottom: 30px; right: 10px; z-index: 10000; width: 600px; visibility:hidden; opacity:0; transition:visibility 0s linear 0.2s,opacity 0.2s linear;display:flex; justify-content: space-between;} #permalinks-settings.visible {visibility:visible; opacity:1; transition-delay:0s;} #permalinks-settings label {display: block; font-weight: normal; font-size: 11px; margin: 0; padding: 2px 0;} #permalinks-settings label.float-lbl {margin-left: 10px} #permalinks-settings label input[type="checkbox"] {margin: 0 5px;} #permalinks-settings legend {color: #4e7688; font-size: 11px; margin: 0 0 5px 0; padding: 5px;} #permalinks-settings fieldset {width:33.3333%;flex: 1 0 33.3333%; min-height: 190px; padding: 0 5px;} #wmepl-map-settings {border-left: 1px solid #e5e5e5; border-right: 1px solid #e5e5e5; height: 370px;} #permalinks-settings fieldset#wmepl-bar-settings {width: 220px;} #permalinks-settings .fa {color: #59899e;} #permalinks-settings em {color: #888;} .pointer {cursor: pointer;} #permalinks-sk {display: inline-block; margin-top: 10px;}';
	LCTstyle += '.opacitySettings, .colorSettings {border: 1px solid #ddd; border-radius: 3px; display: inline-block; font-size: 0.8em; width: 32px; padding: 3px 0; margin: 0 1px; text-align: center;} .colorSettings {width: 80px;} .sizeSettings {border: 1px solid #ddd; border-radius: 3px; display: inline-block; margin: 0 3px; text-align: center; vertical-align: middle; font-size: 0.7em;} .opacitySettings:hover, .colorSettings:hover, .sizeSettings:hover {border-color: #59899e; color: #59899e; cursor: pointer;} .colorSettings.sel, .opacitySettings.sel, .sizeSettings.sel {background: #59899e; color: #fff; border-color: #fff;} span.float-opt.sel.disabled, span.float-opt.sel.disabled:hover {background: #888; border-color: #fff; color: #fff;} span.float-opt.disabled:hover {border-color: #ddd; color: #3d3d3d; cursor: default;}';
	LCTstyle += '.WazeControlPermalink a.permalink {margin: 5px 0 0 5px; line-height: 1; float: right;} .WazeControlPermalink {margin-left: 5px;}';
	LCTstyle += '#chat .users {padding-right: 10px !important;} #chat .users ul li .lct-link {color: #59899e; cursor: pointer; float: right; position: relative; top: 5px; left: 5px; visibility: hidden;} #chat .users ul li:hover .lct-link {visibility: visible;} #chat .users ul li .lct-link:hover {color: #000;} #chat .users ul li:hover a.user {color: #59899e !important;} #chat ul.user-list li:hover a.user .crosshair{display:block;float:right;margin-top:5px}';
	LCTstyle += '.side-panel-section .lct-link {color: #59899e; cursor: pointer; font-size: 12px;} .side-panel-section .lct-link:hover {color: #000}';
	LCTstyle += '</style>';

	var map_links = '';
	map_links += '<img src="//i.imgur.com/tJkT6Ou.png" alt="Google Maps" title="Google Maps / satelit" id="wmepl_gmaps" data-item="gmaps" class="map-link">'; // Google Maps
	map_links += '<img src="//i.imgur.com/tJkT6Ou.png" alt="Google Maps Provoz" title="Google Maps Provoz / satelit" id="wmepl_gmaps_provoz" data-item="gmaps_provoz" class="map-link">'; // Google Maps Provoz
	map_links += '<img src="//i.imgur.com/EWv2H6F.png" alt="Mapy.cz" title="Mapy.cz / letecká" id="wmepl_mapycz" data-item="mapycz" class="map-link">'; // Mapy.cz
	map_links += '<img src="//i.imgur.com/8Yt8pUP.png" alt="OpenStreetMap.com" title="Open Street Map / Cam" id="wmepl_osm" data-item="osm" class="map-link">'; // Open Stree Map
	map_links += '<img src="//i.imgur.com/9LSVEwy.png" alt="Open Street Cam" title="Open Street Cam" id="wmepl_osv" data-item="osv" class="map-link">'; // Open Street Cam
	map_links += '<img src="//i.imgur.com/6QbWlPt.png" alt="Bing Maps" title="Bing Maps / aerial" id="wmepl_bing" data-item="bing" class="map-link">'; // Bing maps
	map_links += '<img src="//i.imgur.com/S5GHGaE.png" alt="Apple maps" title = "Apple maps / aerial" id="wmepl_apple" data-item="apple" class="map-link">'; // Apple maps
	map_links += '<img src="//i.imgur.com/rEE54wz.png" alt="Instant Street View" title="Instant Street View / Mapillary" id="wmepl_instasw" data-item="instasw" class="map-link">'; // Instant Street View
	map_links += '<img src="//i.imgur.com/sYWXnhE.png" alt="Mapillary" title="Mapillary" id="wmepl_mapillary" data-item="mapillary" class="map-link">'; // Mapillary
	map_links += '<img src="//i.imgur.com/uKgHjvX.png" alt="TomTom" title="TomTom" id="wmepl_tomtom" data-item="tomtom" class="map-link">'; // TomTom
	map_links += '<img src="//i.imgur.com/dSdLdoh.png" alt="Here" title="Here / satelit" id="wmepl_here" data-item="here" class="map-link">'; // Here
	map_links += '<i class="fa fa-car map-link" title="Pumpdroid N95 / LPG" id="wmepl_pumpdroid_n95" data-item="pumpdroid_n95"></i>';
	map_links += '<i class="fa fa-truck map-link" title="Pumpdroid Nafta / Bio" id="wmepl_pumpdroid_nafta" data-item="pumpdroid_nafta"></i>';

	map_links += '<i class="fa fa-credit-card map-link" title="CCS benzínky / myčky" id="wmepl_cz_ccs" data-item="cz_ccs"></i>';
	map_links += '<img src="//i.imgur.com/bFNMCqQ.png" alt="ŘSD" title="ŘSD" id="wmepl_rsd" data-item="rsd" class="map-link">'; // [CZ] ŘSD
	map_links += '<img src="//i.imgur.com/DoRe1NQ.png" alt="Dopravní Info" title="Dopravní Info / nahlásit" id="wmepl_dopravniinfo" data-item="dopravniinfo" class="map-link">'; // [CZ] DI
	map_links += '<img src="//i.imgur.com/4EB26Vm.png" alt="TSK Praha" title="TSK Praha" id="wmepl_tskpraha" data-item="tskpraha" class="map-link">'; // [CZ] TSK
	map_links += '<img src="//i.imgur.com/v5ZDUTY.png" alt="ČÚZK" title="ČÚZK / ortofoto" id="wmepl_cuzk" data-item="cuzk" class="map-link">'; // [CZ] ČÚZK
	map_links += '<img src="//i.imgur.com/UF6RQMe.png" alt="iKatastr" title="iKatastr / letecká" id="wmepl_ikatastr" data-item="ikatastr" class="map-link">'; // [CZ] iKatastr
	map_links += '<img src="//i.imgur.com/CikgGsw.png" alt="Správa železnic" title="Správa železnic DYPOD / GRAPP" id="wmepl_sz" data-item="sz" class="map-link">'; // [CZ] Správa železnic
	map_links += '<img src="//i.imgur.com/W7l8LzH.png" alt="Uzavírky (cz)" title="Uzavírky (cz) form. / tabulka" id="wmepl_cz_closures" data-item="cz_closures" class="map-link">'; // [CZ] closures
	map_links += '<img src="//i.imgur.com/nMGuuxD.png" alt="CZ wazers" title="CZ wazers form. / tabulka" id="wmepl_cz_wazers" data-item="cz_wazers" class="map-link">'; // [CZ] wazers
	map_links += '<i class="fa fa-credit-card map-link" title="CCS benzínky / myčky" id="wmepl_sk_ccs" data-item="sk_ccs"></i>';
	map_links += '<img src="//i.imgur.com/Xl1dZgr.png" alt="cdb" title="SSC - Cestná Databanka / značky" id="wmepl_cdb" data-item="cdb" class="map-link">'; // [SK] SSC - CDB
	map_links += '<img src="//i.imgur.com/qm2Ex0f.png" alt="zbgis" title="ZBGIS / Kataster" id="wmepl_zbgis" data-item="zbgis" class="map-link">'; // [SK] ZBGIS
	map_links += '<img src="//i.imgur.com/kQByydb.png" alt="Bratislava" title="BSK UPN Doprava / All" id="wmepl_blava" data-item="blava" class="map-link">'; // [SK] Bratislava
	map_links += '<img src="//i.imgur.com/5iRhjYj.png" alt="Košice" title="Košice" id="wmepl_kosice" data-item="kosice" class="map-link">'; // [SK] Kosice GISPLAN;
	map_links += '<img src="//i.imgur.com/VrZ0cw3.png" alt="Prešov" title="Prešov - webgis" id="wmepl_presov" data-item="presov" class="map-link">'; // [SK] Prešov
	map_links += '<i class="fa fa-building map-link" title="Test n. obcí / Katastr" id="wmepl_cz_obce" data-item="cz_obce"></i>'; // Test nazvu obci a Katastr
	map_links += '<img src="//i.imgur.com/0bOb9RG.png" alt="' + tr('Where am I?') + '" title="' + tr('Where am I?') + '" id="wmepl_wtfami" data-item="wtfami" class="map-link">'; // Kde jsem
	map_links += '<img src="//i.imgur.com/2yCyxgP.png" alt="Waze livemap" title="Waze livemap / se známkou" id="wmepl_livemap" data-item="livemap" class="map-link">'; // Waze livemap
	map_links += '<i class="fa fa-link map-link" title="Waze permal. tady / nová karta" id="wmepl_waze" data-item="waze"></i>';

	var opacitySettings = '';
	var opacityN = 0;
	for (var i = 0; i < 5; i++) {
		opacitySettings += '<span class="opacitySettings float-opt" id="opacitySettings'+i+'" data-item="'+i+'">'+opacityN+'%</span>';
		opacityN = opacityN+20;
	}

	var sizeSettings = '';
	for (var j = 12; j < 25; j=j+2) {
		sizeSettings += '<span class="sizeSettings float-opt" style="width:'+j+'px;height:'+j+'px;" data-item="'+j+'">'+j+'</span>';
	}

	var bar_settings = '<legend>' + tr('Bar settings') + '</legend>';
	bar_settings += '<label><input type="checkbox" class="bar-opt" name="wmepl_bar_float" id="wmepl_bar_float" data-item="float"> ' + tr('Floating bar') + '</label>';
	bar_settings += '<label class="float-lbl"><input type="checkbox" class="bar-opt float-opt" name="wmepl_bar_vertical" id="wmepl_bar_vertical" data-item="vertical"> ' + tr('Vertical floating bar') + '</label>';
	bar_settings += '<label style="padding-top: 10px;">' + tr('Bar color') + ':<br><span class="colorSettings float-opt" id="colorSettingsW">' + tr('White') + '</span> <span class="colorSettings float-opt" id="colorSettingsB">' + tr('Black') + '</span></label>';
	bar_settings += '<label>' + tr('Bar transparency') + ':<br>' + opacitySettings + '</label>';
	bar_settings += '<label>' + tr('Button size') + ' (px):<br>' + sizeSettings + '</label><p>&nbsp;</p>';
	if (I18n.locale != 'cs' && I18n.locale != 'sk') {
		bar_settings += '<label id="lctlinks-label"><input type="checkbox" class="bar-opt" name="wmepl_bar_lctlinks" id="wmepl_bar_lctlinks" data-item="lctlinks"> ' + tr('Show LCT links (sk)') + '</label>';
	}
	bar_settings += '<label><input type="checkbox" class="bar-opt" name="wmepl_bar_hidecopy" id="wmepl_bar_hidecopy" data-item="hidecopy"> ' + tr('Hide') + ' "<em>Imagery &copy; &hellip;</em>"</label>';

	var map_settings = '<legend>' + tr('Maps & waze links') + '</legend>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_gmaps" data-item="gmaps" value="1"> <img src="//i.imgur.com/tJkT6Ou.png" width="12" height="12"> Google Maps</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_gmaps_provoz" data-item="gmaps_provoz"> <img src="//i.imgur.com/tJkT6Ou.png" width="12" height="12"> Google Maps Provoz</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_mapycz" data-item="mapycz"> <img src="//i.imgur.com/EWv2H6F.png" width="12" height="12"> Mapy.cz</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_osm" data-item="osm"> <img src="//i.imgur.com/CyYKXMf.png" width="12" height="12"> Open Street Map</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_osv" data-item="osv"> <img src="//i.imgur.com/9LSVEwy.png" width="12" height="12"> Open Street Cam</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_bing" data-item="bing"> <img src="//i.imgur.com/6QbWlPt.png" width="12" height="12"> Bing maps</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_apple" data-item="apple"><img src="//i.imgur.com/S5GHGaE.png" width="12" height="12"> Apple maps</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_instasw" data-item="instasw"> <img src="//i.imgur.com/rEE54wz.png" width="12" height="12"> Instant Street View</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_mapillary" data-item="mapillary"> <img src="//i.imgur.com/sYWXnhE.png" width="12" height="12"> Mapillary</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_tomtom" data-item="tomtom"> <img src="//i.imgur.com/uKgHjvX.png" width="12" height="12"> TomTom</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_here" data-item="here"> <img src="//i.imgur.com/dSdLdoh.png" width="12" height="12"> Here</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_wtfami" data-item="wtfami"> <img src="//i.imgur.com/0bOb9RG.png" width="12" height="12"> ' + tr('Where am I?') + '</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_livemap" data-item="livemap"> <img src="//i.imgur.com/2yCyxgP.png" width="12" height="12"> Waze Livemap</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_waze" data-item="waze" disabled="disabled"> <i class="fa fa-link"></i> Waze Permalink</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_pumpdroid_n95" data-item="pumpdroid_n95"> <i class="fa fa-car"></i> Pumpdroid N95 / LPG</label>';
	map_settings += '<label><input type="checkbox" class="map-opt" id="wmepl_opt_pumpdroid_nafta" data-item="pumpdroid_nafta"> <i class="fa fa-truck"></i> Pumpdroid Nafta / Bio</label>';

	var czsk_settings = '<legend>' + tr('CZ/SK permalinks') + '</legend><em id="permalinks-cz" class="pointer">' + tr('Czech permalinks') + '</em>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_rsd" data-item="rsd"> <img src="//i.imgur.com/bFNMCqQ.png" width="12" height="12"> ŘSD</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_dopravniinfo" data-item="dopravniinfo"> <img src="//i.imgur.com/rNJyvvl.png" width="12" height="12"> Dopravní Info</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_tskpraha" data-item="tskpraha"> <img src="//i.imgur.com/tauFc9M.png" width="12" height="12"> TSK Praha</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_cuzk" data-item="cuzk"> <img src="//i.imgur.com/UbgqKWr.png" width="12" height="12"> ČÚZK</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_ikatastr" data-item="ikatastr"> <img src="//i.imgur.com/UF6RQMe.png" width="12" height="12"> iKatastr</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_sz" data-item="sz"> <img src="//i.imgur.com/CikgGsw.png" width="12" height="12"> Správa železnic</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_cz_closures" data-item="cz_closures"> <img src="//i.imgur.com/W7l8LzH.png" width="12" height="12"> ' + tr('Closures') + ' (cz)</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_cz_wazers" data-item="cz_wazers"> <img src="//i.imgur.com/nMGuuxD.png" width="12" height="12"> ' + tr('Waze users') + ' (cz)</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_cz_obce" data-item="cz_obce"> <i class="fa fa-building"></i> Test n. obcí / Katastr</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt cz-link" id="wmepl_opt_cz_ccs" data-item="cz_ccs"> <i class="fa fa-credit-card"></i> CCS benzínky / myčky</label>';

	czsk_settings += '<em id="permalinks-sk" class="pointer">' + tr('Slovak permalinks') + '</em>';
	czsk_settings += '<label><input type="checkbox" class="map-opt sk-link" id="wmepl_opt_cdb" data-item="cdb"> <img src="//i.imgur.com/Xl1dZgr.png" width="12" height="12"> Cestná Databanka</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt sk-link" id="wmepl_opt_zbgis" data-item="zbgis"> <img src="//i.imgur.com/qm2Ex0f.png" width="12" height="12"> ZBGIS</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt sk-link" id="wmepl_opt_blava" data-item="blava"> <img src="//i.imgur.com/kQByydb.png" width="12" height="12"> BSK UPN Doprava / All</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt sk-link" id="wmepl_opt_kosice" data-item="kosice"> <img src="//i.imgur.com/5iRhjYj.png" width="12" height="12"> Košice GISPLAN</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt sk-link" id="wmepl_opt_presov" data-item="presov"> <img src="//i.imgur.com/VrZ0cw3.png" width="12" height="12"> Prešov (webgis)</label>';
	czsk_settings += '<label><input type="checkbox" class="map-opt sk-link" id="wmepl_opt_sk_ccs" data-item="sk_ccs"> <i class="fa fa-credit-card"></i> CCS benzínky / myčky</label>';

	$('head').append(LCTstyle);
	$('body').append('<form id="permalinks-settings"><fieldset id="wmepl-bar-settings">' + bar_settings + '</fieldset><fieldset id="wmepl-map-settings">' + map_settings + '</fieldset><fieldset id="wmepl-czsk-settings">' + czsk_settings + '</fieldset></form>');

	$('.WazeControlPermalink').before('<div id="permalinksBar"></div>');
	$('#permalinksBar').prepend('<img src="' + GM_info.script.icon + '" alt="⚙" title="' + tr('LCT settings') + '" width="16" height="16" id="permalinks-toggle">');
	$('#permalinks-toggle').on('click', function() {$('#permalinks-settings').toggleClass('visible');$('#permalinks-toggle').toggleClass('active');});
	//$('body').append('<div id="permalinksBar">' + map_links + ' <input type="text" name="CopyUrl" id="CopyUrl" value="" style=""></div>');

	render_permalinksBar(o.float == 1);
	if (o.float == 1) {
		$('#wmepl_opt_waze').removeAttr('disabled');
	} else {
		$('input.float-opt').attr('disabled', 'disabled');
		$('span.float-opt').addClass('disabled');
	}
	if (o.bgimg > 4) {
		var n = o.bgimg-5;
		$('#colorSettingsB').addClass('sel');
		$('#opacitySettings' + n).addClass('sel');
	}
	else {
		$('#colorSettingsW').addClass('sel');
		$('#opacitySettings' + o.bgimg).addClass('sel');
	}
	$('.sizeSettings[data-item="' + o.size + '"]').addClass('sel');
	if (o.hidecopy == 1) {
		$('.wz-map-ol-control-attribution').css('visibility', 'hidden');
		$('#wmepl_bar_hidecopy').prop('checked', true);
	}
	if (o.lctlinks == 1) {
		$('#wmepl_bar_lctlinks').prop('checked', true);
	}

	function save_settings() {
		if (localStorage.LCT_Settings) {
			var settings = JSON.parse(localStorage.LCT_Settings);
		}
		else {
			settings = new Object();
			settings.barX = 700;
			settings.barY = 80;
		}
		var n = parseInt($('.opacitySettings.sel').attr('data-item'));
		if ($('#colorSettingsB').hasClass('sel')) {
			n = n + 5;
		}
		settings.float = ($('#wmepl_bar_float').is(':checked')) ? 1 : 0;
		settings.vertical = ($('#wmepl_bar_vertical').is(':checked')) ? 1 : 0;
		settings.bgimg = n;
		settings.size = parseInt($('.sizeSettings.sel').attr('data-item'));
		settings.lctlinks = ($('#wmepl_bar_lctlinks').is(':checked')) ? 1 : 0;
		settings.hidecopy = ($('#wmepl_bar_hidecopy').is(':checked')) ? 1 : 0;
		localStorage.setItem('LCT_Settings', JSON.stringify(settings, null, 4));
	}

	function update_map_links() {
		var mapLink = '';
		var lct_permalinks = new Object();
		$('#permalinks-settings .map-opt').each(function() {
			mapLink = $(this).attr('data-item');
			if ($(this).is(':checked')) {
				$('#wmepl_' + mapLink).show();
				lct_permalinks[mapLink] = 1;
			}
			else {
				$('#wmepl_' + mapLink).hide();
				lct_permalinks[mapLink] = 0;
			}
		});
		localStorage.setItem('LCT_Permalinks', JSON.stringify(lct_permalinks, null, 4));
	}

	$('#wmepl_bar_float').on('change', function() {
		render_permalinksBar($(this).is(':checked'));
		if ($(this).is(':checked')) {
			$('input.float-opt, #wmepl_opt_waze').removeAttr('disabled');
			$('span.float-opt').removeClass('disabled');
		}
		else {
			$('input.float-opt, #wmepl_opt_waze').attr('disabled', 'disabled');
			$('span.float-opt').addClass('disabled');
		}
		save_settings();
	});

	$('#wmepl_bar_vertical').on('change', function() {
		if ($(this).is(':checked')) {
			$('#permalinksBar_float').addClass('vertical');
			$('#permalinksBar_float.vertical').css('width', (o.size+8) + 'px');
		}
		else {
			$('#permalinksBar_float').removeClass('vertical');
			$('#permalinksBar_float').css('width', 'auto');
		}
		save_settings();
	});

	$('#wmepl_bar_hidecopy').on('change', function() {
		if ($(this).is(':checked')) {
			$('.wz-map-ol-control-attribution').css('visibility', 'hidden');
		}
		else {
			$('.wz-map-ol-control-attribution').css('visibility', 'visible');
		}
		save_settings();
	});

	$('#wmepl_bar_lctlinks').on('change', function() {
		save_settings();
		$('#lctlinks-reload').remove();
		$('#lctlinks-label').append(' <span id="lctlinks-reload">[<a href="javascript:location.reload()">' + tr('Reload') + '</a>]</span>');
	});

	$('.colorSettings, .opacitySettings, .sizeSettings').on('click', function() {
		if (!$(this).hasClass('disabled')) {
			if ($(this).hasClass('opacitySettings')) {
				$('.opacitySettings').removeClass('sel');
				$(this).addClass('sel');
			}
			else if ($(this).hasClass('sizeSettings')) {
				$('.sizeSettings').removeClass('sel');
				$(this).addClass('sel');
			}
			else {
				$('.colorSettings').removeClass('sel');
				$(this).addClass('sel');
			}
			var n = parseInt($('.opacitySettings.sel').attr('data-item'));
			if ($('#colorSettingsB').hasClass('sel')) {
				n = n + 5;
			}
			var selSize = parseInt($('.sizeSettings.sel').attr('data-item'));
			o.size = selSize;
			$('#permalinksBar_float').css('background', 'url("https://i.imgur.com/' + bgImgs[n] + '.png") top left repeat');
			$('#permalinksBar_float.vertical').css('width', (selSize+8) + 'px');
			$('#permalinksBar_float img.map-link').css('width', selSize + 'px').css('height', selSize + 'px');
			$('#permalinksBar_float i.map-link').css('font-size', selSize + 'px');
			save_settings();
		}
	});

	$('#permalinks-settings .map-opt').on('change', function() {
		update_map_links();
	});

	$('#permalinks-cz').on('click', function() {
		var check = ($('#wmepl_opt_rsd').is(':checked')) ? false : true;
		$('.cz-link').each(function(){this.checked = check;});
		update_map_links();
	});

	$('#permalinks-sk').on('click', function() {
		var check = ($('#wmepl_opt_cdb').is(':checked')) ? false : true;
		$('.sk-link').each(function(){this.checked = check;});
		update_map_links();
	});

	$(document).on('click', function(event) {
		if (!$(event.target).closest('#permalinks-settings').length && !$(event.target).closest('#permalinks-toggle').length && !$(event.target).closest('#permalinksBar_float').length) {
			$('#permalinks-settings').removeClass('visible');
			$('#permalinks-toggle').removeClass('active');
		}
	});

	if (o.lctlinks == 1 || I18n.locale == 'sk') {
		window.openLCT = function(username) {
			window.open('http://guri.sk/waze/lct/streets.php?days=14&editor_name=' + username, '_blank');
		};
		function parseUsername(html) {
			var userUpdated = html.match(/[a-zA-Z\-\_0-9]+\(/);
			userUpdated = userUpdated[0].replace('(', '');
			return userUpdated;
		}
		function updateLCTlinks() {
			if ($('#chat ul.user-list').is(':visible')) {
				$('#chat ul.user-list li').each(function() {
					var username = $('div.username', this).html();
					var lctimg = $('.lct-link', this).html();
					if (username == undefined) {
						$('.lct-link', this).remove();
					}
					else {
						if ($('#lct-link-' + username).length == 0) {
							$(this).prepend('<i class="fa fa-user-secret lct-link" id="lct-link-' + username + '" onclick="openLCT(\'' + username + '\')"></i>');
						}
					}
				});
				if (lct_debug && lct_loop_debug) console.log('LCT: Updating chat user list');
			}
			if (unsafeWindow.W.selectionManager.selectedItems[0] != undefined && (unsafeWindow.W.selectionManager.selectedItems[0].model.type == 'segment' || unsafeWindow.W.selectionManager.selectedItems[0].model.type == 'venue')) {
				if ($('ul.side-panel-section li:nth-child(2) .updated-by-list').length) {
					$('ul.side-panel-section li:nth-child(2) .updated-by-list li').each(function() {
						var lctimg = $('.lct-link', this).html();
						if (lctimg == undefined) {
							var username = parseUsername($(this).html());
							$(this).append(' <i class="fa fa-user-secret lct-link" onclick="openLCT(\'' + username + '\')"></i>');
						}
					});
				}
				else if (!$('ul.side-panel-section li:nth-child(2) .lct-link').length) {
					var username = parseUsername($('ul.side-panel-section li:nth-child(2)').html());
					$('ul.side-panel-section li:nth-child(2)').append(' <i class="fa fa-user-secret lct-link" onclick="openLCT(\'' + username + '\')"></i>');
				}
				var n = (unsafeWindow.W.selectionManager.selectedItems[0].model.type == 'venue') ? 1 : 3;
				if ($('ul.side-panel-section li:nth-child('+n+') .created-by-list').length) {
					$('ul.side-panel-section li:nth-child('+n+') .created-by-list li').each(function() {
						var lctimg = $('.lct-link', this).html();
						if (lctimg == undefined) {
							username = parseUsername($(this).html());
							$(this).append(' <i class="fa fa-user-secret lct-link" onclick="openLCT(\'' + username + '\')"></i>');
						}
					});
				}
				else if (!$('ul.side-panel-section li:nth-child('+n+') .lct-link').length) {
					username = parseUsername($('ul.side-panel-section li:nth-child('+n+')').html());
					$('ul.side-panel-section li:nth-child('+n+')').append(' <i class="fa fa-user-secret lct-link" onclick="openLCT(\'' + username + '\')"></i>');
				}
				if (lct_debug && lct_loop_debug) console.log('LCT: Updating side panel LCT links');
			}
		}
		window.setInterval(updateLCTlinks, 1E3);
	}
}

if (lct_debug) console.log('LCT: Script loaded');
document.addEventListener("wme-map-data-loaded", LCT_init, {once: true});