Total Cost : €
Make Payment
"};
console.log(formData);
var closeModalBtn = document.getElementById("closeModalBtn");
$(".openModalBtn").click(function () {
const locationType = $(this).data("location-type");
$("#mapModal").css({ display: "flex" });
initMap(locationType, this);
})
$(".closeModalBtn").click(function () {
$("#mapModal").css({ display: "none" });
})
$(window).click(function (event) {
if ($(event.target).is('#mapModal')) {
$('#mapModal').css('display', 'none');
}
});
$("#backToCalculator").click(function () {
$("#paymentArea").hide();
$("#cost-calculator").show();
})
$(".save_address").click(function () {
$('#addressInput').val('');
$("#mapModal").hide();
})
$("#calculate-cost-form").on("submit",async function (event) {
event.preventDefault();
// const weightInput = document.getElementById("sc_weight").value;
// const errorMessage = document.getElementById("error-message");
// const weight = parseFloat(weightInput);
// if (isNaN(weight)) {
// errorMessage.textContent = "Please enter a valid weight.";
// errorMessage.style.display = "block";
// event.preventDefault();
// return;
// } else if (weight > 1200) {
// errorMessage.textContent = "Overload: The weight exceeds 1.2 tons!";
// errorMessage.style.display = "block";
// return;
// }
// Serialize the form data
let sizeAndWeight = $("#calculate-cost-form").serializeArray();
let formContainer = $(this).closest('.form-container');
let fromLocationLng = formContainer.find('.from-location').attr('lng');
let fromLocationLat = formContainer.find('.from-location').attr('lat');
let toLocationLng = formContainer.find('.to-location').attr('lng');
let toLocationLat = formContainer.find('.to-location').attr('lat');
if (!fromLocationLng || !fromLocationLat) {
alert("Please select Pickup Location");
return;
}
if (!toLocationLng || !toLocationLat) {
alert("Please select Drop Location");
return;
}
let selectedValue = document.getElementById("vehicle").value;
console.log(selectedValue, 'selectedValue', typeof selectedValue);
const dieselPricePerLiter = selectedValue === 'standard' ? Number(formData.dieselPricePerLiterStVan) || 0 : Number(formData.dieselPricePerLiter) || 0;
const fuelConsumptionPer100Km = selectedValue === 'standard' ? Number(formData.fuel_Consumption_Per_st_van
) || 0 : Number(formData.fuel_Consumption_Per) || 0;
// const dieselPricePerLiter = Number(formData.dieselPricePerLiter) || 0;
// const fuelConsumptionPer100Km = Number(formData.fuel_Consumption_Per) || 0;
const driverHourlyRate = Number(formData.driver_Hourly_Rate) || 0;
const foodCostPer4Hours = Number(formData.foodCostPer4Hours) || 0;
let countryFrom = await getCountryName(fromLocationLat, fromLocationLng);
let countryTo = await getCountryName(toLocationLat, toLocationLng);
let austriaToll = 0;
if (countryFrom === 'Austria' || countryTo === 'Austria') {
austriaToll = Number(formData.austriaToll) || 0;
}
console.log("Austria toll fee:", austriaToll);
const croatiaToll = Number(formData.croatiaToll) || 0;
const overnightStayThreshold = Number(formData.overnightStayThreshold) || 0;
const overnightStayCost = Number(formData.overnightStayCost) || 0;
const profitMargin = Number(formData.profitMargin) || 0;
let garageLat = formData.latitude;
let garageLng = formData.longitude;
let kmCharges = formData.km_charges;
let kmChargesPickupToDrop = formData.km_charges_pickup_to_drop;
let garageToFrom = await getTravelTime(garageLat, garageLng, fromLocationLat, fromLocationLng);
let FromtoTo = await getTravelTime(fromLocationLat, fromLocationLng, toLocationLat, toLocationLng);
let TotoGarage = await getTravelTime(toLocationLat, toLocationLng, garageLat, garageLng);
console.log("garageToFrom : ",garageToFrom);
console.log("FromtoTo : ",FromtoTo);
console.log("TotoGarage : ",TotoGarage);
let travelTime = garageToFrom + FromtoTo + TotoGarage;
travelTime = (travelTime / 60) / 60;
console.log("travelTime before : ",travelTime);
// Round to the nearest 30 minutes (0.5 hours)
travelTime = Math.ceil(travelTime * 2) / 2;
travelTime += 0.5;
// let city = await getCityName(toLocationLat, toLocationLng);
console.log("travelTime : ",travelTime);
let croatiaTollFee = 0;
if(countryFrom === 'Croatia' || countryTo === 'Croatia'){
const croatiaTollCities = formData.city_toll_tax;
croatiaTollFee = 5;
}
let cityFrom = await getCityName(fromLocationLat, fromLocationLng);
let cityTo = await getCityName(toLocationLat, toLocationLng);
console.log("countryFrom : ",countryFrom);
console.log("countryTo : ",countryTo);
let additionalCost = 0;
// Check if either cityFrom or cityTo contains "Ljubljana Arpt (LJU)"
if ((cityFrom.toLowerCase().includes("ljubljana arpt (lju)") && !cityTo.toLowerCase().includes("ljubljana arpt (lju)")) ||
(cityTo.toLowerCase().includes("ljubljana arpt (lju)") && !cityFrom.toLowerCase().includes("ljubljana arpt (lju)"))) {
additionalCost = 12;
}
const driverCost = travelTime * driverHourlyRate;
const foodCost = travelTime >= 4 ? Math.ceil(travelTime / 4) * foodCostPer4Hours : 0;
console.log("driver and foodcost : ",driverCost, foodCost);
const overnightCost = travelTime > overnightStayThreshold ? overnightStayCost : 0;
// Calculate distance for each segment
let distanceGarageToFrom = calculateDistance(garageLat, garageLng, fromLocationLat, fromLocationLng);
let distanceFromToTo = calculateDistance(fromLocationLat, fromLocationLng, toLocationLat, toLocationLng);
let distanceToToGarage = calculateDistance(toLocationLat, toLocationLng, garageLat, garageLng);
calculateDistance(garageLat, garageLng, fromLocationLat, fromLocationLng, (err, distanceGarageToFrom) => {
if (err) return console.error(err);
calculateDistance(fromLocationLat, fromLocationLng, toLocationLat, toLocationLng, (err, distanceFromToTo) => {
if (err) return console.error(err);
calculateDistance(toLocationLat, toLocationLng, garageLat, garageLng, (err, distanceToToGarage) => {
if (err) return console.error(err);
// Log distances
console.log(distanceGarageToFrom, 'distanceGarageToFrom');
console.log(distanceFromToTo, 'distanceFromToTo');
console.log(distanceToToGarage, 'distanceToToGarage');
// Calculate the cost for each segment
let costGarageToFrom = distanceGarageToFrom * kmCharges;
let costFromToTo = distanceFromToTo * kmChargesPickupToDrop;
let costToToGarage = distanceToToGarage * kmCharges;
// Total distance and cost
let totalDistance = distanceGarageToFrom + distanceFromToTo + distanceToToGarage;
const fuelCost = (totalDistance / 100) * fuelConsumptionPer100Km * dieselPricePerLiter;
console.log("fuelCost:", fuelCost, typeof fuelCost);
console.log("driverCost:", driverCost, typeof driverCost);
console.log("foodCost:", foodCost, typeof foodCost);
console.log("austriaToll:", austriaToll, typeof austriaToll);
console.log("croatiaTollFee:", croatiaTollFee, typeof croatiaTollFee);
console.log("overnightCost:", overnightCost, typeof overnightCost);
let baseCost = fuelCost + driverCost + foodCost + austriaToll + croatiaTollFee + overnightCost + additionalCost;
// console.log(selectedValue , ' selectedValue van with basecost');
console.log("baseCost : ",baseCost);
console.log("additionalCost : ",additionalCost);
if (selectedValue === 'van') {
baseCost *= 1.10;
console.log(baseCost , ' selectedValue van baseCost');
}
let totalCost = (baseCost + (baseCost * (profitMargin / 100)));
console.log(`totalDistance: ${Math.round(totalDistance)} km`);
console.log(`totalCost: ${totalCost} cost`);
// Additional cost calculations
sizeAndWeight.forEach((field) => {
let fieldValue = parseFloat(field.value.trim());
let fieldName = field.name;
if (fieldValue && formData[fieldName]) {
totalCost += fieldValue * parseFloat(formData[fieldName]);
}
});
totalCost = totalCost.toFixed(2);
$("#totalCost").text(totalCost);
$("#paymentArea").css('display', 'flex');
$("#cost-calculator").hide();
// Disable payment button if Stripe API key is missing
if (!formData.stripe_api_secret_key) {
$('#make_payment').attr('disabled', 'disabled');
$('#make_payment').css({ 'background-color': '#888c88' });
}
});
});
});
});
function calculateTravelTime(lat1, lon1, lat2, lon2, mode = 'DRIVING') {
return new Promise((resolve, reject) => {
const origin = new google.maps.LatLng(lat1, lon1);
const destination = new google.maps.LatLng(lat2, lon2);
const service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [origin],
destinations: [destination],
travelMode: mode,
},
(response, status) => {
if (status === 'OK' && response.rows[0].elements[0].duration) {
const durationInSeconds = response.rows[0].elements[0].duration.value;
resolve(durationInSeconds); // Convert to minutes
} else {
reject(new Error('Error with Distance Matrix: ' + status));
}
}
);
});
}
async function getTravelTime(fromLocationLat, fromLocationLng, toLocationLat, toLocationLng) {
try {
let travelTime = await calculateTravelTime(fromLocationLat, fromLocationLng, toLocationLat, toLocationLng);
return travelTime;
} catch (error) {
console.error("Error calculating travel time:", error);
return { travelTime: 0, driverCost: 0 };
}
}
async function getCityName(lat, lng) {
return new Promise((resolve, reject) => {
const geocoder = new google.maps.Geocoder();
const latlng = { lat: parseFloat(lat), lng: parseFloat(lng) };
geocoder.geocode({ location: latlng }, (results, status) => {
if (status === "OK") {
if (results[0]) {
let city = null;
let airport = false; // Flag to check if it's an airport location
for (const component of results[0].address_components) {
if (component.types.includes("locality")) {
city = component.long_name;
}
// Check for airport or administrative area if available
if (component.types.includes("airport")) {
airport = true;
}
}
// If city is not found but it's an airport, return "Ljubljana Arpt (LJU)"
if (!city && airport) {
city = "Ljubljana Arpt (LJU)";
}
resolve(city || "City not found");
} else {
reject("No results found");
}
} else {
reject("Geocoder failed due to: " + status);
}
});
});
}
$('#make_order').click(function (e) {
e.preventDefault(); // Prevent form submission
let isValid = true;
$('.error-message').remove();
const name = $('input[name="name"]').val().trim();
if (name === '') {
isValid = false;
$('input[name="name"]').after('
Name is required. ');
}
const phone = $('input[name="phone"]').val().trim();
const phonePattern = /^[0-9]{10}$/;
if (!phonePattern.test(phone)) {
isValid = false;
$('input[name="phone"]').after('
Enter a valid 10-digit phone number. ');
}
const email = $('input[name="email"]').val().trim();
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailPattern.test(email)) {
isValid = false;
$('input[name="email"]').after('
Enter a valid email address. ');
}
const message = $('textarea[name="message"]').val().trim();
if (message === '') {
isValid = false;
$('textarea[name="message"]').after('
Message is required. ');
}
const bookingDate = document.getElementById('booking-date').value.trim();
const passengers = document.getElementById('passengers').value.trim();
const luggage = document.getElementById('luggage').value.trim();
const vehicleType = document.getElementById('vehicle').value.trim();
if(isValid){
const data = {
action: 'make_order_ajax',
security: '2bf289711e',
name: name,
phone: phone,
email: email,
message: message,
bookingDate: bookingDate,
passengers: passengers,
luggage: luggage,
vehicleType:vehicleType,
};
$.post('https://wetransfereu.com/wp-admin/admin-ajax.php',data, function (response) {
if(response.success){
console.log(response.data);
window.location.href = "https://wetransfereu.com/order-success/";
}else{
alert(response.data.message)
}
}).fail(function () {
alert('An error occurred while processing your request.');
});
}
});
$('#make_payment').click(function (e) {
let isValid = true;
$('.error-message').remove();
const name = $('input[name="name"]').val().trim();
if (name === '') {
isValid = false;
$('input[name="name"]').after('
Name is required. ');
}
const phone = $('input[name="phone"]').val().trim();
const phonePattern = /^[0-9]{10}$/;
if (!phonePattern.test(phone)) {
isValid = false;
$('input[name="phone"]').after('
Enter a valid 10-digit phone number. ');
}
const email = $('input[name="email"]').val().trim();
const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
if (!emailPattern.test(email)) {
isValid = false;
$('input[name="email"]').after('
Enter a valid email address. ');
}
const message = $('textarea[name="message"]').val().trim();
if (message === '') {
isValid = false;
$('textarea[name="message"]').after('
Message is required. ');
}
const bookingDate = document.getElementById('booking-date').value.trim();
const passengers = document.getElementById('passengers').value.trim();
const luggage = document.getElementById('luggage').value.trim();
const vehicleType = document.getElementById('vehicle').value.trim();
if(isValid){
const data = {
action: 'make_payment_ajax',
security: '8f513dbfae',
name: name,
phone: phone,
email: email,
message: message,
bookingDate: bookingDate,
passengers: passengers,
luggage: luggage,
vehicleType:vehicleType,
amount: $("#totalCost").text() ? $("#totalCost").text() : 10000
};
$.post('https://wetransfereu.com/wp-admin/admin-ajax.php',data, function (response) {
if(response.success){
window.location.href = response.data.url;
}else{
alert(response.data.message)
}
}).fail(function () {
alert('An error occurred while processing your request.');
});
}
});
});
// old code spherical distance calculation
// function calculateDistance(lat1, lon1, lat2, lon2) {
// const point1 = new google.maps.LatLng(lat1, lon1);
// const point2 = new google.maps.LatLng(lat2, lon2);
// const distanceInMeters = google.maps.geometry.spherical.computeDistanceBetween(point1, point2);
// const distanceInKilometers = distanceInMeters / 1000;
// return distanceInKilometers;
// }
function calculateDistance(lat1, lon1, lat2, lon2, callback) {
const origin = new google.maps.LatLng(lat1, lon1);
const destination = new google.maps.LatLng(lat2, lon2);
const service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
{
origins: [origin],
destinations: [destination],
travelMode: 'DRIVING',
},
(response, status) => {
if (status === 'OK') {
if (response.rows && response.rows[0] && response.rows[0].elements && response.rows[0].elements[0]) {
const distanceInMeters = response.rows[0].elements[0].distance.value; // Distance in meters
const distanceInKilometers = distanceInMeters / 1000; // Convert to kilometers
callback(null, distanceInKilometers); // Return the result via callback
} else {
callback(new Error('Invalid response structure'), null);
}
} else {
callback(new Error('Error with Distance Matrix: ' + status), null);
}
}
);
}
document.addEventListener("DOMContentLoaded", function () {
const luggageInput = document.getElementById("luggage");
const increaseBtn = document.getElementById("increaseLuggage");
const decreaseBtn = document.getElementById("decreaseLuggage");
increaseBtn.addEventListener("click", () => {
let value = parseInt(luggageInput.value) || 0;
if (value < 20) luggageInput.value = value + 1;
});
decreaseBtn.addEventListener("click", () => {
let value = parseInt(luggageInput.value) || 0;
if (value > 0) luggageInput.value = value - 1;
});
});
async function getCountryName(lat, lng) {
return new Promise((resolve, reject) => {
const geocoder = new google.maps.Geocoder();
const latlng = { lat: parseFloat(lat), lng: parseFloat(lng) };
geocoder.geocode({ location: latlng }, (results, status) => {
if (status === "OK") {
if (results[0]) {
let country = null;
for (const component of results[0].address_components) {
if (component.types.includes("country")) {
country = component.long_name;
break;
}
}
resolve(country || "Country not found");
} else {
reject("No results found");
}
} else {
reject("Geocoder failed due to: " + status);
}
});
});
}