if ( typeof at == "undefined" ) { at=new Object(); }
if ( typeof at.quelltextlich == "undefined" ) { at.quelltextlich=new Object(); }
at.quelltextlich.osm={
// Version information of this script
VERSION_NUMBER: "0.0.36",
RELEASE_DATE: "2022-02-16",
HOMEPAGE: "http://osm.quelltextlich.at/",
LEGAL_INFO: "http://quelltextlich.at/impressum.html",
// Adds the required JavaScript tags to the document head
addJavaScript: function ( onLoadFunc )
{
var jsNode = document.createElement('script');
jsNode.setAttribute('type', 'text/javascript');
jsNode.setAttribute('src', '//osm.quelltextlich.at/openlayers/2.11/OpenLayers.js');
if ( onLoadFunc )
{
jsNode.onreadystatechange= function () {
if ( (this.readyState == 'loaded') || (this.readyState == 'complete') )
{
onLoadFunc();
}
}
jsNode.onload=onLoadFunc;
}
document.getElementsByTagName('head')[0].appendChild(jsNode);
},
// Adds the CSS Stylesheet href to the document head
addStyleSheet: function ( href )
{
var cssNode = document.createElement('link');
cssNode.setAttribute('rel', 'stylesheet');
cssNode.setAttribute('type', 'text/css');
cssNode.setAttribute('href', href);
document.getElementsByTagName('head')[0].appendChild(cssNode);
},
// Yields the given text as valid, escaped xml
encodeAsXml: function ( text )
{
return text.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
},
// Gets the width and height of the viewport
getViewPortDimension: function ( )
{
var width;
var height;
try {
width = window.innerWidth;
height = window.innerHeight;
} catch (e) { ; }
if ( ( typeof width == "undefined" ) || ( width <= 0 ) )
{
try {
width = document.documentElement.clientWidth;
height = document.documentElement.clientHeight;
} catch (e) { ; }
}
if ( ( typeof width == "undefined" ) || ( width <= 0 ) )
{
try {
width = document.body.clientHeight;
height = document.body.clientHeight;
} catch (e) { ; }
}
if ( ( typeof width == "undefined" ) || ( width <= 0 ) )
{
width = 320;
height = 256;
}
return { width: width, height: height };
},
// creates a div node with id divId.
// If a node with the given id existed beforehand, it is replaced by the newly created one.
// Otherwise, the newly created div node is inserted before siblingNode
// The created div gets width width and height height (each in Pixels).
replaceOrAddDiv: function ( divId, siblingNode, width, height )
{
var widthIsPercent = ( ( typeof width == "string" ) && ( width.substr( width.length-1, 1 ) == "%" ) );
var heightIsPercent = ( ( typeof height == "string" ) && ( height.substr( height.length-1, 1 ) == "%" ) );
if ( ( widthIsPercent ) || ( heightIsPercent ) )
{
var viewportDim=at.quelltextlich.osm.getViewPortDimension();
if ( widthIsPercent )
{
width = viewportDim.width * width.substr( 0, width.length-1 ) / 100;
}
if ( heightIsPercent )
{
height =viewportDim.height * height.substr( 0, height.length-1 ) / 100;
}
}
width = Math.max( width, 170 );
height = Math.max( height, 170 );
var divNode = document.createElement('div');
divNode.setAttribute('id', divId );
divNode.setAttribute('style', 'width: '+width+'px; height: '+height+'px;');
var nodeToReplace = document.getElementById( divId );
if ( nodeToReplace == null )
{
siblingNode.parentNode.insertBefore( divNode, siblingNode );
} else {
nodeToReplace.parentNode.replaceChild( divNode, nodeToReplace );
}
return divNode;
},
// Removes 2nd, 3rd, declaration of the same CSS from
deduplicateHeadCss: function()
{
const headChildren = document.head.children;
var foundCSS = {};
for (var idx = 0 ; idx < headChildren.length ; idx++) {
const headChild = headChildren[idx];
if (headChild.tagName == "LINK" && headChild.type == "text/css") {
if (headChild.href in foundCSS) {
headChild.remove();
idx--;
} else {
foundCSS[headChild.href] = true;
}
}
}
},
// Maps real world lat, lon to the coordinate system of the map
worldToMap: function ( lat, lon )
{
var lonLat = new OpenLayers.LonLat( lon, lat );
lonLat.transform(
new OpenLayers.Projection("EPSG:4326"),
new OpenLayers.Projection("EPSG:900913") /* This is map.getProjectionObject() */
);
return lonLat;
},
// Adds the maps once the OpenLayers JavaScript file is fully loaded
getText: function ( label )
{
var i18n_text=null;
try {
i18n_text = at.quelltextlich.osm.vars['i18n'][ at.quelltextlich.osm.vars['i18n']['selectedLanguage'] ][ label ];
} catch (e) { ; }
if ( typeof i18n_text == "undefined" )
{
try {
i18n_text = at.quelltextlich.osm.vars['i18n'][ at.quelltextlich.osm.vars['i18n']['defaultLanguage'] ][ label ];
} catch (e) { ; }
}
if ( typeof i18n_text == "undefined" )
{
i18n_text = label;
}
return i18n_text;
},
// Sets up a basic map with controls.
// Without setting the center.
// Without markers.
addRawMap: function ( div, useZoomBar, navigation, plainMouseWheelZoom )
{
var map = new OpenLayers.Map( div, { controls: [] } );
var osmLayer = new OpenLayers.Layer.OSM();
var navigationOptions = {};
osmLayer.attribution=at.quelltextlich.osm.getText( "osm.Attribution" );
osmLayer.url=osmLayer.url.replace(/^https?:/,"")
map.addLayer( osmLayer );
if (plainMouseWheelZoom === false)
{
navigationOptions = {mouseWheelOptions:{keyMask:OpenLayers.Handler.MOD_CTRL}};
}
map.addControl(new OpenLayers.Control.Navigation(navigationOptions));
map.addControl(new OpenLayers.Control.KeyboardDefaults());
//map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.ScaleLine());
if ( navigation !== false )
{
if ( useZoomBar )
{
map.addControl(new OpenLayers.Control.PanZoomBar());
} else {
map.addControl(new OpenLayers.Control.PanZoom());
}
}
map.addControl(new OpenLayers.Control.Attribution());
// This fixup allows Opera to show KML Layers in a viewer that is
// included via an element.
var containerDiv = document.getElementById(map.id+"_OpenLayers_Container");
containerDiv.style.width="100%";
containerDiv.style.height="100%";
return map;
},
// Adds a marker (specified by conf) to the marking layer layer of the map map
// The layer need not have been added to the map.
addMarking: function ( layer, conf ) {
var lon = 0;
var lat = 0;
if ( conf )
{
if ( conf.lon ) { lon = conf.lon; }
if ( conf.lat ) { lat = conf.lat; }
}
var marker=at.quelltextlich.osm.createMarker( lat, lon );
layer.addMarker( marker );
return marker;
},
// Adds a marker (specified by conf) to the marking layer layer of the map map
// The layer need not have been added to the map.
getMapId: function ( map ) {
// cut away “osm_div_" from the div the map is rendered to
return map.div.id.substr(8);
},
// Destroys a created popup for a given feature
destroyPopup: function (feature) {
feature.popup.destroy();
feature.popup = null;
},
// Creates a popup for a given feature
createPopup: function (feature) {
if ( ( typeof feature != "undefined" ) && ( typeof feature.attributes != "undefined" ) && ( typeof feature.attributes.description != "undefined" ) )
{
var popupDescription = '';
if ( typeof feature.attributes.name != "undefined" ) {
popupDescription += '' + feature.attributes.name + '
';
}
if ( ( typeof feature.attributes.description == "string" ) && ( feature.attributes.description.replace(/\s/g, '') != '' ) ) {
if ( popupDescription != '' ) {
popupDescription += ' ';
}
popupDescription += '' + feature.attributes.description + '
';
}
feature.popup = new OpenLayers.Popup.FramedCloud("pop",
feature.geometry.getBounds().getCenterLonLat(),
null,
popupDescription,
null,
true,
function() { at.quelltextlich.osm.destroyPopup( feature ); }
);
feature.layer.map.addPopup(feature.popup);
}
},
// Collecting layer bounds, after a kml layer has been fully loaded
kmlLayerLoadEnded: function ( eventObj )
{
if ( ( typeof eventObj != "undefined" ) && ( typeof eventObj.object != "undefined" ) && ( typeof eventObj.object.features != "undefined" ) )
{
var features = eventObj.object.features;
if ( ( features.length > 0 ) && ( typeof eventObj.object.map != "undefined" ) && ( typeof eventObj.object.map != "undefined" ) )
{
var map = eventObj.object.map;
var mapId = at.quelltextlich.osm.getMapId( map );
var conf = at.quelltextlich.osm.vars['map'+mapId+'Conf'];
var mergedLayersBounds=at.quelltextlich.osm.vars['mergedLayersBounds_'+mapId];
var i;
for ( i in features )
{
var feature = features[i];
if ( ( typeof feature != "undefined" ) && ( feature ) &&
( typeof feature.geometry != "undefined" ) && ( feature.geometry ) &&
( typeof feature.geometry.bounds != "undefined" ) && ( feature.geometry.bounds ) )
{
mergedLayersBounds.extend( feature.geometry.bounds );
}
}
if ( typeof conf.initialPosition == "undefined" )
{
map.zoomToExtent( mergedLayersBounds );
// ZoomIn+ZoomOut is Workaround for Opera
map.zoomIn();
map.zoomOut();
}
}
}
},
// Generates and adds a KML Layer based on the configuration
// whose url has been successfully cached on the server
addFullyCachedKMLLayer: function ( map, conf )
{
var attribution=" "+at.quelltextlich.osm.getText('layer.kml.attribution.preLink');
attribution+=""+ at.quelltextlich.osm.encodeAsXml( conf.attribution.text ) +" ";
if ( ( conf.license.url ) || ( conf.license.name ) ) {
var addendum=at.quelltextlich.osm.getText('layer.kml.attribution.license');
if ( conf.license.name ) {
addendum=at.quelltextlich.osm.encodeAsXml( conf.license.name );
}
if ( conf.license.url ) {
addendum=""+ addendum +" ";
}
attribution+=" ("+addendum+")";
}
attribution+=at.quelltextlich.osm.getText('layer.kml.attribution.postLink');
var layer = new OpenLayers.Layer.Vector( "kml_"+conf.id, {
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: conf.url.cache,
format: new OpenLayers.Format.KML({
extractStyles: true,
extractAttributes: true,
maxDepth: 4
})
}),
eventListeners: {
loadend: at.quelltextlich.osm.kmlLayerLoadEnded
},
attribution: attribution
});
map.addLayer( layer );
var selectorControl = new OpenLayers.Control.SelectFeature( layer, {
onSelect: at.quelltextlich.osm.createPopup,
onUnselect: at.quelltextlich.osm.destroyPopup
});
map.addControl(selectorControl);
selectorControl.activate();
},
// Adds the cache information to KML Configuration and adds the layer
KMLFileCached: function( httpObj, params )
{
var errorCode=0;
var errorMessage="";
if ( httpObj.status == 200 )
{
var result;
try {
result = eval( "(" + httpObj.responseText + ")" );
} catch ( e ) {
errorCode=-2;
errorMessage="Error interpreting the result of the caching service";
}
if ( ( typeof result != "undefined" ) && ( typeof result.errorCode != "undefined" ) )
{
errorCode=result.errorCode;
errorMessage=result.errorMessage;
if ( ( result.errorCode == 0 ) && ( typeof result.cacheUrl != "undefined" ) )
{
params.conf.url.cache=result.cacheUrl;
at.quelltextlich.osm.addFullyCachedKMLLayer( params.map, params.conf );
}
}
} else {
errorCode = -1;
errorMessage = "HTTP Error while communicating with cache service ("+httpObj.status+" - "+httpObj.statusText+")"
}
if ( errorCode != 0 )
{
if ( errorMessage )
{
alert( "File caching error:\n"+errorMessage+" (Error code: "+errorCode+")" );
} else {
alert( "Undefined file caching error" );
}
}
},
// Caches a URL on the Server
cacheUrlOnServer: function( url, callback, params )
{
var httpObj = null;
try {
httpObj = new XMLHttpRequest();
} catch(e) {
try {
httpObj = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
try {
httpObj = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
httpObj = null;
}
}
}
if (httpObj) {
var cachingUrl=at.quelltextlich.osm.vars['const']['url_caching']+encodeURIComponent( url );
httpObj.open('GET', cachingUrl, true);
httpObj.onreadystatechange = function () {
if (httpObj.readyState == 4) {
callback( httpObj, params );
}
};
httpObj.send(null);
}
},
// Adds a map, along with markers, ... and centers it
addMap: function ( mapId )
{
var conf = at.quelltextlich.osm.vars['map'+mapId+'Conf'];
var initialLat=48.8567;
var initialLon=2.3517;
var initialZoom=11;
var divId="osm_div_"+mapId;
// Dimension der Karte setzen
var mapWidth=0;
var mapHeight=0;
if ( conf.dimension )
{
if ( conf.dimension.width ) { mapWidth=conf.dimension.width; }
if ( conf.dimension.height ) { mapHeight=conf.dimension.height; }
}
var mapDiv = at.quelltextlich.osm.replaceOrAddDiv( divId, at.quelltextlich.osm.vars['map'+mapId+'OriginatingNode'], mapWidth, mapHeight );
var navigation = conf.navigation;
var plainMouseWheelZoom = conf.plainMouseWheelZoom;
// Karte initialisieren
var map = at.quelltextlich.osm.addRawMap( divId, ( mapHeight >= 370 ), navigation, plainMouseWheelZoom );
mapDiv.className = mapDiv.className+" "+divId;
if ( ! at.quelltextlich.osm.vars['CSSAdded'] )
{
at.quelltextlich.osm.vars['CSSAdded']=true;
at.quelltextlich.osm.addStyleSheet( at.quelltextlich.osm.HOMEPAGE.replace(/^https?:/,"") + 'css/map.css' );
}
// Marker setzen
var markerLayer;
if ( conf.marker )
{
markerLayer = new OpenLayers.Layer.Markers( "Markers" );
var markerConfId;
for ( markerConfId in conf.marker )
{
var markerConf=conf.marker[markerConfId];
at.quelltextlich.osm.addMarking( markerLayer, markerConf );
}
map.addLayer(markerLayer);
}
if ( typeof conf.kmls != "undefined" )
{
at.quelltextlich.osm.vars['mergedLayersBounds_'+mapId] = new OpenLayers.Bounds();
for ( kmlConfId in conf.kmls )
{
var kmlConf=conf.kmls[kmlConfId];
kmlConf.id=kmlConfId;
at.quelltextlich.osm.cacheUrlOnServer( kmlConf.url.real, at.quelltextlich.osm.KMLFileCached, { conf: kmlConf, map: map } );
} //done adding a single kml layer
} //done adding all kml layers
// Ausgangsposition aus Konfiguration setzen
if ( typeof conf.initialPosition != "undefined" )
{
if ( conf.initialPosition.lon ) { initialLon=conf.initialPosition.lon; }
if ( conf.initialPosition.lat ) { initialLat=conf.initialPosition.lat; }
if ( conf.initialPosition.zoom ) { initialZoom=conf.initialPosition.zoom; }
}
map.setCenter( at.quelltextlich.osm.worldToMap( initialLat, initialLon ), initialZoom );
// When adding multiple maps to a page, OpenLayers adds their
// stylesheet once for each added map. The 2nd, 3rd, ... addition of
// the OpenLayer's CSS overrides our own map.css, so we only keep the
// first variant of CSSes.
at.quelltextlich.osm.deduplicateHeadCss();
try {
conf.callbacks.mapAdded( mapId, map );
} catch (e) { ; }
},
// Redirects 404s from OSM tileserver to local 404 image
monkeyPatchOpenLayersUtilonImageLoadError: function() {
var origOnImageLoadErrorFunc = OpenLayers.Util.onImageLoadError;
OpenLayers.Util.onImageLoadError = function () {
if ( /^https?:\/\/tile\.openstreetmap\.org\/-?[0-9]+\/-?[0-9]+\/-?[0-9]+\.png$/.test(this.src) )
{
this.src="//osm.quelltextlich.at/pics/404.png";
} else {
origOnImageLoadErrorFunc();
}
}
},
// Patch event registration to use `passive: false` for all events. The
// default for `passive` change for a few browsers to `true` in some
// situations (E.g.: Chrome 97). There, scrolling on a map on a page would
// zoom the map /and/ scroll the page.
monkeyPatchOpenLayersEventobserve: function() {
// This method is inlined from OpenLayers 2.11. Only the call to
// addEventListener has been patched up.
OpenLayers.Event.observe = function(elementParam, name, observer, useCapture) {
var element = OpenLayers.Util.getElement(elementParam);
useCapture = useCapture || false;
if (name == 'keypress' &&
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
|| element.attachEvent)) {
name = 'keydown';
}
//if observers cache has not yet been created, create it
if (!this.observers) {
this.observers = {};
}
//if not already assigned, make a new unique cache ID
if (!element._eventCacheID) {
var idPrefix = "eventCacheID_";
if (element.id) {
idPrefix = element.id + "_" + idPrefix;
}
element._eventCacheID = OpenLayers.Util.createUniqueID(idPrefix);
}
var cacheID = element._eventCacheID;
//if there is not yet a hash entry for this element, add one
if (!this.observers[cacheID]) {
this.observers[cacheID] = [];
}
//add a new observer to this element's list
this.observers[cacheID].push({
'element': element,
'name': name,
'observer': observer,
'useCapture': useCapture
});
//add the actual browser event listener
if (element.addEventListener) {
if (OpenLayers.BROWSER_NAME != "msie") {
// Force `passive` to false to avoid zooming map and scrolling
// page at the same time.
element.addEventListener(name, observer, {
capture: useCapture,
passive: false
});
} else {
// Fallback for MSIE, whose addEventListener does not
// support an options parameter. Since, there events are
// not passive by default, we do not run into the issue of
// both zooming and scrolling at the same time anyways.
element.addEventListener(name, observer, useCapture);
}
} else if (element.attachEvent) {
element.attachEvent('on' + name, observer);
}
}
},
// Applies all relevant monkey patches OpenLayer
monkeyPatchOpenLayers: function() {
at.quelltextlich.osm.monkeyPatchOpenLayersUtilonImageLoadError();
at.quelltextlich.osm.monkeyPatchOpenLayersEventobserve();
},
// Adds the maps once the OpenLayers JavaScript file is fully loaded
loaded: function ()
{
if (! at.quelltextlich.osm.vars['OpenLayersFullyLoaded'])
{
at.quelltextlich.osm.vars['OpenLayersFullyLoaded']=true;
at.quelltextlich.osm.monkeyPatchOpenLayers();
// add the prepared maps to the visible map
var mapCount=at.quelltextlich.osm.vars['mapCount'];
if ( mapCount )
{
var mapId;
for ( mapId = 1; mapId <= mapCount; mapId++ )
{
at.quelltextlich.osm.addMap( mapId );
}
}
}
},
// Initializes the Internationalization for english
addI18nString: function ( lang, label, translation ) {
at.quelltextlich.osm.vars['i18n'][lang][label] = translation;
},
// Initializes the Internationalization for english
initI18nEn: function () {
var lang='en';
at.quelltextlich.osm.vars['i18n'][lang] = new Object();
addI18nString = at.quelltextlich.osm.addI18nString;
addI18nString( lang, 'product.name', 'OSMTools Viewer' );
addI18nString( lang, 'osm.Attribution', 'map by the OpenStreetMap contributors (CC-BY-SA 2.0 )' );
addI18nString( lang, 'openlayers.Attribution', 'OpenLayers (license )' );
addI18nString( lang, 'layer.kml.attribution.license', 'license' );
addI18nString( lang, 'layer.kml.attribution.preLink', 'markings by ' );
addI18nString( lang, 'layer.kml.attribution.postLink', '' );
addI18nString( lang, 'ui.label.close', 'Close' );
addI18nString( lang, 'ui.label.webservice', 'Webservice' );
addI18nString( lang, 'ui.label.version', 'Version' );
addI18nString( lang, 'ui.label.homepage', 'Homepage' );
addI18nString( lang, 'ui.label.legal_info', 'Legal information' );
addI18nString( lang, 'ui.label.map', 'Map' );
addI18nString( lang, 'ui.label.tiles', 'Tiles' );
addI18nString( lang, 'ui.label.viewer', 'Viewer' );
addI18nString( lang, 'ui.label.kml_overlays', 'KML Overlays' );
addI18nString( lang, 'ui.label.kml_overlay_nr', 'KML Overlay' );
addI18nString( lang, 'ui.label.kml_overlay.attribution', 'Attribution' );
addI18nString( lang, 'ui.label.kml_overlay.license', 'License' );
addI18nString( lang, 'ui.label.back_to_map', 'Return to map' );
// addI18nString( lang, '', '' );
},
// Initializes the Internationalization for german
initI18nDe: function initI18nDe() {
var lang='de';
at.quelltextlich.osm.vars['i18n'][lang] = new Object();
addI18nString = at.quelltextlich.osm.addI18nString;
addI18nString( lang, 'product.name', 'OSMTools Betrachter' );
addI18nString( lang, 'osm.Attribution', 'Karte von den OpenStreetMap Mitwirkenden (CC-BY-SA 2.0 )' );
addI18nString( lang, 'openlayers.Attribution', 'OpenLayers (Lizenz )' );
addI18nString( lang, 'layer.kml.attribution.license', 'Lizenz' );
addI18nString( lang, 'layer.kml.attribution.preLink', 'Markierungen von ' );
addI18nString( lang, 'layer.kml.attribution.postLink', '' );
addI18nString( lang, 'ui.label.close', 'Schließen' );
addI18nString( lang, 'ui.label.webservice', 'Webdienst' );
addI18nString( lang, 'ui.label.version', 'Version' );
addI18nString( lang, 'ui.label.homepage', 'Webseite' );
addI18nString( lang, 'ui.label.legal_info', 'Impressum' );
addI18nString( lang, 'ui.label.map', 'Karte' );
addI18nString( lang, 'ui.label.tiles', 'Kacheln' );
addI18nString( lang, 'ui.label.viewer', 'Anzeige' );
addI18nString( lang, 'ui.label.kml_overlays', 'KML Ebenen' );
addI18nString( lang, 'ui.label.kml_overlay_nr', 'KML Ebene' );
addI18nString( lang, 'ui.label.kml_overlay.attribution', 'Attributierung' );
addI18nString( lang, 'ui.label.kml_overlay.license', 'Lizenz' );
addI18nString( lang, 'ui.label.back_to_map', 'Zurück zur Karte' );
// addI18nString( lang, '', '' );
},
// Initializes the Internationalization for esperanto
initI18nEo: function () {
var lang='eo';
at.quelltextlich.osm.vars['i18n'][lang] = new Object();
addI18nString = at.quelltextlich.osm.addI18nString;
addI18nString( lang, 'product.name', 'OSMTools Rigardilo' );
addI18nString( lang, 'osm.Attribution', 'mapo de la OpenStreetMap kontribuantoj (CC-BY-SA 2.0 )' );
addI18nString( lang, 'openlayers.Attribution', 'OpenLayers (licenco )' );
addI18nString( lang, 'layer.kml.attribution.license', 'permesilo' );
addI18nString( lang, 'layer.kml.attribution.preLink', 'etikedoj de ' );
addI18nString( lang, 'layer.kml.attribution.postLink', '' );
addI18nString( lang, 'ui.label.close', 'Fermu' );
addI18nString( lang, 'ui.label.webservice', 'Retservo' );
addI18nString( lang, 'ui.label.version', 'Version' );
addI18nString( lang, 'ui.label.homepage', 'TTT-ejo' );
addI18nString( lang, 'ui.label.legal_info', 'LeÄa respondeco' );
addI18nString( lang, 'ui.label.map', 'Mapo' );
addI18nString( lang, 'ui.label.tiles', 'Platoj' );
addI18nString( lang, 'ui.label.viewer', 'Rigardilo' );
addI18nString( lang, 'ui.label.kml_overlays', 'KML tegoj' );
addI18nString( lang, 'ui.label.kml_overlay_nr', 'KML tego' );
addI18nString( lang, 'ui.label.kml_overlay.attribution', 'Atribuo' );
addI18nString( lang, 'ui.label.kml_overlay.license', 'Permesilo' );
addI18nString( lang, 'ui.label.back_to_map', 'Reiru al la mapo' );
// addI18nString( lang, '', '' );
},
// Initializes the global setting and variables
init: function ()
{
at.quelltextlich.osm.vars=new Object();
at.quelltextlich.osm.vars['preparedMaps']=new Object();
at.quelltextlich.osm.vars['OpenLayersFullyLoaded']=false;
at.quelltextlich.osm.vars['CSSAdded']=false;
at.quelltextlich.osm.vars['mapCount']=0;
at.quelltextlich.osm.vars['const']=new Object();
at.quelltextlich.osm.vars['const']['url_osm']="http://www.openstreetmap.org/";
at.quelltextlich.osm.vars['const']['url_cc_by_2_0']="http://creativecommons.org/licenses/by/2.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_3_0']="http://creativecommons.org/licenses/by/3.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nc_2_0']="http://creativecommons.org/licenses/by-nc/2.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nc_3_0']="http://creativecommons.org/licenses/by-nc/3.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nc_nd_2_0']="http://creativecommons.org/licenses/by-nc-nd/2.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nc_nd_3_0']="http://creativecommons.org/licenses/by-nc-nd/3.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nc_sa_2_0']="http://creativecommons.org/licenses/by-nc-sa/2.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nc_sa_3_0']="http://creativecommons.org/licenses/by-nc-sa/3.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nd_2_0']="http://creativecommons.org/licenses/by-nd/2.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_nd_3_0']="http://creativecommons.org/licenses/by-nd/3.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_sa_2_0']="http://creativecommons.org/licenses/by-sa/2.0/";
at.quelltextlich.osm.vars['const']['url_cc_by_sa_3_0']="http://creativecommons.org/licenses/by-sa/3.0/";
at.quelltextlich.osm.vars['const']['url_cc0_1_0']="http://creativecommons.org/publicdomain/zero/1.0/";
at.quelltextlich.osm.vars['const']['url_caching']=at.quelltextlich.osm.HOMEPAGE.replace(/^https?:/,"") + "cache.json?url=";
at.quelltextlich.osm.vars['i18n']=new Object();
at.quelltextlich.osm.vars['i18n']['defaultLanguage']='en';
at.quelltextlich.osm.initI18nEn();
at.quelltextlich.osm.initI18nDe();
at.quelltextlich.osm.initI18nEo();
at.quelltextlich.osm.addJavaScript( at.quelltextlich.osm.loaded );
if ( ! at.quelltextlich.osm.vars['i18n']['selectedLanguage'] )
{
try {
at.quelltextlich.osm.vars['i18n']['selectedLanguage']=document.getElementsByTagName( 'html' )[0].lang;
} catch (e) { ; }
}
},
// Gathers the required information, for setting up the map, once all
// JavaScript has been loaded
prepareMap: function ( conf )
{
var mapId = at.quelltextlich.osm.vars['mapCount'];
if ( mapId )
{
mapId++;
} else {
mapId=1;
}
at.quelltextlich.osm.vars['mapCount']=mapId;
at.quelltextlich.osm.vars['map'+mapId+'Conf']=conf;
var scriptNodes = document.getElementsByTagName( 'script' );
var thisScriptNode = scriptNodes[ scriptNodes.length - 1 ];
// Workaround for Opera Mobile, whose getElementsByTagName yields a too
// short result for the first invocation. In this case, thisScriptNode is
// one of the script tags from the tag.
if (thisScriptNode.parentNode.tagName.toUpperCase() == "HEAD")
{
// getElementsByTagName gave a script tag from within the head tag.
// This behaviour occurs on Opera Mobile for the first call to
// add a map. There, scriptNodes does /not/ contain all script
// tags, although they occur in documents.all. Hence we iterating
// manually, and thereby try to obtain the correct value for
// thisScriptNode.
var lastScriptNode = null;
var i;
for ( i = 0 ; i < document.all.length ; i++ )
{
node=document.all[i];
if ( node.tagName.toUpperCase() == "SCRIPT" )
{
lastScriptNode = node;
}
}
if ( lastScriptNode.parentNode.tagName.toUpperCase() != "HEAD" )
{
thisScriptNode=lastScriptNode;
}
}
at.quelltextlich.osm.vars['map'+mapId+'OriginatingNode']=thisScriptNode;
// if the OpenLayers Javascript file has been fully loaded, we directly
// start the actual addition of the map. Otherwise, the actual addition
// is carried out in at.quelltextlich.osm.loaded.
if ( at.quelltextlich.osm.vars['OpenLayersFullyLoaded'] )
{
at.quelltextlich.osm.addMap( mapId );
}
},
/*
********************************************************************
*
* Published functions
*
********************************************************************
*/
// Adds a map specified by a at.quelltextlich.osm.MapConfiguration object
embedMapPreconfigured: function ( conf )
{
at.quelltextlich.osm.prepareMap( conf.conf );
},
// Adds a map with a marker at a given position
embedMapMarkedLocation: function ( lat, lon, zoom, width, height )
{
var conf = new at.quelltextlich.osm.MapConfiguration();
conf.setMapDimension( width, height );
conf.setInitialPosition( lat, lon, zoom );
conf.addMarker( lat, lon );
at.quelltextlich.osm.embedMapPreconfigured( conf );
},
// Adds a map with a KML Layer
embedMapKML: function ( kmlUrl, width, height, kmlAttributionUrl, kmlAttribution, kmlLicenseName, kmlLicenseUrl )
{
var conf = new at.quelltextlich.osm.MapConfiguration();
conf.setMapDimension( width, height );
conf.addKML( kmlUrl, kmlAttributionUrl, kmlAttribution, kmlLicenseName, kmlLicenseUrl );
at.quelltextlich.osm.embedMapPreconfigured( conf );
},
// Adds a plain map
embedMapPlain: function ( lat, lon, zoom, width, height )
{
var conf = new at.quelltextlich.osm.MapConfiguration();
conf.setMapDimension( width, height );
conf.setInitialPosition( lat, lon, zoom );
at.quelltextlich.osm.embedMapPreconfigured( conf );
},
// Creates a new marker, that can be added to marking layers
createMarker: function ( lat, lon ) {
var size = new OpenLayers.Size(17,31);
var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
var icon = new OpenLayers.Icon( at.quelltextlich.osm.HOMEPAGE.replace(/^https?:/,"") + "pics/red.png", size, offset );
return new OpenLayers.Marker( at.quelltextlich.osm.worldToMap( lat, lon ), icon);
}
};
// Starting the initialization
at.quelltextlich.osm.init();
/*
********************************************************************
*
* MapConfiguration
*
********************************************************************
*/
at.quelltextlich.osm.MapConfiguration=function () {
// The Object accumulation all the configuration
this.conf=new Object();
/*
********************************************************************
*
* Published functions
*
********************************************************************
*/
// Sets the map's on-screen width and height
this.setMapDimension=function ( width, height ) {
if ( typeof this.conf.dimension == "undefined" ) { this.conf.dimension=new Object(); }
this.conf.dimension.width = width;
this.conf.dimension.height = height;
};
// Sets the default on-screet center of the map
this.setInitialPosition=function ( lat, lon, zoom ) {
if ( typeof this.conf.initialPosition == "undefined" ) { this.conf.initialPosition=new Object(); }
this.conf.initialPosition.lat = lat;
this.conf.initialPosition.lon = lon;
this.conf.initialPosition.zoom = zoom;
};
// Adds a marker at the given position
this.addMarker=function ( lat, lon ) {
if ( typeof this.conf.marker == "undefined" ) { this.conf.marker=new Array(); }
this.conf.marker.push( { lat: lat, lon: lon } );
};
// Adds a KML file to the map
this.addKML=function ( url, attribution_url, attribution_text, license_name, license_url ) {
if ( typeof this.conf.kmls == "undefined" ) { this.conf.kmls=new Array(); }
if ( typeof attribution_url == "undefined" ) {
attribution_url=url.replace(/^(http:\/\/[^\/]*\/).*$/,"\$1");
}
if ( typeof attribution_text == "undefined" ) {
attribution_text=attribution_url;
}
if ( typeof license_name == "undefined" ) {
license_name='';
}
if ( typeof license_url == "undefined" ) {
license_key="url_"+license_name.replace(/[^a-zA-Z0-9]/g, "_").toLocaleLowerCase();
if ( typeof at.quelltextlich.osm.vars['const'][license_key] == "undefined" ) {
license_url='';
} else {
license_url=at.quelltextlich.osm.vars['const'][license_key];
}
}
this.conf.kmls.push( {
url: { real: url },
attribution: { url: attribution_url, text: attribution_text },
license: { name: license_name, url: license_url }
} );
};
// Adds a KML file to the map
this.setCallbackMapAdded=function ( func ) {
if ( typeof this.conf.callbacks == "undefined" ) { this.conf.callbacks=new Object(); }
this.conf.callbacks.mapAdded = func;
};
// Hides navigation controls
this.hideNavigation=function ( func ) {
this.conf.navigation = false;
};
// Disables zooming with only mouse wheel (Zooming additionally requires Ctrl key)
this.disablePlainMouseWheelZoom=function () {
this.conf.plainMouseWheelZoom = false;
};
};