var map; var geocoder; var marker; var markers = new Array(); // Czech Republic //var basePoint = new google.maps.LatLng(49.74799973900054, 15.38134765625); //var baseZoom = 7; //var maxAutoZoom = 15; //Praha 4, Praha 10 main page var baseNElat = 50.113529792565; var baseNElng = 14.744673448797; var baseSWlat = 50.003322203415; var baseSWlng = 14.407187181707; var gpsFromMap = false; // Marker Options var markerOptions = new Object(); markerOptions.clickable = true; markerOptions.visible = true; $(document).ready(function() { initMap(); bindEvents(); }); function bindEvents() { google.maps.event.addListener(map, 'dragend', function() { updateResults(); }); google.maps.event.addListener(map, 'zoom_changed', function() { setTimeout(function() { updateResults(); }, 500); }); } function initMap() { geocoder = new google.maps.Geocoder(); map = amap.initCanvas('mapCanvas', null, true); markerOptions.map = map; // zamerit na gps z formulare NElat = $("#NElat").val(); NElng = $("#NElng").val(); SWlat = $("#SWlat").val(); SWlng = $("#SWlng").val(); if(NElat && NElng && SWlat && SWlng) { NE = amap.createPoint(NElat, NElng); SW = amap.createPoint(SWlat, SWlng); bounds = new google.maps.LatLngBounds(SW, NE); amap.setViewport(bounds); } else { NE = amap.createPoint(baseNElat, baseNElng); SW = amap.createPoint(baseSWlat, baseSWlng); bounds = new google.maps.LatLngBounds(SW, NE); amap.setViewport(bounds); } // google.maps.event.addListenerOnce(map, 'tilesloaded', function() { // updateResults(); // }); } function updateResults() { amap.updateElements(); var form = $("#search-form form"); var url = '/hledani/get-results'; var values = {}; $.each(form.serializeArray(), function(i, field) { values[field.name] = field.value; }); var zoom = map.getZoom(); $.ajax({ type: "POST", url: url, data: values, dataType: "text", success: function(data) { data = $.parseJSON(data); if (data && zoom == map.getZoom()) { processResults(data); } } }); } function downloadAdvert(id, callback) { var url = '/hledani/get-results'; $.ajax({ type: "POST", url: url, data: {advert_id : id}, dataType: "text", success: function(data) { data = $.parseJSON(data); if (data) { processResults(data); } if (typeof callback == "function") { callback(id, data); } } }); } /** * Update markers on the map * * @param data json format */ function updateMap(data) { var bounds = new google.maps.LatLngBounds(); $.each(data, function(index, item) { var point = amap.createPoint(item.lat, item.lng); if (typeof markers[item.id] != "Object") { markerOptions.position = point; markerOptions.title = item.title; markerOptions.icon = getIcon(); var text = composeAdvertContent(item.title, item.text, item.detailUri, item.thumbImgSrc); marker = amap.createMarker(point, item.title, text, getIcon(), markerOptions, null); markers[item.id] = marker; bounds.extend(point); } }); } function processResults(data) { if (data.adverts) { if (data.adverts.length >= 100) { //$("#mapMessage").html("Zobrazení na mapě je omezeno na " + data.adverts.length + " inzerátů
Pro přesnější výsledky upřesněte kritéria a lokalitu"); $("#mapMessage").show(); } else { //$("#mapMessage").html(""); $("#mapMessage").hide(); } amap.clearOverlays(); updateMap(data.adverts); } } /** * Compose content for advert point bubble * * @param string title * @param string text * @param string detailUri * @param string imgSrc * @return string HTML code */ function composeAdvertContent(title, text, detailUri, imgSrc) { var content = "
"+ ""+title+"
"+ "

"; if(imgSrc.length > 0) { content += ""; } content += text+"

"+ "

Podrobnosti

"+ "
"; return content; } /** * @return Google.Maps.MarkerImage */ function getIcon() { var iconSrc = '/img/map-icon-board.png'; var icon = new google.maps.MarkerImage( iconSrc, new google.maps.Size(25, 35), new google.maps.Point(0, 0), new google.maps.Point(13, 35) ); return icon; } function showInfo(index) { if (markers[index]) { amap.triggerEvent(markers[index], "click"); return; } // else download downloadAdvert(index, function() { if (!markers[index]) { return; } amap.triggerEvent(markers[index], "click"); return; }); }