$(function(){ var map; function initialize() { var basepath = (typeof basepath !== 'undefined') ? basepath : $("base").attr("href"); var o = { singular : (typeof singular !== 'undefined') ? singular : true, draggable : (typeof draggable !== 'undefined') ? draggable : false, query : (typeof query !== 'undefined') ? query : false, pathDataProperty : (typeof pathDataProperty !== 'undefined') ? pathDataProperty : basepath+'json/', maxZoomLevel : 16, icon : { path : basepath+'assets/img/', size : new google.maps.Size(34,39), shadowsize : new google.maps.Size(34,39) } }; o.defaultLatitude = (typeof defaultLatitude !== 'undefined') ? defaultLatitude : 0.0, o.defaultLongitude = (typeof defaultLongitude !== 'undefined') ? defaultLongitude : 0.0, o.myLatlng = new google.maps.LatLng(o.defaultLatitude, o.defaultLongitude); o.zoomLevel = (typeof zoomLevel !== 'undefined' ? zoomLevel : (o.singular && o.query ? 15 : 11)); o.icon.shadow = new google.maps.MarkerImage('http://maps.gstatic.com/intl/en_us/mapfiles/markers/marker_sprite.png', o.icon.shadowsize, new google.maps.Point(0,0), new google.maps.Point(11,17)); o.icon.main = { icon : new google.maps.MarkerImage(o.icon.path+'google-map-marker.png', o.icon.size), shadow : o.icon.shadow }; o.icon.other = { icon : new google.maps.MarkerImage(o.icon.path+'google-map-marker-other.png', o.icon.size), shadow : o.icon.shadow }; o.markers = {}; function createMarker(data, point, icon) { var marker = new google.maps.Marker({ position: point, map: map, title: (data) ? data.title : '', icon: icon.icon, optimized: ! (! o.draggable && data), animation: google.maps.Animation.DROP, draggable: o.draggable }); if (! o.draggable && data) { google.maps.event.addListener(marker, 'click', function() { infowindow.setContent('
'); infowindow.open(map, marker); }); } google.maps.event.addListener(marker, 'dragend', function(e) { var newlat = e.latLng.lat().toFixed(4); var newlng = e.latLng.lng().toFixed(4); $('input[name="latitude"]').val(newlat); $('input[name="longitude"]').val(newlng); }); if (o.singular && o.draggable) { $('input[name="latitude"], input[name="longitude"]').blur(function(){ var newlat = $('input[name="latitude"]').val(); var newlng = $('input[name="longitude"]').val(); if (! newlat && ! newlng) { newlat = o.defaultLatitude; newlng = o.defaultLongitude; } var newlatlng = new google.maps.LatLng (newlat, newlng); marker.setPosition (newlatlng); map.setCenter (newlatlng); }); } if (data) { var id = 'gpin' + data.id; o.markers[id] = marker; } return marker; } function moveTheCenter() { map.setCenter(o.myLatlng); } function place_markers_singular(d) { if (d == false) { moveTheCenter(d); } else { //for (var i in d) { var point = new google.maps.LatLng(d.latitude, d.longitude); var icon = o.icon.main; var marker = createMarker(d, point, icon); map.setCenter(point); //} } } function place_markers_multiple(d) { if (d == false) { moveTheCenter(d); // force zoom out if no data map.setZoom(7); } else { var bounds = new google.maps.LatLngBounds(); for (var i in d) { var point = new google.maps.LatLng(d[i].latitude, d[i].longitude); var icon = o.icon.other; var marker = createMarker(d[i], point, icon); bounds.extend(point); } map.fitBounds(bounds); var listener = google.maps.event.addListener(map, 'idle', function() { if (map.getZoom() > 14) { map.setZoom(14); } google.maps.event.removeListener(listener); }); if (o.markers != false) { $('div.searchresult') .mouseenter(function(){ var pin_id = $(this).data('pin_id'); if (typeof o.markers[pin_id] != 'undefined') { o.markers[pin_id].setValues({icon : o.icon.main.icon}); } }) .mouseleave(function(){ var pin_id = $(this).data('pin_id'); if (typeof o.markers[pin_id] != 'undefined') { o.markers[pin_id].setValues({icon : o.icon.other.icon}); } }) ; } } } var mapOptions = { zoom: o.zoomLevel, panControl: false, scrollwheel: false, center: o.myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP }; if (o.draggable) { mapOptions.streetViewControl = false; } map = new google.maps.Map(document.getElementById('gmap'), mapOptions); var infowindow = new google.maps.InfoWindow(); if (o.singular) { if (o.query) { // Is the query in JSON format and therefore already supplied to us? var d = JSON.parse(o.query); if (d) { place_markers_singular(d); } else { // Retrieve data via the json API /*$.get(o.pathDataProperty+'get_property/'+o.query, function(d){ place_markers_singular(d); }, 'json');*/ } } else { if (o.draggable) { // Creating a property var point = o.myLatlng; var icon = o.icon.main; var marker = createMarker(false, point, icon); map.setCenter(point); } else { // Show location of company offices var point = o.myLatlng; var icon = o.icon.main; var marker = createMarker(false, point, icon); map.setCenter(point); } } } else { // Is the query in JSON format and therefore already supplied to us? var d = JSON.parse(o.query); if (d) { place_markers_multiple(d); } else { var query_url = o.pathDataProperty + o.query; $.get(query_url, function(d){ place_markers_multiple(d); }, 'json'); } } } $('.map-view').click(function(){ if ($('#gmap').html() == ''){ initialize(); } }); });