/*
 *  MW GoogleMaps, (c)2010 Markus von der Wehd, mw@inpublica.de
 */
var MWGoogleMaps={options:{},kmlItem:null,poiList:[],setupOverlays:[],defaults:{mapCenterLat:51.522,mapCenterLng:10.437,mapZoom:6,mapTypeId:google.maps.MapTypeId.TERRAIN,mapConsoleLog:false,mapAutoCenterZoom:false},defaultZoom:6,defaultLat:51.522,defaultLng:10.437,defaultMapTypeId:google.maps.MapTypeId.TERRAIN,mapConsoleLog:false,mapAutoCenterZoom:false,mapDivId:"map",poiMarkerIconTemplate:"marker_#.png",poiMarkerShadowTemplate:"marker_#_shadow.png",poiMarkerImgPath:"fileadmin/template/img/googlemaps_marker/",gmMap:null,gmInfoWindow:null,mwKmlLayer:null,defaultCircleOptions:{fillColor:"#FFFFCC",fillOpacity:0.25,strokeColor:"#FFFFAA",strokeOpacity:0.5},mwOverlays:[],mwOverlayActive:null,mwPois:[],initMap:function(){var g=this;this.getUserSetup();var m=document.getElementById(this.mapDivId);var b={zoom:this.defaults.mapZoom,center:new google.maps.LatLng(this.defaults.mapCenterLat,this.defaults.mapCenterLng),mapTypeId:this.defaults.mapTypeId,disableDefaultUI:true,navigationControl:true,navigationControlOptions:{style:google.maps.NavigationControlStyle.DEFAULT},mapTypeControl:true,mapTypeControlOptions:{style:google.maps.MapTypeControlStyle.DROPDOWN_MENU},scaleControl:true,scrollwheel:false};this.gmMap=new google.maps.Map(m,b);this.gmInfoWindow=new google.maps.InfoWindow({maxWidth:220});google.maps.event.addListener(this.gmMap,"click",function(i){g.gmInfoWindow.close()});if(this.defaults.mapConsoleLog){google.maps.event.addListener(this.gmMap,"zoom_changed",function(){g.showConsoleMapInfo()});google.maps.event.addListener(this.gmMap,"dragend",function(){g.showConsoleMapInfo()})}if(!!this.kmlItem){var n={map:this.gmMap,preserveViewport:true,suppressInfoWindows:true};var f=new google.maps.KmlLayer(this.kmlItem.url,n);this.mwKmlLayer={id:this.kmlItem.id,kmlLayer:f}}var c,e,d,j,a,k;if(this.setupOverlays.length>0){c=this.setupOverlays.length;for(e=0;e<c;e+=1){d=this.setupOverlays[e];switch(d.type){case"CIRCLE":k=this.createCircleOverlay(d);break;case"CAPTION":k=this.createCaptionOverlay(d);break;default:throw"Wrong overlay type: '"+d.type+"' in MWGoogleMaps.setupOverlays at index: '"+e.toString(10)+"'!"}this.mwOverlays.push(k)}}if(this.poiList.length>0){c=this.poiList.length;for(e=0;e<c;e+=1){a=this.poiList[e];j=new google.maps.LatLng(a.lat,a.lng);this.createPoiMarker(a.id,a.type,j,a.title,a.info)}}if(this.defaults.mapAutoCenterZoom){var h=new google.maps.LatLngBounds();c=this.mwOverlays.length;for(e=0;e<c;e+=1){h.union(this.mwOverlays[e].overlay.getBounds())}c=this.poiList.length;for(e=0;e<c;e+=1){h.extend(this.poiList[e].marker.getPosition())}this.gmMap.fitBounds(h)}google.maps.event.addListener(this.gmInfoWindow,"domready",function(){jQuery(".lightbox").lightbox()})},getUserSetup:function(){for(var a in this.options){if(this.options.hasOwnProperty(a)&&this.defaults.hasOwnProperty(a)){if(typeof this.options[a]===typeof this.defaults[a]){this.defaults[a]=this.options[a]}}}},createPoiMarker:function(c,n,o,q,e,l){var f=this.poiMarkerImgPath+this.poiMarkerIconTemplate.replace(/#/,n.toString(10));var j=new google.maps.MarkerImage(f,new google.maps.Size(20,34),new google.maps.Point(0,0),new google.maps.Point(19,33));var g=this.poiMarkerImgPath+this.poiMarkerShadowTemplate.replace(/#/,n.toString(10));var b=new google.maps.MarkerImage(g,new google.maps.Size(37,34),new google.maps.Point(0,0),new google.maps.Point(19,33));var m={coord:[1,1,1,20,10,20,20,34,20,1],type:"poly"};var p={position:o,map:this.gmMap,title:q,icon:j,shadow:b,shape:m};var i=new google.maps.Marker(p);var h=this.gmInfoWindow;var a=this.gmMap;var k='<div id="googlemap-info">'+e+"</div>";google.maps.event.addListener(i,"click",function(r){h.close();h.setOptions({maxWidth:220,content:k});h.open(a,this)});var d={id:c,type:n,marker:i};this.mwPois.push(d)},createCircleOverlay:function(d){var f=new google.maps.LatLng(d.lat,d.lng);var a=this.defaultCircleOptions;var g=(!!d.link)?d.link:"";var c=!!g;var h={map:this.gmMap,center:f,radius:d.radius,fillColor:a.fillColor,fillOpacity:a.fillOpacity,strokeColor:a.strokeColor,strokeOpacity:a.strokeOpacity,clickable:c};var b=new google.maps.Circle(h);var i={type:d.type,id:d.id,title:d.title,overlay:b,link:g};if(c){var e=this;google.maps.event.addListener(b,"click",function(){e.mapOverlayClicked(i)})}return i},createCaptionOverlay:function(c){var g=new google.maps.LatLng(c.lat,c.lng);var f=(!!c.link)?c.link:"";var b=!!f;var a=new MWCaptionOverlay(c.title,g,this.gmMap,c.align);var d={type:c.type,id:c.id,title:c.title,overlay:a,link:f};if(b){var e=this;google.maps.event.addListener(a,"click",function(){e.mapOverlayClicked(d)})}return d},mapOverlayClicked:function(a){document.location.href=a.link},showConsoleMapInfo:function(){var d=this.gmMap.getCenter();var b=this.gmMap.getZoom();var a="Map Zoom: "+b.toString()+"\n";a+="Map Lat, Lng:  "+d.lat().toString()+", "+d.lng().toString()+"\n";console.log(a)},distanceBetweenPoints:function(j,h){if(!j||!h){return 0}var g=6371;var e=(h.lat()-j.lat())*Math.PI/180;var f=(h.lng()-j.lng())*Math.PI/180;var b=Math.sin(e/2)*Math.sin(e/2)+Math.cos(j.lat()*Math.PI/180)*Math.cos(h.lat()*Math.PI/180)*Math.sin(f/2)*Math.sin(f/2);var k=2*Math.atan2(Math.sqrt(b),Math.sqrt(1-b));var i=g*k;return i}};function MWCaptionOverlay(a,d,b,c){this.div_=null;this.latlng_=d;this.caption_=a;this.alignment_=c||"TL";this.offsetX_=0;this.offsetY_=0;this.setMap(b)}MWCaptionOverlay.prototype=new google.maps.OverlayView();MWCaptionOverlay.prototype.onAdd=function(){var c=this;var d=this.div_;if(!d){d=this.div_=document.createElement("DIV");d.style.border="1px solid #FFFFFF";d.style.color="#FFFFFF";d.style.backgroundColor="#729B11";d.style.fontSize="12px";d.style.position="absolute";d.style.padding="2px 6px 2px 6px";d.style.cursor="pointer";d.style.whiteSpace="nowrap";var a=document.createTextNode(this.caption_);d.appendChild(a);google.maps.event.addDomListener(d,"click",function(e){google.maps.event.trigger(c,"click")});var b=this.getPanes();b.overlayImage.appendChild(d)}};MWCaptionOverlay.prototype.draw=function(){var d=this.div_;var a=this.getProjection().fromLatLngToDivPixel(this.latlng_);if(a){var c=a.x+this.offsetX_;var b=a.y+this.offsetY_;switch(this.alignment_){case"TR":c-=d.offsetWidth;break;case"BL":b-=d.offsetHeight;break;case"BR":c-=d.offsetWidth;b-=d.offsetHeight;break}d.style.left=c+"px";d.style.top=b+"px"}};MWCaptionOverlay.prototype.remove=function(){if(this.div_){this.div_.parentNode.removeChild(this.div_);this.div_=null}};MWCaptionOverlay.prototype.getPosition=function(){return this.latlng_};MWCaptionOverlay.prototype.setPosition=function(a){this.latlng_=a;this.draw()};MWCaptionOverlay.prototype.getAlignment=function(){return this.alignment_};MWCaptionOverlay.prototype.setAlignment=function(a){if(a.search(/^(TL|TR|BL|BR)$/)!==0){return}this.alignment_=a;this.draw()};MWCaptionOverlay.prototype.getBounds=function(){var d=this.getProjection();var a=this.div_.offsetLeft,i=this.div_.offsetTop,b=this.div_.offsetWidth,f=this.div_.offsetHeight;var e=d.fromDivPixelToLatLng(new google.maps.Point(a,i+f));var c=d.fromDivPixelToLatLng(new google.maps.Point(a+b,i));var g=new google.maps.LatLngBounds(e,c);return g};jQuery(document).ready(function(){MWGoogleMaps.initMap()});
