var rex_xform_geomap = function(loaded_options) { var self = this; self.options = { div_id: "rex-googlemap", lat: 51.133333, lng: 10.416667, zoom: 5, page_size: 50, position: 0, dataUrl: "", dataUrlBounds: "", fulltext: 0, fulltext_height: 50, sidebar_view: "###id###", splitkey: "rex_geo", page_loading: "

loading ...

", marker_icon_normal: "", marker_icon_active: "", marker_icon_jump: "" }; if (loaded_options) { self.options = jQuery.extend(self.options, loaded_options); } self.map = null; self.marker = new Array(); self.data = null; self.page = 0; self.infoWindow = new google.maps.InfoWindow({ maxWidth: 400 }); self.initialize = function() { self.options.map_id = self.options.div_id+"-map"; self.options.sidebar_id = self.options.div_id+"-sidebar"; self.options.search_id = self.options.div_id+"-search"; self.initDivs(); var myLatlng = new google.maps.LatLng(self.options.lat, self.options.lng); var myOptions = { zoom: self.options.zoom, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP } self.map = new google.maps.Map(document.getElementById(self.options.map_id), myOptions); self.clear(); self.getData(); google.maps.event.addListener(self.map, 'dragend', self.refresh); google.maps.event.addListener(self.map, 'resize', self.refresh); google.maps.event.addListener(self.map, 'zoom_changed', self.refresh); google.maps.event.addListener(self.map, 'center_changed', function() { window.setTimeout(function() { self.refresh(1); }, 1000); }); if(self.options.fulltext == 1) { jQuery("#"+self.options.search_id+" a").bind("click", self.refresh ); jQuery("#"+self.options.search_id+" input").keyup(function(event){ if(event.keyCode == 13){ jQuery("#"+self.options.search_id+" a").click(); } }); jQuery("#"+self.options.search_id+" a.resetMap").bind("click", self.resetMap ); } } self.initDivs = function() { jQuery("#"+self.options.div_id).addClass("rex-geo"); self.options.all_width = parseInt(jQuery("#"+self.options.div_id).width()); self.options.all_height = parseInt(jQuery("#"+self.options.div_id).height()); self.options.map_width = parseInt(self.options.all_width / 3) * 2; self.options.map_height = self.options.all_height; self.options.sidebar_width = parseInt(self.options.all_width / 2); self.options.sidebar_height = self.options.all_height; if(self.options.fulltext == 1) { jQuery('').appendTo("#"+self.options.div_id); jQuery("#"+self.options.search_id).css("width",self.options.map_width); jQuery("#"+self.options.search_id).css("height",self.options.fulltext_height); self.options.map_height = self.options.all_height-self.options.fulltext_height; self.options.sidebar_height = self.options.all_height; } jQuery('
' + self.options.page_loading + '
').appendTo("#"+self.options.div_id); jQuery('
' + self.options.page_loading + '
').appendTo("#"+self.options.div_id); jQuery('
').appendTo("#"+self.options.div_id); jQuery("#"+self.options.sidebar_id).css("width",300); jQuery("#"+self.options.sidebar_id).css("height",600); jQuery("#"+self.options.sidebar_id).css("overflow","auto"); jQuery("#"+self.options.sidebar_id).css("float","left"); jQuery("#"+self.options.sidebar_id).css("display","block"); jQuery("#"+self.options.map_id).css("width",self.options.map_width); jQuery("#"+self.options.map_id).css("height",600); jQuery("#"+self.options.map_id).css("float","right"); jQuery("#"+self.options.map_id).css("display","block"); } self.getData = function() { search_text = ""; if(self.options.fulltext == 1) { search_text = "&geo_search_text="+encodeURI(jQuery("#"+self.options.search_id+" input").val()); } var currentTime = new Date(); jQuery('#'+self.options.sidebar_id).html(self.options.page_loading); self.clear(); jQuery.ajax({ type: "GET", url: self.options.dataUrl+self.options.dataUrlBounds+search_text+"&geo_search_page_size="+self.options.page_size+"&geo_search_page="+self.page+"&nocache="+currentTime.getTime(), async: true, dataType: "json", cache: true, success: function(Result) { self.data = Result; self.addMarkers(Result); }, error: function() { alert("error:"+self.options.dataUrl); } }); }; self.getNextData = function() { self.page = self.page + 1; self.getData(); } self.getPrevData = function() { if(self.page > 0) { self.page = self.page - 1; self.getData(); } } self.addMarkers = function(markers_data) { self.data = markers_data; imax = self.data.length; if(imax > self.options.page_size) imax = self.options.page_size; for (var i = 0; i < imax; ++i) { self.marker[i] = new Array(); self.marker[i]["id"] = self.options.div_id + self.options.splitkey + i; self.marker[i]["map"] = self.addMarker(self.data[i]); self.marker[i]["map"].rex_geo_id = i; self.marker[i]["sidebar"] = self.addSidebar(self.data[i]); self.marker[i]["infowindow"] = self.addInfowindow(self.data[i]); google.maps.event.addListener(self.marker[i]["map"], "click", self.showMarkerInfo ); google.maps.event.addListener(self.marker[i]["map"], "mouseover", self.markerMouseOver ); google.maps.event.addListener(self.marker[i]["map"], "mouseout", self.markerMouseOut ); } self.setSidebar(); }; self.addMarker = function(data_marker) { var myLatlng = new google.maps.LatLng(data_marker.lat, data_marker.lng); return new google.maps.Marker({ position: myLatlng, map: self.map, icon: self.options.marker_icon_normal }); }; self.showMarkerInfo = function(e) { id = this.rex_geo_id; self.infoWindow.setContent('
' + self.marker[id]["infowindow"] +'
'); self.infoWindow.open(self.map, self.marker[id]["map"]); }; self.markerMouseOver = function(e) { id = this.rex_geo_id; jQuery("#"+self.marker[id]["id"]).addClass("rex-geo-side-active"); self.marker[id]["map"].setIcon(self.options.marker_icon_active); } self.markerMouseOut = function(e) { id = this.rex_geo_id; jQuery("#"+self.marker[id]["id"]).removeClass("rex-geo-side-active"); self.marker[id]["map"].setIcon(self.options.marker_icon_normal); } self.sidebarMouseOver = function(e) { id_split = this.id.split(self.options.splitkey); id = id_split[1]; self.marker[id]["map"].setAnimation(google.maps.Animation.BOUNCE); jQuery("#"+self.marker[id]["id"]).addClass("rex-geo-side-active"); self.marker[id]["map"].setIcon(self.options.marker_icon_active); } self.sidebarMouseOut = function(e) { id_split = this.id.split(self.options.splitkey); id = id_split[1]; self.marker[id]["map"].setAnimation(null); jQuery("#"+self.marker[id]["id"]).removeClass("rex-geo-side-active"); self.marker[id]["map"].setIcon(self.options.marker_icon_normal); } self.addSidebar = function(data_sidebar) { r = self.options.sidebar_view; jQuery.each(data_sidebar, function(index, value) { r = r.split("###"+index+"###").join(value); }); return r; }; self.addInfowindow = function(data_sidebar) { r = self.options.sidebar_view; jQuery.each(data_sidebar, function(index, value) { r = r.split("###"+index+"###").join(value); }); return r; }; self.clear = function() { for (var i = 0; i < self.marker.length; ++i) { google.maps.event.addListener(self.marker[i]["map"], "click", function(){} ); self.marker[i]["map"].setMap(null); } self.marker = new Array(); }; self.refresh = function(t=0) { var bounds = self.map.getBounds(); var northEast = bounds.getNorthEast(); var southWest = bounds.getSouthWest(); var top = northEast.lat(), right = northEast.lng(), bottom = southWest.lat(), left = southWest.lng(); self.options.dataUrlBounds = "&geo_bounds_top="+top+ "&geo_bounds_right="+right+ "&geo_bounds_bottom="+bottom+ "&geo_bounds_left="+left; self.page = 0; self.getData(); }; self.focusMarker = function(e) { id_split = this.id.split(self.options.splitkey); id = id_split[1]; var data_marker = self.data[id]; var myLatlng = new google.maps.LatLng(data_marker.lat, data_marker.lng); self.map.setCenter(myLatlng); self.map.setZoom(15); } self.resetMap = function(){ var myLatlng = new google.maps.LatLng(self.options.lat, self.options.lng); self.map.setZoom(self.options.zoom); self.map.setCenter(myLatlng); self.refresh; } self.setSidebar = function() { self.sidebar = ""; if(self.page > 0) { //self.sidebar += '
  • vorherige Treffer
  • '; } for (var i = 0; i < self.marker.length; ++i) { self.sidebar += '
  • '+self.marker[i]["sidebar"]+'
  • '; } if(self.marker.length == 0){ //self.sidebar += '
  • Leider wurde kein Eintrag passend zu Ihrer Eingabe oder in diesem Kartenausschnitt gefunden. Reduzieren Sie bei Ihrer Suche über PLZ die Anzahl der Stellen oder wählen Sie einen anderen Kartenausschnitt.
  • '; self.resetMap(); } if(self.data.length > self.options.page_size) { //self.sidebar += '
  • weitere Treffer
  • '; } jQuery("#"+self.options.sidebar_id).html(""); if(self.page > 0) { jQuery("#prev-"+self.options.sidebar_id).bind("click", i, self.getPrevData ); } if(self.data.length > self.options.page_size) { jQuery("#next-"+self.options.sidebar_id).bind("click", self, self.getNextData ); } for (var i = 0; i < self.marker.length; ++i) { jQuery("#"+self.marker[i]["id"]).bind("mouseover", i, self.sidebarMouseOver ); jQuery("#"+self.marker[i]["id"]).bind("mouseout", i, self.sidebarMouseOut ); jQuery("#"+self.marker[i]["id"]).bind("click", i, self.focusMarker ); } }; };