{"id":6617,"date":"2025-06-19T07:11:58","date_gmt":"2025-06-19T07:11:58","guid":{"rendered":"https:\/\/puertoexperience.com\/?page_id=6617"},"modified":"2025-08-06T21:30:28","modified_gmt":"2025-08-06T21:30:28","slug":"reservaciones-pe","status":"publish","type":"page","link":"https:\/\/puertoexperience.com\/en\/reservaciones-pe\/","title":{"rendered":"Reservaciones PE"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"6617\" class=\"elementor elementor-6617\" data-elementor-post-type=\"page\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e9e07ef elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e9e07ef\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2ae3864\" data-id=\"2ae3864\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2cb8afe elementor-widget elementor-widget-heading\" data-id=\"2cb8afe\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Choose your destination, days, times, type of trip and the vehicle for your transportation.<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c46da40 elementor-widget elementor-widget-text-editor\" data-id=\"c46da40\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>In this section, you can reserve your dates and times according to your needs. Payment is available online for your convenience. You can pay via PayPal or with debit or credit cards.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-9646660\" data-id=\"9646660\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e4f7b17 elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"e4f7b17\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"es\">\r\n<head>\r\n  <meta charset=\"UTF-8\" \/>\r\n  <title>Formulario Puerto Experience<\/title>\r\n  <style>\r\n    .vehiculo-opcion {\r\n      display: inline-block;\r\n    .vehiculo-opci\r\n      border: 2px solid #ccc;\r\n      border-radius: 8px;\r\n      margin: 10px;\r\n      text-align: center;\r\n      width: 180px;\r\n      cursor: pointer;\r\n      transition: all 0.3s ease;\r\n    }on img {\r\n      width: 100%;\r\n      height: auto;\r\n      border-bottom: 1px solid #ccc;\r\n    }\r\n    .vehiculo-opcion.selected {\r\n      border-color: #007bff;\r\n      background-color: #f0f8ff;\r\n    }\r\n    .vehiculo-opcion input {\r\n      display: none;\r\n    }\r\n    .reserva-formulario label {\r\n      display: block;\r\n      margin-top: 15px;\r\n      font-weight: bold;\r\n    }\r\n    .reserva-formulario input,\r\n    .reserva-formulario select {\r\n      width: 100%;\r\n      padding: 8px;\r\n      margin-top: 5px;\r\n      box-sizing: border-box;\r\n      border: 1px solid #ccc;\r\n      border-radius: 5px;\r\n    }\r\n    \r\n    .error-mensaje {\r\n  color: #d9534f;\r\n  font-size: 0.9em;\r\n  margin-top: 5px;\r\n  display: none;\r\n}\r\n.input-error {\r\n  border-color: #d9534f;\r\n  outline: none;\r\n}\r\n\r\n  <\/style>\r\n<\/head>\r\n<body>\r\n\r\n<form id=\"puerto-reservas\" class=\"reserva-formulario\" action=\"\">\r\n  <h2>Book your experience<\/h2>\r\n\r\n  <!-- Datos del cliente -->\r\n  <label>Full name *<\/label>\r\n  <input type=\"text\" name=\"nombre\" required>\r\n\r\n  <label>Email *<\/label>\r\n  <input type=\"email\" name=\"email\" required>\r\n\r\n  <label>Phone number *<\/label>\r\n  <input type=\"tel\" name=\"telefono\" required>\r\n\r\n  <label>Flight number (optional)<\/label>\r\n  <input type=\"text\" name=\"vuelo\">\r\n\r\n  <!-- Destino -->\r\n  <label>Destination *<\/label>\r\n  <select name=\"destino\" id=\"destino\" required>\r\n    <option value=\"\">Select a destination<\/option>\r\n    <option value=\"marina_vallarta\">Marina Vallarta<\/option>\r\n    <option value=\"zona_hotelera\">Hotel Zone<\/option>\r\n    <option value=\"centro_vallarta\">Downtown<\/option>\r\n    <option value=\"zona_romantica\">Romantic Zone<\/option>\r\n    <option value=\"zona_sur\">South Zone<\/option>\r\n    <option value=\"hotel_barcelo\">Barcel\u00f3 Hotel<\/option>\r\n    <option value=\"nuevo_vallarta_sur\">Nuevo Vallarta South<\/option>\r\n<option value=\"nuevo_vallarta_norte\">Nuevo Vallarta North<\/option>\r\n    <option value=\"bucerias\">Bucer\u00edas<\/option>\r\n    <option value=\"cruz_huanacaxtle\">Cruz de Huanacaxtle<\/option>\r\n    <option value=\"riviera_nayarit\">Riviera Nayarit<\/option>\r\n    <option value=\"punta_mita\">Punta Mita<\/option>\r\n    <option value=\"sayulita\">Sayulita<\/option>\r\n  <\/select>\r\n\r\n  <!-- Tipo de viaje -->\r\n  <label>Type of trip *<\/label><br>\r\n  <input type=\"radio\" name=\"viaje\" value=\"sencillo\" required> One way\r\n  <input type=\"radio\" name=\"viaje\" value=\"redondo\"> Round\r\n\r\n  <!-- Fechas -->\r\n  <div id=\"fecha-ida\">\r\n    <label>Arrival date *<\/label>\r\n    <input type=\"date\" name=\"fecha_llegada\" required>\r\n\r\n    <label>Arrival time *<\/label>\r\n    <input type=\"time\" name=\"hora_llegada\" required>\r\n  <\/div>\r\n\r\n  <div id=\"fecha-regreso\" style=\"display:none;\">\r\n    <label>Return date *<\/label>\r\n    <input type=\"date\" name=\"fecha_regreso\">\r\n    <label>Return time *<\/label>\r\n    <input type=\"time\" name=\"hora_regreso\">\r\n  <\/div>\r\n\r\n  <!-- Pasajeros -->\r\n  <label>Number of passengers (1\u201312) *<\/label>\r\n  <input type=\"number\" name=\"pasajeros\" id=\"pasajeros\" min=\"1\" max=\"12\" required>\r\n  <div id=\"error-pasajeros\" class=\"error-mensaje\"><\/div>\r\n\r\n\r\n  <!-- Veh\u00edculos -->\r\n  <label>Select the type of vehicle *<\/label>\r\n  <div id=\"vehiculos-container\">\r\n    <label class=\"vehiculo-opcion\" data-vehiculo=\"sedan\">\r\n      <input type=\"radio\" name=\"vehiculo\" value=\"sedan\" required>\r\n      <img decoding=\"async\" data-src=\"http:\/\/puertoexperience.com\/wp-content\/uploads\/2025\/05\/sedan-2.png\" alt=\"Sed\u00e1n\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 200px; --smush-placeholder-aspect-ratio: 200\/200;\">\r\n      <div>Sed\u00e1n<\/div>\r\n    <\/label>\r\n\r\n    <label class=\"vehiculo-opcion\" data-vehiculo=\"suburban\">\r\n      <input type=\"radio\" name=\"vehiculo\" value=\"suburban\" required>\r\n      <img decoding=\"async\" data-src=\"http:\/\/puertoexperience.com\/wp-content\/uploads\/2025\/05\/suburban-1.png\" alt=\"Suburban\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 200px; --smush-placeholder-aspect-ratio: 200\/200;\">\r\n      <div>Suburban<\/div>\r\n    <\/label>\r\n\r\n    <label class=\"vehiculo-opcion\" data-vehiculo=\"sprinter\">\r\n      <input type=\"radio\" name=\"vehiculo\" value=\"sprinter\" required>\r\n      <img decoding=\"async\" data-src=\"http:\/\/puertoexperience.com\/wp-content\/uploads\/2025\/05\/Splinter.png\" alt=\"Sprinter\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" style=\"--smush-placeholder-width: 200px; --smush-placeholder-aspect-ratio: 200\/200;\">\r\n      <div>Sprinter<\/div>\r\n    <\/label>\r\n  <\/div>\r\n\r\n  <!-- Total -->\r\n  <div id=\"precio-container\" style=\"margin-top: 20px;\">\r\n    <strong>Estimated total: $<span id=\"precio-total\">0.00<\/span> USD<\/strong>\r\n  <\/div>\r\n<button id=\"enviar-reserva\">Book now<\/button>\r\n  <!-- WhatsApp -->\r\n <div class=\"whatsapp-boton-contenedor\">\r\n  <div class=\"whatsapp-boton-wrapper\">\r\n    <a href=\"https:\/\/wa.me\/5213221574758?text=Hola%2C%20estoy%20interesad%40%20en%20reservar%20con%20Puerto%20Experience%20y%20me%20gustar%C3%ADa%20recibir%20m%C3%A1s%20informaci%C3%B3n%20antes%20de%20completar%20mi%20reserva.%20%C2%BFPodr%C3%ADan%20ayudarme%3F\"\r\n       class=\"whatsapp-boton\"\r\n       target=\"_blank\"\r\n       rel=\"noopener noreferrer\">\r\n      \ud83d\udcf2 Book or consult by WhatsApp\r\n    <\/a>\r\n  <\/div>\r\n  <div class=\"whatsapp-leyenda-wrapper\">\r\n    <p class=\"whatsapp-leyenda\">\r\n      Do you have any questions before booking? Write to us without obligation.\r\n    <\/p>\r\n  <\/div>\r\n<\/div>\r\n\r\n<input type=\"hidden\" name=\"trp-form-language\" value=\"en\"\/><\/form>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const precios = {\r\n      marina_vallarta: { sedan: 40, suburban: 89, sprinter: 118 },\r\n      zona_hotelera: { sedan: 52, suburban: 106, sprinter: 130 },\r\n      centro_vallarta: { sedan: 59, suburban: 130, sprinter: 153 },\r\n      zona_romantica: { sedan: 59, suburban: 130, sprinter: 153 },\r\n      zona_sur: { sedan: 71, suburban: 142, sprinter: 165 },\r\n      hotel_barcelo: { sedan: 118, suburban: 177, sprinter: 189 },\r\n     nuevo_vallarta_sur: { sedan: 59, suburban: 130, sprinter: 153 },\r\n     nuevo_vallarta_norte: { sedan: 71, suburban: 142, sprinter: 165 },\r\n      bucerias: { sedan: 71, suburban: 142, sprinter: 165 },\r\n      cruz_huanacaxtle: { sedan: 142, suburban: 206, sprinter: 236 },\r\n      riviera_nayarit: { sedan: 142, suburban: 206, sprinter: 236 },\r\n      punta_mita: { sedan: 153, suburban: 236, sprinter: 265 },\r\n      sayulita: { sedan: 153, suburban: 236, sprinter: 265 }\r\n    };\r\n\r\n    const destino = document.getElementById(\"destino\");\r\n    const tipoViajeRadios = document.querySelectorAll('input[name=\"viaje\"]');\r\n    const vehiculoRadios = document.querySelectorAll('input[name=\"vehiculo\"]');\r\n    const total = document.getElementById(\"precio-total\");\r\n\r\n    function calcular() {\r\n      const destinoValor = destino.value;\r\n      const viaje = document.querySelector('input[name=\"viaje\"]:checked');\r\n      const vehiculo = document.querySelector('input[name=\"vehiculo\"]:checked');\r\n\r\n      if (!destinoValor || !viaje || !vehiculo) {\r\n        total.textContent = \"0.00\";\r\n        return;\r\n      }\r\n\r\n      const base = precios[destinoValor]?.[vehiculo.value];\r\n      const multiplicador = viaje.value === \"redondo\" ? 2 : 1;\r\n      total.textContent = base ? (base * multiplicador).toFixed(2) : \"0.00\";\r\n    }\r\n\r\n    destino.addEventListener(\"change\", calcular);\r\n    tipoViajeRadios.forEach(radio => radio.addEventListener(\"change\", calcular));\r\n    vehiculoRadios.forEach(radio => radio.addEventListener(\"change\", calcular));\r\n\r\n    calcular();\r\n  });\r\n<\/script>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const pasajerosInput = document.getElementById(\"pasajeros\");\r\n    const opciones = {\r\n      sedan: document.querySelector('[data-vehiculo=\"sedan\"]'),\r\n      suburban: document.querySelector('[data-vehiculo=\"suburban\"]'),\r\n      sprinter: document.querySelector('[data-vehiculo=\"sprinter\"]')\r\n    };\r\n\r\n    function actualizarOpcionesVehiculo() {\r\n      const cantidad = parseInt(pasajerosInput.value);\r\n\r\n      function mostrar(nombre) {\r\n        const opcion = opciones[nombre];\r\n        if (opcion) {\r\n          opcion.style.display = \"inline-block\";\r\n          opcion.querySelector('input').disabled = false;\r\n        }\r\n      }\r\n\r\n      function ocultar(nombre) {\r\n        const opcion = opciones[nombre];\r\n        if (opcion) {\r\n          opcion.style.display = \"none\";\r\n          const input = opcion.querySelector('input');\r\n          input.checked = false;\r\n          input.disabled = true;\r\n          opcion.classList.remove(\"selected\");\r\n        }\r\n      }\r\n\r\n      if (!cantidad || cantidad < 1) {\r\n        mostrar(\"sedan\");\r\n        mostrar(\"suburban\");\r\n        mostrar(\"sprinter\");\r\n      } else if (cantidad <= 3) {\r\n        mostrar(\"sedan\");\r\n        mostrar(\"suburban\");\r\n        mostrar(\"sprinter\");\r\n      } else if (cantidad <= 5) {\r\n        ocultar(\"sedan\");\r\n        mostrar(\"suburban\");\r\n        mostrar(\"sprinter\");\r\n      } else if (cantidad <= 12) {\r\n        ocultar(\"sedan\");\r\n        ocultar(\"suburban\");\r\n        mostrar(\"sprinter\");\r\n      } else {\r\n        ocultar(\"sedan\");\r\n        ocultar(\"suburban\");\r\n        ocultar(\"sprinter\");\r\n      }\r\n    }\r\n\r\n    pasajerosInput.addEventListener(\"input\", actualizarOpcionesVehiculo);\r\n    actualizarOpcionesVehiculo();\r\n  });\r\n<\/script>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const radios = document.querySelectorAll('input[name=\"viaje\"]');\r\n    const regreso = document.getElementById('fecha-regreso');\r\n\r\n    radios.forEach(radio => {\r\n      radio.addEventListener('change', () => {\r\n        if (radio.value === \"redondo\") {\r\n          regreso.style.display = \"block\";\r\n          regreso.querySelectorAll(\"input\").forEach(el => el.required = true);\r\n        } else {\r\n          regreso.style.display = \"none\";\r\n          regreso.querySelectorAll(\"input\").forEach(el => el.required = false);\r\n        }\r\n      });\r\n    });\r\n\r\n    \/\/ Ejecutar al cargar\r\n    const seleccionado = document.querySelector('input[name=\"viaje\"]:checked');\r\n    if (seleccionado && seleccionado.value === \"redondo\") {\r\n      regreso.style.display = \"block\";\r\n      regreso.querySelectorAll(\"input\").forEach(el => el.required = true);\r\n    }\r\n  });\r\n<\/script>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const precios = {\r\n      marina_vallarta: { sedan: 40, suburban: 89, sprinter: 118 },\r\n      zona_hotelera: { sedan: 52, suburban: 106, sprinter: 130 },\r\n      centro_vallarta: { sedan: 59, suburban: 130, sprinter: 153 },\r\n      zona_romantica: { sedan: 59, suburban: 130, sprinter: 153 },\r\n      zona_sur: { sedan: 71, suburban: 142, sprinter: 165 },\r\n      hotel_barcelo: { sedan: 118, suburban: 177, sprinter: 189 },\r\n      nuevo_vallarta_sur: { sedan: 59, suburban: 130, sprinter: 153 },\r\n      nuevo_vallarta_norte: { sedan: 59, suburban: 130, sprinter: 153 },\r\n      bucerias: { sedan: 71, suburban: 142, sprinter: 165 },\r\n      cruz_huanacaxtle: { sedan: 142, suburban: 206, sprinter: 236 },\r\n      riviera_nayarit: { sedan: 142, suburban: 206, sprinter: 236 },\r\n      punta_mita: { sedan: 153, suburban: 236, sprinter: 265 },\r\n      sayulita: { sedan: 153, suburban: 236, sprinter: 265 },\r\n    };\r\n\r\n    const destino = document.getElementById(\"destino\");\r\n    const viajeRadios = document.querySelectorAll('input[name=\"viaje\"]');\r\n    const vehiculoRadios = document.querySelectorAll('input[name=\"vehiculo\"]');\r\n    const total = document.getElementById(\"precio-total\");\r\n\r\n    function calcular() {\r\n      const destinoSeleccionado = destino.value;\r\n      const tipoViaje = document.querySelector('input[name=\"viaje\"]:checked');\r\n      const vehiculoSeleccionado = document.querySelector('input[name=\"vehiculo\"]:checked');\r\n\r\n      if (!destinoSeleccionado || !tipoViaje || !vehiculoSeleccionado) {\r\n        total.textContent = \"0.00\";\r\n        return;\r\n      }\r\n\r\n      const precioBase = precios[destinoSeleccionado]?.[vehiculoSeleccionado.value];\r\n      const multiplicador = tipoViaje.value === \"redondo\" ? 2 : 1;\r\n      const totalCalculado = precioBase ? (precioBase * multiplicador).toFixed(2) : \"0.00\";\r\n\r\n      total.textContent = totalCalculado;\r\n    }\r\n\r\n    destino.addEventListener(\"change\", calcular);\r\n    viajeRadios.forEach(r => r.addEventListener(\"change\", calcular));\r\n    vehiculoRadios.forEach(r => r.addEventListener(\"change\", calcular));\r\n\r\n    \/\/ Tambi\u00e9n recalcula cuando se selecciona visualmente un veh\u00edculo (tarjeta)\r\n    document.querySelectorAll(\".vehiculo-opcion\").forEach((card) => {\r\n      card.addEventListener(\"click\", calcular);\r\n    });\r\n  });\r\n<\/script>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const opciones = document.querySelectorAll(\".vehiculo-opcion\");\r\n\r\n    opciones.forEach(opcion => {\r\n      opcion.addEventListener(\"click\", function () {\r\n        opciones.forEach(o => {\r\n          o.classList.remove(\"selected\");\r\n          o.querySelector('input').checked = false;\r\n        });\r\n\r\n        this.classList.add(\"selected\");\r\n        this.querySelector('input').checked = true;\r\n\r\n        \/\/ Si hay funci\u00f3n global calcular(), la invoca\r\n        if (typeof window.calcular === \"function\") {\r\n          window.calcular();\r\n        }\r\n      });\r\n    });\r\n  });\r\n<\/script>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n  document.getElementById(\"enviar-reserva\").addEventListener(\"click\", function (event) {\r\n    event.preventDefault();\r\n\r\n    const destinoSeleccionado = document.getElementById(\"destino\").value;\r\n    const tipoViaje = document.querySelector('input[name=\"viaje\"]:checked')?.value;\r\n    const vehiculoSeleccionado = document.querySelector('input[name=\"vehiculo\"]:checked')?.value;\r\n    const precioTotal = document.getElementById(\"precio-total\").textContent;\r\n\r\n    if (!destinoSeleccionado || !tipoViaje || !vehiculoSeleccionado || !precioTotal) {\r\n      alert(\"Por favor completa todas las opciones antes de reservar.\");\r\n      return;\r\n    }\r\n\r\n    const url = `\/carrito\/?add-to-cart=6680&destino=${encodeURIComponent(destinoSeleccionado)}&viaje=${tipoViaje}&vehiculo=${vehiculoSeleccionado}&precio=${precioTotal}`;\r\n    window.location.href = url;\r\n  });\r\n});\r\n<\/script>\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const llegadaFecha = document.querySelector('input[name=\"fecha_llegada\"]');\r\n    const llegadaHora = document.querySelector('input[name=\"hora_llegada\"]');\r\n    const regresoFecha = document.querySelector('input[name=\"fecha_regreso\"]');\r\n    const regresoHora = document.querySelector('input[name=\"hora_regreso\"]');\r\n\r\n    const ahora = new Date();\r\n    const fechaMinima = new Date(ahora.getTime() + 24 * 60 * 60 * 1000); \/\/ 24 horas despu\u00e9s\r\n\r\n    const fechaMinStr = fechaMinima.toISOString().split(\"T\")[0];\r\n    if (llegadaFecha) llegadaFecha.min = fechaMinStr;\r\n    if (regresoFecha) regresoFecha.min = fechaMinStr;\r\n\r\n    function validarFechaYHora(fechaInput, horaInput) {\r\n      const fechaSeleccionada = new Date(fechaInput.value + 'T' + (horaInput.value || '00:00'));\r\n      if (fechaSeleccionada < fechaMinima) {\r\n        alert(\"La fecha y hora deben ser al menos 24 horas despu\u00e9s del momento actual.\");\r\n        fechaInput.value = \"\";\r\n        horaInput.value = \"\";\r\n      }\r\n    }\r\n\r\n    if (llegadaFecha && llegadaHora) {\r\n      llegadaFecha.addEventListener(\"change\", () => validarFechaYHora(llegadaFecha, llegadaHora));\r\n      llegadaHora.addEventListener(\"change\", () => validarFechaYHora(llegadaFecha, llegadaHora));\r\n    }\r\n\r\n    if (regresoFecha && regresoHora) {\r\n      regresoFecha.addEventListener(\"change\", () => validarFechaYHora(regresoFecha, regresoHora));\r\n      regresoHora.addEventListener(\"change\", () => validarFechaYHora(regresoFecha, regresoHora));\r\n    }\r\n  });\r\n<\/script>\r\n\r\n<!-- Integraci\u00f3n reCAPTCHA + Validaci\u00f3n Final -->\r\n<script src=\"https:\/\/www.google.com\/recaptcha\/api.js?render=6Lcj5WYrAAAAAEOj7HVkTXeWS3_m2ozobyakw7Cm\"><\/script>\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const boton = document.getElementById(\"enviar-reserva\");\r\n\r\n    boton.addEventListener(\"click\", function (event) {\r\n      event.preventDefault();\r\n\r\n      grecaptcha.ready(function () {\r\n        grecaptcha.execute('6Lcj5WYrAAAAAEOj7HVkTXeWS3_m2ozobyakw7Cm', { action: 'submit' }).then(function (token) {\r\n          continuarConReserva();\r\n        });\r\n      });\r\n    });\r\n\r\n    function validarFinalFormulario() {\r\n      const pasajeros = parseInt(document.getElementById(\"pasajeros\").value);\r\n      const vehiculo = document.querySelector('input[name=\"vehiculo\"]:checked')?.value;\r\n\r\n      if (pasajeros <= 3 && ![\"sedan\", \"suburban\", \"sprinter\"].includes(vehiculo)) {\r\n        alert(\"Veh\u00edculo no v\u00e1lido para la cantidad de pasajeros.\");\r\n        return false;\r\n      }\r\n      if (pasajeros > 3 && pasajeros <= 5 && ![\"suburban\", \"sprinter\"].includes(vehiculo)) {\r\n        alert(\"Debes seleccionar un Suburban o Sprinter para m\u00e1s de 3 pasajeros.\");\r\n        return false;\r\n      }\r\n      if (pasajeros > 5 && pasajeros <= 12 && vehiculo !== \"sprinter\") {\r\n        alert(\"Sprinter es el \u00fanico veh\u00edculo permitido para m\u00e1s de 5 pasajeros.\");\r\n        return false;\r\n      }\r\n      return true;\r\n    }\r\n\r\n    function continuarConReserva() {\r\n      const destino = document.getElementById(\"destino\").value;\r\n      const viaje = document.querySelector('input[name=\"viaje\"]:checked')?.value;\r\n      const vehiculo = document.querySelector('input[name=\"vehiculo\"]:checked')?.value;\r\n      const precio = document.getElementById(\"precio-total\").textContent;\r\n\r\n      if (!destino || !viaje || !vehiculo || !precio) {\r\n        alert(\"Por favor completa todos los campos requeridos.\");\r\n        return;\r\n      }\r\n\r\n      if (!validarFinalFormulario()) return;\r\n\r\n      const url = `\/carrito\/?add-to-cart=6680&destino=${encodeURIComponent(destino)}&viaje=${viaje}&vehiculo=${vehiculo}&precio=${precio}`;\r\n      window.location.href = url;\r\n    }\r\n  });\r\n<\/script>\r\n\r\n\r\n<script>\r\n  document.addEventListener(\"DOMContentLoaded\", function () {\r\n    const pasajerosInput = document.getElementById(\"pasajeros\");\r\n    const errorPasajeros = document.getElementById(\"error-pasajeros\");\r\n\r\n    function mostrarError(input, errorDiv, mensaje) {\r\n      errorDiv.textContent = mensaje;\r\n      errorDiv.style.display = \"block\";\r\n      input.classList.add(\"input-error\");\r\n    }\r\n\r\n    function ocultarError(input, errorDiv) {\r\n      errorDiv.style.display = \"none\";\r\n      errorDiv.textContent = \"\";\r\n      input.classList.remove(\"input-error\");\r\n    }\r\n\r\n    \/\/ Validaci\u00f3n final antes de continuar reserva\r\n    window.validarFinalFormulario = function () {\r\n      const pasajeros = parseInt(pasajerosInput.value);\r\n      const vehiculo = document.querySelector('input[name=\"vehiculo\"]:checked')?.value;\r\n\r\n      ocultarError(pasajerosInput, errorPasajeros); \/\/ limpia mensaje previo\r\n\r\n      if (!vehiculo || isNaN(pasajeros)) {\r\n        mostrarError(pasajerosInput, errorPasajeros, \"Por favor completa todos los campos requeridos.\");\r\n        return false;\r\n      }\r\n\r\n      if (pasajeros <= 3 && ![\"sedan\", \"suburban\", \"sprinter\"].includes(vehiculo)) {\r\n        mostrarError(pasajerosInput, errorPasajeros, \"Veh\u00edculo no v\u00e1lido para 1 a 3 pasajeros.\");\r\n        return false;\r\n      }\r\n\r\n      if (pasajeros > 3 && pasajeros <= 5 && ![\"suburban\", \"sprinter\"].includes(vehiculo)) {\r\n        mostrarError(pasajerosInput, errorPasajeros, \"Selecciona Suburban o Sprinter para 4 o 5 pasajeros.\");\r\n        return false;\r\n      }\r\n\r\n      if (pasajeros > 5 && pasajeros <= 12 && vehiculo !== \"sprinter\") {\r\n        mostrarError(pasajerosInput, errorPasajeros, \"Sprinter es el \u00fanico veh\u00edculo permitido para m\u00e1s de 5 pasajeros.\");\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    };\r\n\r\n    \/\/ Borra el error cuando se cambia el valor\r\n    pasajerosInput.addEventListener(\"input\", () => {\r\n      ocultarError(pasajerosInput, errorPasajeros);\r\n    });\r\n  });\r\n<\/script>\r\n\r\n<\/body>\r\n<\/html>\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Elije, destino, dias, horarios, tipo de viaje y el vehiculo, para tu transporte En esta secci\u00f3n puedes reservar tus fechas y horatios segun tu necesidad, El pago en en linea para tu comodidad. Pagas via Pay Pal o con tarjetas debito o credito Formulario Puerto Experience Reserva tu experiencia Nombre completo * Correo electr\u00f3nico * &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/puertoexperience.com\/en\/reservaciones-pe\/\"> <span class=\"screen-reader-text\">Reservaciones PE<\/span> Read More &raquo;<\/a><\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"page-builder","ast-global-header-display":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"class_list":["post-6617","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/puertoexperience.com\/en\/wp-json\/wp\/v2\/pages\/6617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/puertoexperience.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/puertoexperience.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/puertoexperience.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/puertoexperience.com\/en\/wp-json\/wp\/v2\/comments?post=6617"}],"version-history":[{"count":0,"href":"https:\/\/puertoexperience.com\/en\/wp-json\/wp\/v2\/pages\/6617\/revisions"}],"wp:attachment":[{"href":"https:\/\/puertoexperience.com\/en\/wp-json\/wp\/v2\/media?parent=6617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}