var locationPopupMap=false; var locationPopupMinimap; var zoomControl; var locationPopupDefaultCountry = 0; var locationPopupDefaultRegion = 0; var locationPopupDefaultCity = 0; var locationPopupDefaultMetro = 0; var locationPopupDefaultLatitude = null; var locationPopupDefaultLongitude = null; var locationPopupDefaultZoom = null; var locationPopupDefaultMapType = 0; var currentCoords; var cityList = []; var changedByScript = false; var customOkButtonText = false; var defaultOkButtonText = false; var storedLatitude = 0; var storedLongitude = 0; var storedZoom = 0; function mapInit(lat, lng, zoom) { if (locationPopupMap) return; locationPopupMap = new L.Map('locationPopupMap', {center: new L.LatLng(lat, lng), zoom: zoom, maxZoom: 19}).fitWorld(); locationPopupMap.addControl(new L.Control.Layers({ 'OSM': new L.DeferredLayer(layerdefs.osm), 'Yandex Map': new L.DeferredLayer(layerdefs.ymap), 'Yandex Satellite': new L.DeferredLayer(layerdefs.ysat), 'Yandex Hybrid': new L.DeferredLayer(layerdefs.yhyb), 'Yandex Народная': new L.DeferredLayer(layerdefs.ypub), 'Yandex Народная Hybrid': new L.DeferredLayer(layerdefs.ypubhyb), 'Google Roadmap': new L.DeferredLayer(layerdefs.groad), 'Google Terrain': new L.DeferredLayer(layerdefs.gter), 'Google Satellite': new L.DeferredLayer(layerdefs.gsat), 'GoogleHybrid': new L.DeferredLayer(layerdefs.ghyb), 'Bing Road': new L.DeferredLayer(layerdefs.broad), 'Bing Aerial': new L.DeferredLayer(layerdefs.baer), 'Bing Aerial With Labels': new L.DeferredLayer(layerdefs.baerlab), 'MapQuest': new L.DeferredLayer(layerdefs.mqst) })); locationPopupMap.addControl(new L.Control.Scale({width: 100, position: 'bottomleft'})); var fullScreen = new L.Control.FullScreen(); locationPopupMap.addControl(fullScreen); $('.leaflet-control-zoom').parent().removeClass('leaflet-left').addClass('leaflet-right'); var count = 1; // 0 - not set $('#dialog-locationPopup .leaflet-control-layers-base input:radio') .click(function(){ $('#mapType').val($(this).val()); }) .each(function(){ $(this).val(count); count++; }); locationPopupMap.on('enterFullscreen exitFullscreen', function(){ setTimeout(function(){locationPopupMap.invalidateSize()}, 1000); }); } function minimapInit(lat, lng, zoom) { if($('#popupMinimapContainer').length == 0) return false; var osm = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'); locationPopupMinimap = new L.Map('popupMinimapContainer', {center: new L.LatLng(lat, lng), zoom: zoom, attributionControl: false, zoomControl: false, dragging: false, touchZoom: false, scrollWheelZoom: false, doubleClickZoom: false, boxZoom:false}); locationPopupMinimap.fitWorld(); locationPopupMinimap.addLayer(osm); } var reloadMap = function(slct) { if(popupDisableMaps) return false; if (locationPopupDefaultLatitude || locationPopupDefaultLongitude) return false; var obj = $('option[value="'+ $(slct).val() +'"]', $(slct)); if(obj.data('scale') > 0) { setMapType(obj.data('map_type')); locationPopupMap.setView(new L.LatLng(obj.data('latitude'), obj.data('longitude')), obj.data('scale')); return true; } return false; } var setMapType = function(type) { if(popupDisableMaps) return false; if (type) { $('#dialog-locationPopup .leaflet-control-layers-base input:radio').each(function(){ if($(this).val() == type) $(this).click(); }); } else { $('#dialog-locationPopup .leaflet-control-layers-base input:radio').first().click(); } } var loadDefaultMap = function() { if(popupDisableMaps) return false; locationPopupMap.fitWorld(); return true; } jQuery(function($) { var prevCountry = false; var widgetOverlays = false; defaultOkButtonText = $('#dialog-locationPopup .submit.ok').text(); if(!popupDisableMaps) { mapInit(0,0,1); if($('#popupMinimapContainer').length) { minimapInit(0,0,1); } $('#dialog-locationPopup .leaflet-control-zoom').append(''); $('#dialog-locationPopup .leaflet-control-locate').click(function(){ locationPopupMap.locate({ setView: true, enableHighAccuracy: true }); locationPopupMap.once('locationfound', function(loc){ Spinner.show(); $.post('/city/nearest', {latitude:loc.latlng.lat, longitude:loc.latlng.lng}, function(data){ data = $.parseJSON(data); if(data.success) { locationPopupDefaultRegion = data.regionId; locationPopupDefaultCity = data.cityId; prevCountry = -1; $('#locationPopupCountry').data('selectik').changeCS({value: data.countryId}); } }); }); $('#enableCoords').prop('checked', true).change(); return false; }); $('.leaflet-control-layers-list').mousewheel(function(e, delta){ delta *= 5; var newVal = $( "#layersSlider", $(this) ).slider('option', 'value') + delta; newVal = Math.max($( "#layersSlider" , $(this) ).slider('option', 'min'), Math.min($( "#layersSlider" , $(this) ).slider('option', 'max'),newVal)); $( "#layersSlider" , $(this) ).slider('option', 'value', newVal); return false; }); $('#dms_lat_hem').selectik({width: 45}); $('#dms_long_hem').selectik({width: 45}); $('.leaflet-control-container').prepend(''); $('#locationPopupForm table input').attr('readonly', true).addClass('readonly'); $('#dms_lat_hem').data('selectik').disableCS(); $('#dms_long_hem').data('selectik').disableCS(); $('#enableCoords').checkbox({cls:'jquery-checkbox-dark',empty: '/skin/images/empty.png'}).change(function(){ if( $(this).is(':checked') ) { $('#locationPopupMap .leaflet-control-container .cross-control').show(); $('#locationPopupForm table input').attr('readonly', false).removeClass('readonly'); $('#dms_lat_hem').data('selectik').enableCS(); $('#dms_long_hem').data('selectik').enableCS(); $('#correctionHolder').tooltip({blocked: true}); $('#dialog-locationPopup a.submit.ok').button( "enable" ); } else { $('.leaflet-control-container .cross-control').hide(); $('#locationPopupForm table input').attr('readonly', true).addClass('readonly'); $('#dms_lat_hem').data('selectik').disableCS(); $('#dms_long_hem').data('selectik').disableCS(); } return false; }); $('.leaflet-control-zoom a').tooltip({showURL: false}); $('#correctionHolder').tooltip({showURL: false}); $('.leaflet-control-zoom-fullscreen').click(function(){ $(this).mousemove(); return false; }); var trimDecimal = function(num, digits) { var mult = 1; for (var i = 0; i < digits; i++) { mult *= 10; } return num > 0 ? Math.floor(num*mult)/mult : Math.ceil(num*mult)/mult; } locationPopupMap.on('moveend', function(e) { // hack to prevent leaflet setCenter fault if (changedByScript) { changedByScript = false; return; } if(locationPopupMinimap) { locationPopupMinimap .setView(locationPopupMap.getCenter(), ((locationPopupMap.getZoom() > 1) ? locationPopupMap.getZoom() - 1 : 0)) .invalidateSize() } $('#zoom').val(locationPopupMap.getZoom()); $('#latitude_decimal').val(trimDecimal(locationPopupMap.getCenter().lat, 6)); $('#longitude_decimal').val(trimDecimal(locationPopupMap.getCenter().lng, 6)); decLatChange(locationPopupMap.getCenter().lat); decLngChange(locationPopupMap.getCenter().lng); if(storedLatitude && storedLongitude) { $('#reloadCoordinates').show(); } }); var decLatChange = function(lat_dec) { $('#dms_lat_hem').val( (lat_dec < 0) ? '-' : ''); lat_dec = lat_dec < 0 ? -1*lat_dec : lat_dec; $('#dms_lat_deg').val(Math.floor(lat_dec)); $('#dms_lat_min').val(Math.floor((lat_dec - Math.floor(lat_dec))*60)); $('#dms_lat_sec').val(trimDecimal(((lat_dec - Math.floor(lat_dec))*60 - Math.floor((lat_dec - Math.floor(lat_dec))*60))*60, 3)); $('#dms_lat_hem').change(); }; var decLngChange = function(lng_dec) { $('#dms_long_hem').val( (lng_dec < 0) ? '-' : ''); lng_dec = lng_dec < 0 ? -1*lng_dec : lng_dec; $('#dms_long_deg').val(Math.floor(lng_dec)); $('#dms_long_min').val(Math.floor((lng_dec - Math.floor(lng_dec))*60)); $('#dms_long_sec').val(trimDecimal(((lng_dec - Math.floor(lng_dec))*60 - Math.floor((lng_dec - Math.floor(lng_dec))*60))*60, 3)); $('#dms_long_hem').change(); } $('#latitude_decimal').change(function(){ decLatChange($(this).val()); $('#zoom').change(); }); $('#longitude_decimal').change(function(){ decLngChange($(this).val()); $('#zoom').change(); }); $('.dms_lat').change(function(){ $('#latitude_decimal').val(trimDecimal($('#dms_lat_hem').val() + ($('#dms_lat_deg').val()*1 + $('#dms_lat_min').val()/60 + $('#dms_lat_sec').val()/3600), 6)); $('#zoom').change(); }); $('.dms_lng').change(function(){ $('#longitude_decimal').val(trimDecimal($('#dms_long_hem').val() + ($('#dms_long_deg').val()*1 + $('#dms_long_min').val()/60 + $('#dms_long_sec').val()/3600), 6)); $('#zoom').change(); }); $('#zoom').change(function(){ changedByScript = true; locationPopupMap.setView(new L.LatLng($('#latitude_decimal').val()*1, $('#longitude_decimal').val()*1), $('#zoom').val()*1, true); }); } $('#dialog-locationPopup').dialog({ autoOpen: false, width: 'auto', position: ['center', 'center'], height: 'auto', modal: true, resizable: false, draggable: false, open: function(){ Spinner.show(); widgetOverlays = $('.ui-widget-overlay:not(:last)'); $(widgetOverlays).hide(); prevCountry = false; if(locationPopupMap) locationPopupMap.invalidateSize(); // set ok button text $('#dialog-locationPopup .submit.ok').text(customOkButtonText ? customOkButtonText : defaultOkButtonText); // clean previous data $('#locationPopupRegionContainer').html(''); $('#locationPopupCityContainer').html(''); $('#locationPopupMetroContainer').html(''); // show default values if ( locationPopupDefaultMapType ) { setMapType(locationPopupDefaultMapType); locationPopupDefaultMapType = 0; } else { $('#dialog-locationPopup .leaflet-control-layers-base input:radio').first().click(); } if ( locationPopupDefaultCountry ) { $('#locationPopupCountry').data('selectik').changeCS({value:locationPopupDefaultCountry}); $('#locationPopupCountry').change(); locationPopupDefaultCountry = false; } else { $('span.custom-text', $('#locationPopupCountry').parent()).html('' + Travvi.s('js.country') + '').addClass('required'); $('#dialog-locationPopup a.submit.ok').button( "disable" ); Spinner.hide(); } if ( $('#enableCoords') && locationPopupDefaultLatitude && locationPopupDefaultLongitude ) { $('#enableCoords').attr('checked', true).change(); $('#latitude_decimal').val(locationPopupDefaultLatitude); $('#longitude_decimal').val(locationPopupDefaultLongitude); decLatChange(locationPopupDefaultLatitude); decLngChange(locationPopupDefaultLongitude); $('#zoom').val(locationPopupDefaultZoom).change(); storedLatitude = locationPopupDefaultLatitude; storedLongitude = locationPopupDefaultLongitude; storedZoom = locationPopupDefaultZoom; locationPopupDefaultLatitude = false; locationPopupDefaultLongitude = false; setTimeout(function(){$('#reloadCoordinates').hide();}, 1000); } else { $('#enableCoords').attr('checked', false).change(); storedLatitude = 0; storedLongitude = 0; storedZoom = 0; } }, close: function(){ customOkButtonText = false; $(widgetOverlays).show(); } }); $('.leaflet-control-layers-list input:radio').checkbox({cls:'jquery-radiobutton-white',empty: '/skin/images/empty.png'}); $('#locationPopupMap .jquery-radiobutton-white').hover(function(){ $('#locationPopupMap .leaflet-control-layers').addClass('leaflet-control-layers-expanded'); }, function(){ $('#locationPopupMap .leaflet-control-layers').removeClass('leaflet-control-layers-expanded'); }); $('#locationPopupMap .leaflet-control-layers-list').append('
'); $('.leaflet-control-zoom a').tooltip({showURL: false}); var slide = function(amount) { var content = $('#locationPopupMap .leaflet-control-layers-base'), container = $('#locationPopupMap .leaflet-control-layers-list'), delta = container.actual('height') - content.actual('height'); if (delta < 0) { content.css('marginTop', delta*(1-amount/100)); } } $( "#locationPopupMap #layersSlider" ).slider({ value: 100, orientation: "vertical", min: 0, max: 100, step: 1, slide: function( event, ui ) { slide(ui.value); }, change: function( event, ui ) { slide(ui.value); } }); $('#locationPopupCountry').selectik({maxItems: 10}).change(function(){ if ($(this).val() == prevCountry) return false; Spinner.show(); prevCountry = $(this).val(); $('span.custom-text', $('#locationPopupCountry').parent()).removeClass('required'); $('#dialog-locationPopup a.submit.ok').button( "enable" ); var obj = $('option:selected', this); if( !$('#enableCoords').attr('checked') ) if(!reloadMap($(this))) loadDefaultMap(); $('#locationPopupRegionContainer').empty(); $('#locationPopupCityContainer').empty(); $('#locationPopupMetroContainer').empty(); cityList = []; $.ajax({ url: '/country/' + obj.val() + '/regions', type: 'get', success: function(msg) { if (msg) { $('#locationPopupRegionContainer').html(msg); } } }); }); $('#dialog-locationPopup a.submit').button(); $('#dialog-locationPopup a.submit.ok').click(function(){ locationPopupCallbackFunction(); $('#dialog-locationPopup').dialog('close'); return false; }); $('#dialog-locationPopup a.submit.cancel').click(function(){ $('#dialog-locationPopup').dialog('close'); return false; }); $('#locationPopupForm').submit(function(){ return false; }); $(window).resize(function() { $('#dialog-locationPopup').dialog('option', {position: ['center', 'center']}); }); $('#reloadCoordinates').click(function(){ $('#enableCoords').attr('checked', true).change(); $('#latitude_decimal').val(storedLatitude); $('#longitude_decimal').val(storedLongitude); $('#zoom').val(storedZoom).change(); $(this).hide(); return false; }); });