var gMap = { map : null, geocoder : null, activeTag : false, activeTagWord : null, onDocumentLoad : function () { if (GBrowserIsCompatible()) { // map create and customize var copyOSM = new GCopyrightCollection("OpenStreetMap"); copyOSM.addCopyright(new GCopyright(1, new GLatLngBounds(new GLatLng(-90,-180), new GLatLng(90,180)), 0, " ")); var tilesMapnik = new GTileLayer(copyOSM, 1, 17, {tileUrlTemplate: 'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png'}); var tilesOsmarender = new GTileLayer(copyOSM, 1, 17, {tileUrlTemplate: 'http://tah.openstreetmap.org/Tiles/tile.php/{Z}/{X}/{Y}.png'}); var mapMapnik = new GMapType([tilesMapnik], G_NORMAL_MAP.getProjection(), "Карта"); var mapOsmarender = new GMapType([tilesOsmarender], G_NORMAL_MAP.getProjection(), "Osmarend"); gMap.map = new GMap2(document.getElementById('map'), { mapTypes: [mapMapnik,G_HYBRID_MAP] }); // map create and customize // gMap.map = new GMap2(document.getElementById('map')); if (window.map_default_lat && window.map_default_lng) { gMap.map.setCenter(new GLatLng(window.map_default_lat, window.map_default_lng), window.map_default_zoom); } else { gMap.map.setCenter(new GLatLng(55.755, 37.623), 13); } gMap.map.addControl(new GOverviewMapControl()); gMap.map.addControl(new GLargeMapControl()); gMap.map.addControl(new GMapTypeControl()); gMap.map.setMapType(mapMapnik); gMap.map.enableDoubleClickZoom(); gMap.map.enableContinuousZoom(); gMap.markersHandler.markersTypes.include(String(1)); gMap.markersHandler.markersTypes.include(String(2)); gMap.markersHandler.markersTypes.include(String(3)); GEvent.addListener(gMap.map, 'load', function() { gMap.markersHandler.server.loadMarkers(); }); GEvent.addListener(gMap.map, 'click', function(overlay, point) { if (overlay) return; if (gMap.markersHandler.markerAddState) { if (gMap.markersHandler.currentMarker != null) { gMap.markersHandler.currentMarker.setLatLng(point); $('maps_add_marker_form').elements['marker_lat'].value = gMap.markersHandler.currentMarker.getLatLng().lat(); $('maps_add_marker_form').elements['marker_lng'].value = gMap.markersHandler.currentMarker.getLatLng().lng(); $('maps_add_marker_form_lat').innerHTML = gMap.markersHandler.currentMarker.getLatLng().lat() + '°'; $('maps_add_marker_form_lng').innerHTML = gMap.markersHandler.currentMarker.getLatLng().lng() + '°'; } else { var newPoint = point; var newIcon = gMap.iconsHandler.prepareIcon(); var newMarker = new GMarker(newPoint,{title:'Новый объект', draggable:true, icon: newIcon}); gMap.markersHandler.currentMarker = newMarker; GEvent.addListener(newMarker, 'dragend', function() { $('maps_add_marker_form').elements['marker_lat'].value = gMap.markersHandler.currentMarker.getLatLng().lat(); $('maps_add_marker_form').elements['marker_lng'].value = gMap.markersHandler.currentMarker.getLatLng().lng(); $('maps_add_marker_form_lat').innerHTML = gMap.markersHandler.currentMarker.getLatLng().lat() + '°'; $('maps_add_marker_form_lng').innerHTML = gMap.markersHandler.currentMarker.getLatLng().lng() + '°'; }); gMap.map.addOverlay(gMap.markersHandler.currentMarker); // $('maps_add_marker').removeClass('hidden'); $('maps_add_marker_form').elements['marker_lat'].value = point.lat(); $('maps_add_marker_form').elements['marker_lng'].value = point.lng(); $('maps_add_marker_form_lat').innerHTML = point.lat() + '°'; $('maps_add_marker_form_lng').innerHTML = point.lng() + '°'; } } }); GEvent.addListener(gMap.map, 'moveend', function() { gMap.markersHandler.server.loadMarkers(); }); gMap.geocoder = new GClientGeocoder(); /* $('maps_markers_view_switcher_form_checkboxes_button').addEvent('click', function (event) { $('maps_markers_view_switcher_form_checkboxes_button').addClass('selected'); $('maps_markers_view_switcher_form_tags_button').removeClass('selected'); $('maps_markers_view_switcher_form_checkboxes_holder').removeClass('hidden'); $('maps_markers_view_switcher_form_tags_holder').addClass('hidden'); gMap.activeTag = true; }); $('maps_markers_view_switcher_form_tags_button').addEvent('click', function (event) { $('maps_markers_view_switcher_form_checkboxes_button').removeClass('selected'); $('maps_markers_view_switcher_form_tags_button').addClass('selected'); $('maps_markers_view_switcher_form_checkboxes_holder').addClass('hidden'); $('maps_markers_view_switcher_form_tags_holder').removeClass('hidden'); gMap.activeTag = false; }); $$('#maps_markers_view_switcher_form_tags_holder a').each(function (tagLink) { gMap.markersHandler.tags[tagLink.innerHTML] = []; tagLink.addEvent('click', function (event) { if (!window.ie) event.preventDefault(); else event.returnValue = false; tagLink.removeClass('active'); gMap.activeTagWord = tagLink; }); });*/ } }, onDocumentUnload : function () { GUnload(); }, markersHandler : { markerAddState : false, markers : [], markersObjects : {1:[],2:[],3:[],4:[],5:[],6:[],7:[],8:[],9:[],10:[],11:[]}, markersTypes : [], tags : [], currentMarker : null, zoomLimit : 11, enableMarkerAddState : function () { gMap.markersHandler.markerAddState = true; }, disableMarkerAddState : function () { gMap.markersHandler.markerAddState = false; if (gMap.markersHandler.currentMarker) { gMap.markersHandler.currentMarker.hide(); } gMap.markersHandler.currentMarker = null; $('maps_add_marker_form').reset(); $('maps_add_marker_form_lat').innerHTML = ''; $('maps_add_marker_form_lng').innerHTML = ''; }, createMarker : function (point) { // Set up our GMarkerOptions object var markerOptions = { icon : gMap.iconsHandler.prepareIcon() }; var marker = new GMarker(point, markerOptions); return marker; }, onClickMarker : function () { }, server : { // url : '/ajax/map/', url : '/content/Xml', saveMarker : function () { if (($('maps_add_marker_form').elements['marker_lat'].value != '') && ($('maps_add_marker_form').elements['marker_lng'].value != '')) { var data = $('maps_add_marker_form').toQueryString() + '&act=add_marker'; ajaxLoadPost(gMap.markersHandler.server.url, data, gMap.markersHandler.server.saveMarkerOnload, window); } else { futu_alert(FAT.gmap_header, FAT.gmap_marker_add_no_marker, true, 'error'); } }, saveMarkerOnload : function (ajaxObj) { if(ajaxObj && ajaxObj.responseXML){ var xml = ajaxObj.responseXML; var errors = xml.getElementsByTagName('error'); var messages = xml.getElementsByTagName('message'); if(errors && errors.length && errors[0].firstChild && errors[0].firstChild.nodeType == 3) { futu_alert(FAT.gmap_header, errors[0].firstChild.data, true, 'error'); } else if (messages && messages.length && messages[0].firstChild && messages[0].firstChild.nodeType == 3 && messages[0].firstChild.data == 'ok') { var marker_type = xml.getElementsByTagName('marker_type')[0].firstChild.data; var marker_id = xml.getElementsByTagName('object_id')[0].firstChild.data; var marker_title = xml.getElementsByTagName('marker_title')[0].firstChild.data; futu_alert(FAT.gmap_header, FAT.gmap_marker_add_success, false, 'message'); var newPoint = new GLatLng(gMap.markersHandler.currentMarker.getLatLng().lat(),gMap.markersHandler.currentMarker.getLatLng().lng()); var newIcon = gMap.iconsHandler.prepareIcon(marker_type); var newMarker = new GMarker(newPoint,{title:marker_title, draggable:false, icon: newIcon}); gMap.map.addOverlay(newMarker); GEvent.addListener(newMarker, 'click', function() { gMap.markersHandler.server.loadMarkerInfo(newMarker, marker_id); }); gMap.markersHandler.markersObjects[marker_type].push(newMarker); gMap.markersHandler.markers.push(marker_id); gMap.markersHandler.currentMarker.hide(); gMap.markersHandler.currentMarker = null; gMap.markersHandler.disableMarkerAddState(); } } }, loadMarkers : function () { var bounds = gMap.map.getBounds(); var zoom = gMap.map.getZoom(); if (zoom > gMap.markersHandler.zoomLimit) { var sw_bound_lat = bounds.getSouthWest().lat(); var sw_bound_lng = bounds.getSouthWest().lng(); var ne_bound_lat = bounds.getNorthEast().lat(); var ne_bound_lng = bounds.getNorthEast().lng(); if (gMap.activeTag) { var data = 'act=list&sw_lat='+sw_bound_lat+'&sw_lng='+sw_bound_lng+'&ne_lat='+ne_bound_lat+'&ne_lng='+ne_bound_lng+'&zoom='+zoom+'&tag='+gMap.activeTagWord.innerHTML; } else { var data = 'act=list&sw_lat='+sw_bound_lat+'&sw_lng='+sw_bound_lng+'&ne_lat='+ne_bound_lat+'&ne_lng='+ne_bound_lng+'&zoom='+zoom; } // data=''; ajaxLoadPost(gMap.markersHandler.server.url, data, gMap.markersHandler.server.loadMarkersOnload, window); } }, loadMarkersOnload : function (ajaxObj) { if(ajaxObj && ajaxObj.responseXML){ var xml = ajaxObj.responseXML; var errors = xml.getElementsByTagName('error'); var messages = xml.getElementsByTagName('message'); if(errors && errors.length && errors[0].firstChild && errors[0].firstChild.nodeType == 3) { futu_alert(FAT.gmap_header, errors[0].firstChild.data, true, 'error'); } else if (messages && messages.length && messages[0].firstChild && messages[0].firstChild.nodeType == 3 && messages[0].firstChild.data == 'ok') { var markers = xml.getElementsByTagName('marker'); $A(markers).each(function (marker) { if (!gMap.markersHandler.markers.contains(marker.getAttribute('id'))) { var newPoint = new GLatLng(marker.getAttribute('lat'),marker.getAttribute('lng')); var marker_types = marker.getAttribute('marker_type').split(','); var newIcon = gMap.iconsHandler.prepareIcon(marker_types[0],marker_types[1]); var newMarker = new GMarker(newPoint,{title: marker.firstChild.data, draggable:false, icon: newIcon}); gMap.map.addOverlay(newMarker); if (marker_types[0] == '3') { GEvent.addListener(newMarker, 'click', function() { gMap.markersHandler.server.loadMarkerInfoMetro(newMarker, marker.firstChild.data); }); } else { GEvent.addListener(newMarker, 'click', function() { gMap.markersHandler.server.loadMarkerInfo(newMarker, marker.getAttribute('id')); }); } if (window.map_object_id != marker.getAttribute('id')) { $A(marker_types).each(function (marker_type_one) { marker_type_one = marker_type_one.toInt(); gMap.markersHandler.markersObjects[marker_type_one].push(newMarker); }); //gMap.markersHandler.markersObjects[marker.getAttribute('marker_type')].push(newMarker); } else { window.map_object_id = ''; } gMap.markersHandler.markers.push(marker.getAttribute('id')); } }); for (var i = 1; i < 12; i++) { $A(gMap.markersHandler.markersObjects[i]).each(function (mm) { mm.hide(); }); } for (var i = 1; i < 12; i++) { $A(gMap.markersHandler.markersObjects[i]).each(function (mm) { if (gMap.markersHandler.markersTypes.contains(String(i))) { mm.show(); } }); } } } }, loadMarkerInfoMetro : function (marker, marker_title) { marker.openInfoWindowHtml('

| ';
iHTML += ''+markerTitle+' '+markerAddress+' | ';
iHTML += '|
| Отзывов: '+commentsCount+' Фото: '+photosCount+''; iHTML += ' | ';
iHTML += '|