// -----------------------------------------------------------------------------------
// OpenLayers
var OL = {
init: function(){
if(typeof OpenLayers == 'undefined') { return };
this.lang = document.getElementsByTagName('HTML')[0].getAttribute('lang');
if(document.getElementById("cmsmap")) {
OL.mapContainer = document.getElementById("cmsmap");
OL.LocatePoint();
}
else if(document.getElementById("planlink")) {
var link = document.getElementById('planlink');
link.style.display = 'block';
var rumaenienmap = document.createElement("div");
rumaenienmap.setAttribute('id','rumaenienmap');
link.parentNode.insertBefore(rumaenienmap, link);
OL.mapContainer = document.getElementById("rumaenienmap");
link.onclick = function() {
link.style.display = 'none';
OL.styleContainer();
return false;
};
}
else if(document.getElementById("rumaenienmap")) {
OL.mapContainer = document.getElementById("rumaenienmap");
OL.styleContainer();
}
},
LocatePoint: function(){
if(this.mapContainer) {
this.mapContainer.style.width = '500px';
this.mapContainer.style.height = '400px';
this.mapContainer.style.display = 'block';
this.mapContainer.style.border = '1px solid #FF0000';
this.mapContainer.style.margin = '0 0';
document.getElementById("cmsmapstat").style.display = 'block';
this.map = new OpenLayers.Map(this.mapContainer, this.MapOptions());
var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
["http://mapsrv1.echonet.at/rumaenien/?",
"http://mapsrv2.echonet.at/rumaenien/?",
"http://mapsrv3.echonet.at/rumaenien/?"],
{layers: 'basic'} );
ol_wms.displayInLayerSwitcher = false;
ol_wms.transitionEffect = 'resize';
this.map.addLayers([ol_wms]);
//			this.map.addControl(new OpenLayers.Control.LayerSwitcher());
this.map.addControl(new OpenLayers.Control.PanZoomBar());
if(document.forms[0].lng.value != '' && document.forms[0].lat.value != '') {
var point = new OpenLayers.LonLat(document.forms[0].lng.value,document.forms[0].lat.value);
this.map.setCenter(point, 5);
this.Locationselect = OL.setupMarker(point);
//				this.map.zoomToMaxExtent();
} else {
this.map.zoomToMaxExtent();
}
//			document.getElementById("cmsmapstat").innerHTML = point;
this.map.events.register("click", this.map, function(e) {
var position = this.getLonLatFromViewPortPx(e.xy);
//				document.getElementById("cmsmapstat").innerHTML = position;
document.forms[0].lng.value = position.lon;
document.forms[0].lat.value = position.lat;
if (typeof OL.markers != "undefined") {
OL.markers.destroy();
delete OL.markers;
OL.setupMarker(new OpenLayers.LonLat(position.lon,position.lat));
} else {
OL.setupMarker(new OpenLayers.LonLat(position.lon,position.lat));
}
});
}
},
showMap: function(){
if(this.mapContainer) {
//			this.styleContainer();
this.map = new OpenLayers.Map(this.mapContainer, this.MapOptions());
var ol_wms = new OpenLayers.Layer.WMS( "OpenLayers WMS",
["http://mapsrv1.echonet.at/rumaenien/?",
"http://mapsrv2.echonet.at/rumaenien/?",
"http://mapsrv3.echonet.at/rumaenien/?"],
{layers: 'basic'} );
ol_wms.displayInLayerSwitcher = false;
ol_wms.transitionEffect = 'resize';
this.map.addLayers([ol_wms]);
//this.map.addControl(new OpenLayers.Control.LayerSwitcher());
this.map.addControl(new OpenLayers.Control.PanZoomBar());
this.AddOverview();
this.zoomlevel = this.map.getZoom();
//var polyIconSize = new OpenLayers.Size(13,12);
//var polyIconOffset = new OpenLayers.Pixel(-(polyIconSize.w/2), -(polyIconSize.h/2));
//this.polyIcon = new OpenLayers.Icon('/js/OpenLayers-2.6/img/marker-poly.png',polyIconSize,polyIconOffset);
var polyIconSize = new OpenLayers.Size(31,45);
var polyIconOffset = new OpenLayers.Pixel(-(polyIconSize.w/2), -(polyIconSize.h/2));
this.polyIcon = new OpenLayers.Icon('/js/OpenLayers-2.6/img/marker_flag.png',polyIconSize,polyIconOffset);
var starIconSize = new OpenLayers.Size(16,15);
var starIconOffset = new OpenLayers.Pixel(-(starIconSize.w/2), -(starIconSize.h/2));
this.starIcon = new OpenLayers.Icon('/js/OpenLayers-2.6/img/marker-star.png',starIconSize,starIconOffset);
var circleIconSize = new OpenLayers.Size(12,12);
var circleIconOffset = new OpenLayers.Pixel(-(circleIconSize.w/2), -(circleIconSize.h/2));
this.circleIcon = new OpenLayers.Icon('/js/OpenLayers-2.6/img/marker-circle.png',circleIconSize,circleIconOffset);
//this.layershop = this.AddGeoRSS("Shops", "/tools/georss.php?do=shop&lang="+this.lang,this.circleIcon,true);
//this.layergastro = this.AddGeoRSS("Gastronomie", "/tools/georss.php?do=gastro&lang="+this.lang,this.starIcon,true);
this.layerattraction = this.AddGeoRSS("Attraktionen", "/tools/georss.php?do=news&lang="+this.lang,this.polyIcon,true);
if(typeof selection != 'undefined') {
for(var i=0; i < selection.length; i++) {
var selected = selection[i];
var selectLat = selected[3];
var selectLng = selected[4];
var selectLink = selected[2];
var selectTitle = selected[0];
var selectLead = selected[1];
var point = new OpenLayers.LonLat(selectLng,selectLat);
this.map.setCenter(point, 2);
//					var text = '<div class="olLayerGeoRSSClose">[x]</div><div class="olLayerGeoRSSTitle"><a target="_blank" href="'+ selectLink +'" class="link">'+selectTitle+'</a></div><div class="olLayerGeoRSSDescription" style="">'+ selectLead +'</div>';
var text = '<div class="olLayerGeoRSSClose">[x]</div><div class="olLayerGeoRSSTitle"><a target="_blank" href="'+ selectLink +'" class="link">'+selectTitle+'</a></div>';
this.setupMarker(point, text);
}
} else {
this.map.zoomToMaxExtent();
this.map.setCenter();
}
}
},
AddGeoRSS: function(name,url,icon,stat){
OpenLayers.Feature.prototype.popupClass = OpenLayers.Class(OpenLayers.Popup.FramedCloud, {
'autoSize': true,
'minSize': new OpenLayers.Size(200,80),
'maxSize': new OpenLayers.Size(300,300),
'panMapIfOutOfView': true
});
var attraction = new OpenLayers.Layer.GeoRSS(name, url, {'icon':icon, 'useFeedTitle':false});
attraction.visibility = stat;
this.map.addLayer(attraction);
attraction.setVisibility(false);
return attraction;
},
AddOverview: function(stat){
this.overview = new OpenLayers.Control.OverviewMap({ minRectSize:{w:5,h:5}, /*minRatio:1.40625*3.65, maxRatio:1.40625,*/ size:{w:150,h:125} });
this.overview.mapOptions = this.MapOptionsOverview();
this.map.addControl(this.overview);
if(stat == true) {
this.overview.maximizeControl();
}
},
MapOptions: function(){
var options = {
'maxResolution': 1.40625/6,
restrictedExtent: new OpenLayers.Bounds(-90,-75,90,75),
maxExtent: new OpenLayers.Bounds(-90,-75,90,75),
numZoomLevels: 4,
controls: [new OpenLayers.Control.MouseDefaults()],
eventListeners: {
"zoomend": this.zoom
}
};
return options;
},
MapOptionsOverview: function(){
var options = {
'maxResolution': 1.40625/1.17,
restrictedExtent: new OpenLayers.Bounds(-90,-75,90,75),
maxExtent: new OpenLayers.Bounds(-90,-75,90,75),
numZoomLevels: 4,
controls: [new OpenLayers.Control.MouseDefaults()]
};
return options;
},
setupMarker: function(point,text){
var first = false;
if(text == null) {
textstat = false;
} else {
textstat = true;
}
if(typeof(this.markers)=='undefined') {
var first = true;
this.markers = new OpenLayers.Layer.Markers("Markers", {displayInLayerSwitcher: false});
this.map.addLayer(this.markers);
}
var data = {};
var size = new OpenLayers.Size(31,45);
var offset = new OpenLayers.Pixel(-(size.w/2), -(size.h/2));
data.icon = new OpenLayers.Icon('/js/OpenLayers-2.6/img/marker_flag.png',size,offset);
data.popupSize = new OpenLayers.Size(200, 200);
data['popupContentHTML'] = text;
this.feature = new OpenLayers.Feature(this.markers, point, data);
var marker = this.feature.createMarker();
if(first && textstat) {
popup = this.feature.createPopup(false);
this.markers.map.addPopup(popup);
}
if(textstat) {
marker.events.register('click', this.feature, this.markerClick);
}
this.markers.addMarker(marker);
},
/**
* Method: markerClick
*
* Parameters:
* evt - {Event}
*/
markerClick: function(evt) {
console.log("function markerClick");
var sameMarkerClicked = (this == this.layer.selectedFeature);
this.layer.selectedFeature = (!sameMarkerClicked) ? this : null;
for(var i=0; i < this.layer.map.popups.length; i++) {
this.layer.map.removePopup(this.layer.map.popups[i]);
}
if (!sameMarkerClicked) {
var popup = this.createPopup(false);
OpenLayers.Event.observe(popup.div, "click",
OpenLayers.Function.bind(function() {
for(var i=0; i < this.layer.map.popups.length; i++) {
this.layer.map.removePopup(this.layer.map.popups[i]);
}
}, this)
);
this.layer.map.addPopup(popup);
}
OpenLayers.Event.stop(evt);
},
styleExtend: function(){
if(!document.getElementById("rumaenienmap_OpenLayers_ViewPort")) { return; }
var parent = document.getElementById("rumaenienmap_OpenLayers_ViewPort");
var controlBG = document.createElement("div");
controlBG.className = 'controlBG';
//		OpenLayers.Rico.Corner.changeOpacity(controlBG, 0.75)
parent.appendChild(controlBG);
},
styleContainer: function(){
this.mapContainer.style.width = '100%';
this.mapContainer.style.border = '1px solid #333';
this.mapContainer.style.margin = '10px 0';
if(typeof selection != 'undefined') {
var contheight = "300px";
} else {
var contheight = "400px";
}
if(typeof Effect.Morph != "undefined") {
new Effect.Morph(this.mapContainer,{style:'height:'+contheight,afterFinish: function(){
OL.mapContainer.scrollTo();
OL.showMap();
}});
} else {
this.mapContainer.style.height = contheight;
OL.showMap();
}
},
zoom: function(event){
if(event.type == 'zoomend') {
//			console.info(OL.map.getLayersByName("Attraktionen")[0] );
//			console.info(OL.zoomlevel);
//			console.info(OL.map.getZoom());
OL.zoomlevel = OL.map.getZoom();
if(OL.zoomlevel >= 1) {
OL.map.getLayersByName("Attraktionen")[0].setVisibility(true);
} else {
OL.map.getLayersByName("Attraktionen")[0].setVisibility(false);
}
}
},
destroy: function(){
if(this.markers) {
this.markers.destroy();
delete this.markers;
}
this.map.destroy();
},
/*
addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
*/
addEvent: function( obj, type, fn ) {
if (obj.addEventListener)
obj.addEventListener( type, fn, false );
else if (obj.attachEvent)
{
obj["e"+type+fn] = fn;
obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
obj.attachEvent( "on"+type, obj[type+fn] );
}
},
removeEvent: function( obj, type, fn ) {
if (obj.removeEventListener)
obj.removeEventListener( type, fn, false );
else if (obj.detachEvent)
{
obj.detachEvent( "on"+type, obj[type+fn] );
obj[type+fn] = null;
obj["e"+type+fn] = null;
}
}
};
OL.addEvent(window, 'load', OL.init);