
var zoomToFocusedLayer=true;var startLoc=null;var mapHeights={};var mapSize='regular';var showMapTabs=true;var showMapLegend=true;var eventMapInitialized=false;var doZooming=false;var eventMapElem;var eventmap;var eventmapMaxZoom=17;var eventmapZoom;var eventmapCenter;var eventicons=[];var eventbounds=null;var boundsWithoutMap=null;var iconprefix=null;var legendicons=[];var legendicons_inactive=[];var baseIcon;var mapTypes;var routePlanning;var currentMapType;var defaultPoiContentProvider={};var eventStartTab='event';var eventMapActive=false;var centerJSON=null;var eventStartZoomLevel=5;var layersJSON;var eventMapInfoDialogType;var additionalIconsJSON;var eventStartLayer;function showEventMapbox(){App.findBy('.switchTab').click(function(){clearAllLayers();switchCategory($(this));});if(eventMapActive){App.findBy('#eventMapDiv').slideDown("normal");}}
function initForHotelMap(){eventMapElem=App.findBy('#eventMap');iconprefix=ctx+"/images/mapicons/";try{MapToolTip.init();}catch(e){debugError(e);}
centerJSON=fromModel('centerJSON');eventStartZoomLevel=fromModel('eventStartZoomLevel');layersJSON=fromModel('layersJSON');showEventMap();}
function initEventMap(){eventMapElem=App.findBy('#eventMap');iconprefix=ctx+"/images/mapicons/";try{MapToolTip.init();}catch(e){debugError(e);}
eventStartTab=fromModel('eventStartTab');eventMapActive=fromModel('eventMapActive');centerJSON=fromModel('centerJSON');eventStartZoomLevel=fromModel('eventStartZoomLevel');layersJSON=fromModel('layersJSON');eventMapInfoDialogType=fromModel('eventMapInfoDialogType');additionalIconsJSON=fromModel('additionalIconsJSON');eventStartLayer=fromModel('eventStartLayer');debug('initEventMap - '+eventStartTab);var elemId='eventMap'
App.findBy('#'+elemId+'Switcher_on, .MapSwitcher_on').click(function(){showEventMap();});App.findBy('#'+elemId+'Switcher_off').click(function(){hideEventMap();});App.findBy('#'+elemId+'SizeSwitcher_medium').click(function(){changeMapSize('medium');});App.findBy('#'+elemId+'SizeSwitcher_big').click(function(){changeMapSize('big');});registerLoadingListener();if(eventMapActive){showEventMap();}
changeMapSize(mapSize);}
function registerLoadingListener(){var layerLoadedFunction=function(){var allLoaded=true;for(var layername in layersJSON){if(layersJSON[layername].active){if(!layersJSON[layername].loaded){allLoaded=false;break;}else{}}}
if(allLoaded){trigger('allLayersLoaded',eventMapElem);}};eventMapElem.bind('layerLoaded',layerLoadedFunction);eventMapElem.bind('allLayersLoaded',function(){eventMapElem.unbind('layerLoaded',layerLoadedFunction);if(zoomToFocusedLayer){doZooming=true;var focusedLayer=getFocusedLayer();debug('all layers loaded - zooming layer: '+focusedLayer.name);if(eventStartTab&&App.findBy('.switchTab[name='+eventStartTab+']').length>0){switchCategory(App.findBy('.switchTab[name='+eventStartTab+']'));}
switchLayer(true,focusedLayer);if(eventStartLayer){switchLayer(true,layersJSON[eventStartLayer]);}}else{debug('zoomToFocusedLayer deactivated');}});debug('listeners registered!');}
function loadEventMap(){if(!eventMapInitialized){baseIcon=new GIcon();baseIcon.image=iconprefix+"map_info.png";baseIcon.iconSize=new GSize(24,24);baseIcon.iconAnchor=new GPoint(12,24);eventmapCenter=new GLatLng(centerJSON.lat,centerJSON.lng);eventmap=new GMap2(document.getElementById('eventMap'));eventmap.setMapType(G_HYBRID_MAP);mapTypes={map:G_NORMAL_MAP,normal:G_NORMAL_MAP,hybrid:G_HYBRID_MAP,satellite:G_SATELLITE_MAP,physical:G_PHYSICAL_MAP};setCenter(eventmapCenter,eventStartZoomLevel);eventbounds=new GLatLngBounds();eventbounds.extend(eventmapCenter);setMapControls(mapSize);if(mapSize!='small'){var hControl=new GHierarchicalMapTypeControl();hControl.addRelationship(G_SATELLITE_MAP,G_HYBRID_MAP,"Labels",true);eventmap.addControl(hControl);loadAdditionalIcons();}
loadEventLayers();eventMapInitialized=true;if(showMapTabs){App.findBy('#eventInfos').slideDown("slow");}
trigger('mapLoaded',eventMapElem);}}
function showEventMap(){debug('showEventMap');var elemId='#eventMap';$(elemId+'Div').slideDown("normal");$(elemId+'Div').show();$(elemId+'Switcher_on').hide();$(elemId+'Switcher_off').show();App.findBy('#roundboxeventMap h1.MapSwitcher_on').removeClass('cursor');setSessionVariable("eventMapActive","true");if(showMapLegend){App.findBy('#eventlegend').fadeIn("slow");}
if(showMapTabs){App.findBy('#eventInfos').slideDown("slow");}
loadEventMap();}
function getFocusedLayer(){var zoomingLayer=null;var firstLayer=null;for(var layername in layersJSON){if(firstLayer==null)
firstLayer=layersJSON[layername];if(layersJSON[layername].hasFocus){zoomingLayer=layersJSON[layername];}}
if(!zoomingLayer&&eventStartTab){zoomingLayer=layersJSON[eventStartTab];}
if(!zoomingLayer){zoomingLayer=firstLayer;}
return zoomingLayer;}
function changeMapSize(sizeKey){App.findBy('.mapSizeSwitch').hide();var newZoomLevel=eventmapZoom;if(sizeKey=='medium'){App.findBy('#eventMapSizeSwitcher_big').show();if(mapSize=='big')
newZoomLevel=(eventmapZoom<=1)?eventmapZoom:(eventmapZoom-1);}else if(sizeKey=='big'){App.findBy('#eventMapSizeSwitcher_medium').show();if(mapSize=='medium')
newZoomLevel=(eventmapZoom>=eventmapMaxZoom)?eventmapZoom:(eventmapZoom+1);}
newHeight=mapHeights[sizeKey];var mapContainer=App.findBy("#eventMap");mapContainer.animate({height:newHeight},700,'swing',function(){eventmap.checkResize();if(newZoomLevel){setCenter(eventmapCenter,newZoomLevel);}else{debug('No zoomlevel defined');}
var focusToLayerOnChangeMapSize=fromModel('focusToLayerOnChangeMapSize');if(typeof focusToLayerOnChangeMapSize!='undefined'&&focusToLayerOnChangeMapSize){setEventmapToBounds(getFocusedLayer());}else{debug('focusToLayerOnChangeMapSize: '+focusToLayerOnChangeMapSize);}
App.findBy('#mapSpinnerImageDiv').css('top',mapContainer[0].height/2-30);App.findBy('#mapSpinnerImageDiv').css('left',mapContainer[0].width/2-30);});mapSize=sizeKey;}
function setMapControls(mapSize){if(mapSize=='big'){eventmap.addControl(new GLargeMapControl());}else{eventmap.addControl(new GSmallMapControl());}}
function changeMapType(type){if(type!=currentMapType){var mapType=mapTypes[type?type:'map'];debug('change to MapType:'+type);eventmap.setMapType(mapType);currentMapType=type;}}
function showEventIcons(){for(var layername in layersJSON){if(layersJSON[layername]){var tooltip='';var currentLayer=layersJSON[layername];if(currentLayer.label){tooltip='onmouseover="showTooltip(\''+currentLayer.label+'\');" onmouseout="hideTooltip();"';}
legendicons[layername]=App.findBy('<span class="legendicon name_'+layername+' '+layersJSON[layername].category+'"></span>');if(currentLayer.iconName!='none'){legendicons[layername].append('<img '+tooltip+' src="'+iconprefix+'map_'+currentLayer.iconName+'_inaktiv.gif" />');}
legendicons[layername].appendTo('#eventicons');bindSwitchClick(layername,"active");legendicons_inactive[layername]=jQuery('<span class="legendicon inactive name_'+layername+' '+currentLayer.category+'"></span>');var legendIconName='map_'+currentLayer.iconName+'.png';if(currentLayer.iconName=='event'){legendIconName='map_eventlegend.gif';}
if(currentLayer.iconName!='none'){legendicons_inactive[layername].append('<img '+tooltip+' src="'+iconprefix+legendIconName+'" />');}
legendicons_inactive[layername].appendTo('#eventicons');legendicons_inactive[layername].hide();bindSwitchClick(layername,"inactive");if(currentLayer.status=='active'){switchLayer(true,layersJSON[layername]);}}}}
function addLayer(name){debug('Adding layer: '+name);var infos=layersJSON[name];infos.name=name;if(layersJSON[name].active){infos.status="active";}else{infos.status="inactive";}
if(!infos.center){infos.centerType='default';infos.center=new GLatLng(centerJSON.lat,centerJSON.lng);}else{infos.centerType='predefined';infos.center=new GLatLng(infos.center.lat,infos.center.lng);}
if(!infos.category){infos.category=name;}
if(!infos.label){infos.label=msg('tab.'+name+'.title');}
if(!infos.zoom){infos.zoom='tobounds';}
var iconName=infos.iconName;if(!iconName&&infos.icon){iconName=infos.icon;}else{if(infos.name=='route'){iconName='none'}}
infos.iconName=iconName?iconName:name;if(!infos.mapType){infos.mapType='normal';}
loadIcon(infos);if(!infos.type){if(infos.markerList){infos.type='local';}else{infos.type='xml';}}
if(infos.type=='xml'||infos.type=='edit'){var additionalParams='';if(startLoc){additionalParams="&startLat="+startLoc.lat+"&startLng="+startLoc.lng;}
infos.dataFile=ctx+"/maplayers/loadXMLData?layer="+name
+"&layoutTheme="+layoutTheme+additionalParams;}else if(infos.type=='poi'){if(!infos.cp){infos.cp=defaultPoiContentProvider[name]?defaultPoiContentProvider[name]:'ym';}
infos.dataFile=ctx+"/maplayers/loadFromExternalCP?layer="+name
+"&layoutTheme="+layoutTheme+"&cp="+infos.cp
+"&centerLat="+centerJSON.lat+"&icon="+infos.iconName
+"&zoom="+infos.zoom+"&centerLng="+centerJSON.lng;}else if(infos.type=='local'){}else{debugError("Layer type unknown. "+infos.type+" for layer <"+name+">");}
infos.icon=eventicons[name];infos.markers=[];infos.lines=[];infos.controls=[];layersJSON[name]=infos;}
function triggerLayerLoaded(layer){layer.loaded=true;trigger('layerLoaded_'+layer.name,eventMapElem);trigger('layerLoaded',eventMapElem);}
function loadIcon(infos){eventicons[infos.name]=new GIcon(baseIcon,iconprefix+"map_"+infos.iconName+".png");return eventicons[infos.name];}
function hideEventMap(){var elemId='#eventMap';$(elemId+'Div').slideUp("normal");$(elemId+'Switcher_off').hide();$(elemId+'Switcher_on').show();App.findBy('#roundboxeventMap h1.MapSwitcher_on').addClass('cursor');setSessionVariable("eventMapActive","false");}
function clearAllLayers(){for(var layername in layersJSON){if(layername!='event'){var layer=layersJSON[layername]
switchLayer(false,layer);}}}
function clearLayer(layer){for(var i=0;i<layer.markers.length;i++){eventmap.removeOverlay(layer.markers[i]);}
for(var j=0;j<layer.lines.length;j++){eventmap.removeOverlay(layer.lines[j]);}}
function hideAllMarkers(){for(var layername in layersJSON){if(layername!="indexOf"){switchLayer(false,layersJSON[layername]);}}}
function resetEventmap(layername){if(!layername){layername='event';}
showEventMap();switchLayer(true,layersJSON[layername]);}
function fetchXmlMarkers(layer){GDownloadUrl(layer.dataFile,function(data){try{var markerList=$.xml2json(data);var center=markerList.center;if(center){layer.zoom=center.zoom;if(!layer.zoom){layer.zoom='tobounds';}
if(layer.centerType=='default'){layer.center=new GLatLng(center.lat,center.lng);}}
var markers=markerList.markers?markerList.markers.marker:null;if(!markers&&markerList.marker){markers=markerList.marker;}
if(markers){markers=(markers.length>=1)?markers:[markers];for(var i=0;i<markers.length;i++){if(markers[i]){layer.markers[i]=createMarker(layer,markers[i]);eventmap.addOverlay(layer.markers[i]);}}}
var linestrings=markerList.LineString?markerList.LineString:[];linestrings=(linestrings.length>0)?linestrings:[linestrings];for(var i=0;i<linestrings.length;i++){var coordinates=linestrings[i].coordinates?linestrings[i].coordinates:''
var coorarray=coordinates.split(' ');var format=linestrings[i].format?linestrings[i].format:'latlng';var pts=[];if(format=='kml'){for(var j=0;j<coorarray.length;j++){if(coorarray[j]>''){pts.push(new GLatLng(coorarray[j].split(',')[1],coorarray[j].split(',')[0]));}}}else{for(var j=0;j<coorarray.length;j++){if(coorarray[j]>''){pts.push(new GLatLng(coorarray[j].split(',')[0],coorarray[j].split(',')[1]));}}}
var line=linestrings[i].line;var linecolor=line?(line.color?line.color:'#0000ff'):'#0000ff';var linewidth=line?(line.width?line.width:4):4;var lineopacity=line?(line.opacity?line.opacity:1):1;var filling=linestrings[i].filling;if(filling){var fillingcolor=filling.color?filling.color:'#0000ff';var fillingopacity=filling.opacity?filling.opacity:0.5;layer.lines[i]=new GPolygon(pts,linecolor,linewidth,lineopacity,fillingcolor,fillingopacity);}else{layer.lines[i]=new GPolyline(pts,linecolor,linewidth,lineopacity);}}
showLines(layer,true);if(doZooming){setEventmapToBounds(layer);}}catch(e){debugError("fetchXmlMarkers -> "+e);}
triggerLayerLoaded(layer);});}
function createHtmlInfo(markerJson){try{var html="<div class=\"htmltooltip\">";html+=addMarkerDescription(markerJson);html+=addImage(markerJson);html+=addImageGalleryLink(markerJson);html+=addLink(markerJson);html+=addRouteplan(markerJson);html+="</div>";return html;}catch(e){debugError("createHtmlInfo: "+e);}
return"";}
function addMarkerDescription(markerJson){try{var html="";var stars="";var hasImages=!isEmpty(markerJson.imageurl);if(markerJson.icon=='hotels'){for(var i=0;i<markerJson;i++){stars+="*";}}
html+="<h1>"+markerJson.title+stars+"</h1>";html+="<div class=\"description\" style=\""+(hasImages?"width:70%;":"width:100%;")
+"\">"
+trim(markerJson.description)+"</div>"
return html;}catch(e){debugError("addMarkerDescription: "+e);}
return"";}
function addLink(markerJson){try{if(markerJson.linktext){var linkPrefix=markerJson.linkPrefix?markerJson.linkPrefix:'';var linkTarget="target=\"_blank\"";var target=markerJson.linkTarget
if(target=='false'){linkTarget="";}else if(target){linkTarget="target=\""+target+"\"";}
var html="<br/><div class=\"link\"><a href=\""
+trim(linkPrefix)
+trim(markerJson.linkurl?markerJson.linkurl:'')
+"\" "+linkTarget+" >"+markerJson.linktext
+"</a></div><br/>";return html;}}catch(e){debugError("addLink: "+e);}
return"";}
function addRouteplan(markerJson){try{var hasRouteplan=markerJson.routePlan;var html="";if(hasRouteplan){var lat=markerJson.lat;var lng=markerJson.lng;html="<div class=\"routeplan\">"
+msg('label.routeplan.tohere')+"<br/>"
+"<form onsubmit=\"calcRoute("+lat+","+lng+", "
+"$(this).children('.routeStartLocation:first-child').val());return false;\">"
+"<input type='text' class='routeStartLocation'> "
+"<input type='submit' value='"
+msg('button.routeplan.tohere')+"'></form>"
+"<div id='calcPlanErrorMsg'></div></div>";}
return html;}catch(e){debugError("addRouteplan: "+e);}
return"";}
function removeRoute(){routePlanning.clear();App.findBy('#routePlanningRemoveRoute').hide();App.findBy('#routePlanningResultsDiv').hide();setCenter(eventmapCenter,eventmapZoom);eventbounds=boundsWithoutMap;}
function calcRoute(latB,lngB,startLocationA){debug('START : '+startLocationA);debug('DEST  : '+latB+','+lngB);if(!routePlanning){routePlanning=new GDirections(eventmap,App.findBy('#routePlanningResultsDiv')[0]);GEvent.addListener(routePlanning,"load",function(){var response=routePlanning.getStatus();if(response.code==200){var route=routePlanning.getRoute(0);boundsWithoutMap=extendByBounds(eventbounds);for(i=0;i<route.getNumSteps();i++){var stp=route.getStep(i);eventbounds.extend(stp.getLatLng());}
App.findBy('#calcPlanErrorMsg').hide();App.findBy('#routePlanningResultsDiv').show();App.findBy('#routePlanningRemoveRoute').show();}else{App.findBy('#calcPlanErrorMsg').html(msg('error.routplan.failed'));App.findBy('#calcPlanErrorMsg').show();debugError('route failed');}
setTimeout(function(){trigger('route_loaded',eventMapElem);},500);});}
routePlanning.load("from:"+startLocationA+" to:"+latB+","+lngB,{getPolyline:true,getSteps:true});}
function addPrint(markerJson){return"";}
function addImage(markerJson){var html="";var imageurl=markerJson.imageurl;if(imageurl){var imageURLPrefix=markerJson.imageURLPrefix;var urlprefix=imageURLPrefix?imageURLPrefix:'';var url=trim(urlprefix)+trim(imageurl);if(url.substr(0,7)!='http://'){url=ctx+imageurl;}
html+="<div class=\"tooltipImage\"><img width=60 src=\""
+url+"\" /></div>";}
return html;}
function addImageGalleryLink(markerJson){var html="";var galerie=markerJson.galerie;if(galerie){var galname=galerie?galerie.name:"xxx";var galtext=galerie?galerie.linktext:"Bilder";html+="<div class=\"cursor galerieLink\" onclick=\"App.findBy('.galerieLinks a[rel="
+galname+"]:first').click();\">"+galtext+"</div>";}
return html}
function getLatLng(markerJson){var latlng=new GLatLng(markerJson.lat,markerJson.lng);return latlng;}
function createMarker(layer,markerJson,raumicon){var icon=null;if(raumicon){icon=raumicon;}else{var iconName=markerJson.icon;if(!iconName){iconName=layer.name;}
var icon=eventicons[iconName];if(!icon){icon=loadIcon({name:iconName,iconName:iconName});}}
if(icon){var markerLink=markerJson.markerLink;var html=createHtmlInfo(markerJson);return configureMarker(getLatLng(markerJson),icon,html,markerLink);}}
function configureMarker(latlng,icon,html,markerLink){var marker=new GMarker(latlng,icon);eventbounds.extend(latlng);if(eventMapInfoDialogType=='google'){GEvent.addListener(marker,'click',function(){eventmap.openInfoWindow(latlng,html);});}else{GEvent.addListener(marker,'mouseover',function(){debug("MapToolTip.show: "+html);MapToolTip.show(html);});GEvent.addListener(marker,'mouseout',MapToolTip.hide);if(markerLink){GEvent.addListener(marker,'click',function(){debug(markerLink);jumpTo(markerLink);});}}
return marker;}
function getCoords(address){geocoder=new GClientGeocoder();if(geocoder){geocoder.getLatLng(address,function(point){if(!point){try{debug(address+" not found");}catch(e){}
return false;}else{try{debug('Neue Adresse geokodiert: '+address+'('
+point.lat()+', '+point.lng()+')');}catch(e){}}});}}
function switchLayer(checked,layer){var boxlink=document.getElementById("boxlink");var layername=layer.name;if(layer.type=="object"){if(checked){eventmap.addOverlay(layer.obj);}
else{eventmap.removeOverlay(layer.obj);}}else{if(checked){legendicons[layername].hide();legendicons_inactive[layername].show();changeMapType(layer.mapType);var shouldLoad=(layer.markers.length==0)||fromModel('mapEditMode');if(shouldLoad){clearLayer(layer);fetchMarkers(layer);}else{for(var i=0;i<layer.markers.length;i++){layer.markers[i].show();eventbounds.extend(layer.markers[i].getPoint());}
showLines(layer);setEventmapToBounds(layer);}
layer.status='active';}else{if(legendicons[layername]){legendicons[layername].show();legendicons_inactive[layername].hide();for(var i=0;i<layer.markers.length;i++){layer.markers[i].hide();}
hideLines(layer);hideControls(layer);layer.status='inactive';}else{debug("Legendicon for layer: "+layername+" not found.");}}}}
function switchCategory(elem){var category=elem.attr('name');debug('switchCategory to '+category);var selector='#eventicons .legendicon.'+category;selector+=':not(.inactive)';$(selector).click();switchTab(category);}
function switchTab(category){if(showMapTabs){App.findBy('#tabswitches .switchTab').removeClass("active");App.findBy('#tabswitches .switchTab[name='+category+']').addClass("active");App.findBy('#eventInfos div.tab').hide();App.findBy('#eventInfos div[id=tab_'+category+']').show();App.findBy('#eventInfos div[id=tab_'+category+']').trigger('tabSwitched');setSessionVariable("activeTab",category);}}
function fetchMarkers(layer){if(layer.type=="edit"){fetchEditButtons(layer);}else if(layer.type=="local"){var markers=layer.markerList;if(markers){for(var i=0;i<markers.length;i++){layer.markers[i]=createMarker(layer,markers[i]);eventmap.addOverlay(layer.markers[i]);}}
if(layer.name=="route"){calcRoute(layer.end.lat,layer.end.lng,layer.start.city);eventMapElem.bind('route_loaded',function(){triggerLayerLoaded(layer);});}else{triggerLayerLoaded(layer);}}else{fetchXmlMarkers(layer);}}
function bindSwitchClick(layername,icontype){var layer=layersJSON[layername];if(layer.onclick){if(icontype=="active"){legendicons[layername].click(layer.onclick);}else{legendicons_inactive[layername].click(layer.onclick);}}else{if(icontype=="active"){legendicons[layername].click(function(){switchLayer(true,layersJSON[layername]);});}else{legendicons_inactive[layername].click(function(){switchLayer(false,layersJSON[layername]);});}}}
function setEventmapToBounds(layer){if(layer){var logtxt='setEventmapToBounds '+layer.name+" - "+layer.zoom;var zoom=null;var center=null;if(layer.zoom=='tobounds'){var boundsZoom=eventmap.getBoundsZoomLevel(eventbounds);zoom=Math.min(boundsZoom,eventmapMaxZoom);center=eventbounds.getCenter();logtxt+=' to '+boundsZoom+'(bounds)';}else{center=layer.center;zoom=parseInt(layer.zoom?layer.zoom:eventmapMaxZoom);logtxt+=' to '+zoom+'(layer)'}
debug(logtxt);if(zoom!=0){setCenter(center,zoom);eventmapZoom=zoom;}else{debug("Something wrong. Zoomlevel is 0.");}}}
function showLines(layer,initial){for(var i=0;i<layer.lines.length;i++){if(initial){eventmap.addOverlay(layer.lines[i]);}else{layer.lines[i].show();}}}
function hideLines(layer){for(var i=0;i<layer.lines.length;i++){layer.lines[i].hide();}}
function hideControls(layer){for(var i=0;i<layer.controls.length;i++){layer.controls[i].unbind();layer.controls[i].remove();clearDraggableMarkers();GEvent.clearListeners(eventmap,"click");}}
function loadEventLayers(){if(!fromModel('mapEditMode')){delete layersJSON['edit']}
for(layerName in layersJSON){addLayer(layerName);}
showEventIcons();}
function loadAdditionalIcons(){for(var iconname in additionalIconsJSON){eventicons[iconname]=new GIcon(baseIcon,iconprefix+"map_"+iconname+".png");}}
function createArrayPointsFromMarkers(markersArray){var pointsArray=[];for(var i=0;i<markersArray.length;i++){pointsArray.push(markersArray[i].getLatLng());}
return pointsArray;}
function setCenter(center,zoom){debug('setCenter('+center+', '+zoom+')');eventmap.setCenter(center,zoom);}