Disfruta de la comodidad de una programación sin fisuras.
¡Experimenta la facilidad y eficacia de planificar tu día de spa perfecto!
Masaje en nuestro salón
Disfruta de tu sesión completa en el salón Nakee.
Masaje en tu domicilio
Déjate mimar en tu casa, hotel o chalet.
El precio variará en función de la distancia, el medio de transporte (moto o taxi) y el número de terapeutas y horas que solicites.
Paso 1. Elige la hora y el lugar que prefieras
Horario especial de trabajo Reservar es posible
de 10:00 AM a 6:00 PM
Selecciona arriba la fecha y hora de reserva que desees y, a continuación, sitúa el pin de tu ubicación en el mapa. Lo utilizaremos para calcular la distancia y actualizar el precio en función de tu ubicación.
📍 Fijar mi ubicación
🔄 Restablecer ubicación
Aún no se ha seleccionado ninguna chincheta. Por favor, coloca tu pin en el mapa para continuar.
Dirección *
Número de piso *
Paso 2. Completa tu ReservaSelecciona la hora y la dirección de tu masaje. Una vez hecho esto, podrás rellenar el resto de los datos de tu Reserva.
Horario especial de trabajo Reservar es posible
de 10:00 AM a 10:00 PM
Nombre *
Elige tu servicio:
Haz clic para seleccionar el servicio
Por favor, añade el servicio.
Elige a tu terapeuta:
Haz clic para seleccionar el terapeuta
Selecciona el terapeuta o deja el campo vacío para que te asignemos el terapeuta adecuado según el servicio que solicites.
Solicitud adicional
⚠️ Asegúrate de enviarnos la solicitud de reserva a través de la aplicación que hayas elegido. Sólo confirmaremos tu Reserva por WhatsApp o Line.
ℹ️ Se generará un mensaje formateado basado en su selección de cita. Puede enviarlo a través de la aplicación de mensajería preferida que se lista arriba.
';
$( window ).on( "resize", function() { on_resize(); });
on_resize();
attentionBoxShift();
setTimeout(function(){ load_therapists_list(); },2000);
$("#view_products,.choosed_products,#open_service-menu").on('click',function(){
$("#products_list_pop").show(300);
$(".choosed_products").addClass('error');
setTimeout(function(){ $("body").addClass("product_chooser"); },300);
});
$("#products_list_pop_close").on('click',function(){
$("#products_list_pop").hide(300);
setTimeout(function(){ $("body").removeClass("product_chooser"); },20);
});
$("#view_theropist,.choosed_theropist,#open_therapists,#open_therapists_br").on('click',function(){
$("#theropist_list_pop").show(300);
if (ajax_runned == 0) { ajax_runned = 1; load_therapists_list(); }
setTimeout(function(){ $("body").addClass("product_chooser"); },300);
});
$("#open_holiday,#open_holiday_br").on('click',function(){
$("#holiday_list_pop").show(300);
});
$(window).on('scroll', function () {
if (ajax_runned != 0) return;
ajax_runned = 1;
load_therapists_list();
});
$("#theropist_list_pop_close").on('click',function(){
$("#theropist_list_pop").hide(300);
setTimeout(function(){ $("body").removeClass("product_chooser"); },20);
});
$("#holiday_list_pop_close").on('click',function(){
$("#holiday_list_pop").hide(300);
});
$(".service").each(function(){
var t = $(this);
t.find("table tr").each(function(){
var tr = $(this);
tr.append("
Seleccionar Cancelar ");
});
});
$(".add_prod.btn").on('click',function(){
var t = $(this), p = t.parents('.service'), tr = t.parents('tr');
tr.addClass('active');
var tile = p.find(".prod-title h2").text();
if (lang != 'th')
tile += ' ( '+p.data('en')+' )';
var pr = 0;
if ( massage_type == 1 ) pr = tr.data('price'); else pr = tr.data('outside-price');
$(".choosed_products ul").append('
'+checkmark+tile+' '+' - '+tr.find('td:eq(0)').text() + ' ['+formatPrice(pr)+' ฿]' +' ');
if ($(".choosed_products ul li").length == 0 ) {
$(".choosed_products .no-prod").show();
$("#products_list_pop_close").removeClass("selected");
} else {
$(".choosed_products .no-prod").hide();
$("#products_list_pop_close").addClass("selected");
}
calculate_totals_html();
attentionBoxShift();
});
$(".remove_prod.btn").on('click',function(){
var t = $(this), p = t.parents('.service'), tr = t.parents('tr');
tr.removeClass('active');
$(".choosed_products ul ."+p.attr('id')+".pid-"+tr.data('prod_id')).remove();
if ($(".choosed_products ul li").length == 0 ) {
$(".choosed_products .no-prod").show();
$("#products_list_pop_close").removeClass("selected");
} else {
$(".choosed_products .no-prod").hide();
$("#products_list_pop_close").addClass("selected");
}
calculate_totals_html();
attentionBoxShift();
});
var ga4EventSent = false;
$("#customername,#customerphone,#visitqty,#visit-date,#visit-time").on('keyup',function(){
$(this).removeClass('error');
if (ga4EventSent) return;
ga4EventSent = true;
gtag("event", "waBookingFormStart", {
menu_item_name: "Start WhatsApp Booking Form",
menu_item_url: "https://www.nakee.spa/es/reserva-online/reservar-cita-en-la-playa-de-bo-phut/",
});
});
$("#customername,#customerphone,#visitqty,#visit-date,#visit-time").on('change',function(){
attentionBoxShift();
});
$('#visit-date, #visit-time').on('keyup change', function() {
var holiday = checkBookingConflict('');
if (holiday){
$("#visit-date, #visit-time").addClass('error');
alert(holiday);
}
});
$('#visit-date-o, #visit-time-o').on('keyup change', function() {
var holiday = checkBookingConflict('-o');
if (holiday){
$("#visit-date-o, #visit-time-o").addClass('error');
alert(holiday);
}
});
$("#submit_req").on('click', function(){
var m = validate_message('whatsapp');
if (m == false) return;
$("#submit_req_action").attr('href', 'https://api.whatsapp.com/send?phone=66990655880&&text='+m);
document.getElementById("submit_req_action").click();
success_action(m);
});
$("#submit_req_line").on('click', function(){
var m = validate_message('line');
if (m == false) return;
$("#submit_req_action_line").attr('href', 'https://line.me/R/oaMessage/%40355kcqpj/?'+m);
document.getElementById("submit_req_action_line").click();
success_action(m);
});
$(".massage-type-selector .type-option").on('click', function(){
var t = $(this);
$(".massage-type-selector .type-option").removeClass("selected");
$(this).addClass("selected");
if (massage_type == $(this).data('massagetype')) return;
massage_type = $(this).data('massagetype');
if (massage_type == 2) {
$(".home-massage").slideDown(400);
$(".book_apointment .visitinfo").hide();
$(".top-booking-bar-menu,.book_apointment,.shop_massage_hours").slideUp(400);
if (map_loaded == 0) { initMap(); map_loaded = 1; setTimeout(function(){ $("#visit-date-o,#visit-time-o").addClass("attention-box"); },100); }
} else {
$(".home-massage").slideUp(400);
$(".book_apointment .visitinfo").show();
$(".top-booking-bar-menu,.book_apointment,.shop_massage_hours").slideDown(400);
}
outside_price_update();
});
$(".massage-beds label").on('click', function(){
var t = $(this);
$(".massage-beds label").removeClass('selected');
t.addClass('selected');
calculate_totals_html();
});
function success_action(m){
var params = "n=" + $("#customername").val();
if ($("#customerphone").length != 0)
params += "&p=" + $("#customerphone").val();
$(".book_apointment").empty().append("
¡Has creado con éxito tu consulta de cita!
");
window.location.href="https://www.nakee.spa/es/reservas-gracias/?"+params+"&msg="+m;
}
function load_therapists_list() {
if ($("#theropist_list_pop .theropists").hasClass("loaded")) return;
$.ajax({
url: 'https://www.nakee.spa/wp-admin/admin-ajax.php' ,
method: 'POST',
dataType : "html",
data: {
action: 'booking_terapist_list',
branch_id: 729,
lng: 'es'
},
success: function(response) {
$("#theropist_list_pop .theropists").addClass("loaded").empty().append(response);
$(".theropists .theropist").on('click',function(){
var t = $(this);
if (t.hasClass('vacation')) return;
if (!t.hasClass('active')){
t.addClass('active');
$(".choosed_theropist ul").append('
'+checkmark+t.data('en')+' ');
} else {
t.removeClass('active');
$('.prod-item.therop-'+t.attr('id')).remove();
}
if ($(".choosed_theropist ul li").length == 0 ) $(".choosed_theropist .no-prod").show(); else $(".choosed_theropist .no-prod").hide();
attentionBoxShift();
});
renderBookingHolidayTable('holiday_list_table');
},
error: function() {
alert('There was an error with loading the therapists list.');
}
});
}
function validate_message(t){
var geusts = parseInt($("#visitqty").val());
if ($("#customername").val() == ''){
$("#customername").addClass('error');
$('html, body').animate({ scrollTop: $('#customername').offset().top-70 }, 200);
setTimeout( () => { alert("¡El nombre es obligatorio!"); },201);
return false;
}
/* if ($("#customerphone").val() == ''){
$("#customerphone").addClass('error');
$('html, body').animate({ scrollTop: $('#customerphone').offset().top-70 }, 200);
setTimeout( () => { alert("El número de teléfono es obligatorio."); },201);
return false;
} */
if ($("#visitqty").val() == '' || geusts < 1){
$("#visitqty").addClass('error');
$('html, body').animate({ scrollTop: $('#visitqty').offset().top-70 }, 200);
setTimeout( () => { alert("Selecciona el número de invitados"); },201);
return false;
}
if ($("#visit-date").val() == ''){
$("#visit-date").addClass('error');
$('html, body').animate({ scrollTop: $('#visit-date').offset().top-70 }, 200);
setTimeout( () => { alert("Por favor, ¡elige los datos de tu cita!"); },201);
return false;
}
if ($("#visit-time").val() == ''){
$("#visit-time").addClass('error');
$('html, body').animate({ scrollTop: $('#visit-time').offset().top-70 }, 200);
setTimeout( () => { alert("Por favor, ¡elige la hora de tu cita!"); },201);
return false;
}
if (!timeValid) {
setTimeout( () => { alert("Por favor, ¡asegúrate de que la hora de tu cita es válida!"); },201);
return false;
}
var holiday = checkBookingConflict('');
if (holiday != false){
$("#visit-date, #visit-time").addClass('error');
$('html, body').animate({ scrollTop: $('#visit-date').offset().top-70 }, 200);
setTimeout( () => { alert(holiday); },201);
return false;
}
if ($(".choosed_products li.prod-item").length == 0){
$(".choosed_products").addClass('error');
$('html, body').animate({ scrollTop: $('.products_choice').offset().top-70 }, 200);
setTimeout( () => { alert("Por favor, ¡elige tu servicio!"); },201);
return false;
}
var u = '',brek = '%0A';
switch (t){
case 'whatsapp': brek = '%0A'; break;
case 'line': brek = '%0D%0A'; break;
}
u += encodeURIComponent('Booking Information:');
u += brek+encodeURIComponent('Massage '+(massage_type == 1 ? "AT OUR SHOP ("+$(".branch_indicator").data('name')+")" : "OUTSIDE AT YOUR LOCATION"));
if (massage_type == 2)
u += brek+encodeURIComponent(($('input[name="massage-bed"]:checked').val() == '1' ? "Portable Massage Bed: Included" : "Portable Massage Bed: NOT Included"));
u += brek+brek+encodeURIComponent('Name: '+$("#customername").val());
//u += brek+encodeURIComponent('phone number: '+$("#customerphone").val());
u += brek+encodeURIComponent('Number of guests: '+$("#visitqty").val()+' '+(geusts <= 1 ? 'person' : 'persons'));
u += brek+encodeURIComponent('Preferred visit time: '+ $("#visit-date").val() + ' ' + $("#visit-time").val() );
u += brek+brek+encodeURIComponent('Required Service: ');
/* $(".choosed_products li.prod-item").each(function(){
u += brek+encodeURIComponent(' > '+$(this).text()+' ('++' ฿)');
}); */
var tot = 0;
$(".services tr.active").each(function(){
var tr=$(this), sp = $(this).parents('.service'), h2=sp.find('.prod-title h2'), pr = 0;
if ( massage_type == 1 ) pr = $(this).data('price'); else pr = $(this).data('outside-price');
tot += parseInt(pr);
var tile = h2.text();
if (lang != 'th')
tile += ' ( '+sp.data('en')+' )';
u += brek+encodeURIComponent('> '+tile);
u += brek+encodeURIComponent(' - '+tr.find('td:eq(0)').text() + ' ['+formatPrice(pr)+' ฿]');
});
if (tot != 0) {
if ($('input[name="massage-bed"]:checked').val() == '1') {
u += brek+brek+encodeURIComponent('Taxi Transport For Massage Bed: '+taxi+' ฿');
tot += parseInt(taxi);
}
/* u += encodeURIComponent('------')+brek;
u += encodeURIComponent('Total Price: '+formatPrice(tot)+' ฿')+brek; */
}
if ($(".choosed_theropist li.prod-item").length > 0) {
u += brek+brek+encodeURIComponent('Required Therapist: ');
$(".choosed_theropist li.prod-item").each(function(){
u += brek+encodeURIComponent(' > '+$(this).text());
});
} else {
u += brek+brek+encodeURIComponent('Chosen Therapist: You can choose for ')+(geusts <= 1 ? 'me' : 'us')+'.%0A';
}
if ($("#clientnote").val() != '')
u += brek+brek+encodeURIComponent('Additional Request: ')+brek+encodeURIComponent($("#clientnote").val());
u += brek+brek+encodeURIComponent('📍 Branch Location: ')+brek+encodeURIComponent($(".branch_indicator").data('name'));
if (massage_type == 1) {
u += brek+encodeURIComponent('🗺️ Google Maps: ')+encodeURIComponent($(".branch_indicator").data('maplink'));
} else {
u += brek+brek+encodeURIComponent('📍 Your Location Map: '+$("#address_url").val());
u += brek+encodeURIComponent('Your Address: '+$("#visit-address").val());
u += brek+encodeURIComponent('Your Room/Flat Number: '+$("#visit-flat").val());
}
return u;
}
$("#visit-address, #visit-flat").on('change click keyup', function(){
outside_service_validation();
attentionBoxShift();
});
$("#visit-date,#visit-date-o").on('change', function(){
const selectedDate = $(this).val();
const today = new Date();
const todayStr = today.toISOString().split('T')[0];
let targetTime;
if (selectedDate === todayStr) {
const nowPlus1Hr = new Date(today.getTime() + 60 * 60 * 1000);
const hh = nowPlus1Hr.getHours().toString().padStart(2, '0');
const mm = nowPlus1Hr.getMinutes().toString().padStart(2, '0');
targetTime = `${hh}:${mm}`;
} else {
targetTime = '10:00';
}
$('#'+$(this).attr('id').replace('date','time')).val(targetTime).attr('min', targetTime).attr('placeholder', targetTime);
});
['', '-o'].forEach(suffix => {
$(`#visit-date${suffix}, #visit-time${suffix}`).on('change', function () {
timeValid = 0;
const date = $(`#visit-date${suffix}`).val();
const time = $(`#visit-time${suffix}`).val();
if (!date || !time) return;
validateEnteredTime(suffix);
if (suffix == '-o') {
outside_service_validation();
attentionBoxShift();
}
});
});
// Icon click triggers focus on sibling input
$(".caln-icon, .time-icon").on('click', function () {
$(this).parent().find('input').trigger('focus');
});
// Validate entered time
function validateEnteredTime(suffix) {
timeValid = 1;
const timeField = $(`#visit-time${suffix}`);
if (!isTimeInAllowedRange(suffix)) {
timeField.addClass('error');
timeValid = 0;
alert(suffix === ''
? "La hora de la cita debe ser entre las 10 de la mañana y las 10 de la noche."
: "La hora de la cita debe ser entre las 10 de la mañana y las 6 de la tarde.");
getKohSamuiBookingTime(suffix, false);
} else if (!isVisitTimeValid(suffix)) {
timeField.addClass('error');
timeValid = 0;
alert("La hora de la cita debe ser como mínimo +30 minutos a partir de ahora.");
}
if (timeValid) timeField.removeClass('error');
}
// Check if time is +30 min from now (in Bangkok)
function isVisitTimeValid(suffix) {
const date = $(`#visit-date${suffix}`).val();
const time = $(`#visit-time${suffix}`).val();
if (!date || !time) return false;
const selected = new Date(`${date}T${time}`);
const now = new Date();
const nowBangkok = new Date(now.toLocaleString("en-US", { timeZone: "Asia/Bangkok" }));
const nowPlus30 = new Date(nowBangkok.getTime() + 30 * 60 * 1000);
return selected >= nowPlus30;
}
// Check if time is in range (10:00 to 22:00 or 18:00)
function isTimeInAllowedRange(suffix) {
const time = $(`#visit-time${suffix}`).val();
if (!time) return false;
const [hh, mm] = time.split(':').map(Number);
if (isNaN(hh) || isNaN(mm)) return false;
const maxHour = suffix === '' ? 22 : 18;
return hh >= 10 && (hh < maxHour || (hh === maxHour && mm === 0));
}
// Set initial values
// based on Bangkok time and cutoffs
function getKohSamuiBookingTime(suffix, doDate) {
const now = new Date();
const nowBangkok = new Date(now.toLocaleString("en-US", { timeZone: "Asia/Bangkok" }));
const nowPlus30 = new Date(nowBangkok.getTime() + 30 * 60 * 1000);
const nowPlus40 = new Date(nowBangkok.getTime() + 50 * 60 * 1000);
const cutoff = new Date(nowBangkok);
cutoff.setHours(suffix === '' ? 22 : 18, 0, 0, 0);
const start = new Date(nowBangkok);
start.setHours(10, 0, 0, 0);
let dateStr, timeStr, timeStr1;
if (nowPlus30 > cutoff || nowPlus30 < start) {
const tomorrow = new Date(nowBangkok);
tomorrow.setDate(tomorrow.getDate() + 1);
dateStr = tomorrow.toISOString().split('T')[0];
timeStr = '10:00';
timeStr1 = '10:00';
} else {
dateStr = nowBangkok.toISOString().split('T')[0];
const hh = nowPlus30.getHours().toString().padStart(2, '0');
const mm = nowPlus30.getMinutes().toString().padStart(2, '0');
timeStr = `${hh}:${mm}`;
const hh1 = nowPlus40.getHours().toString().padStart(2, '0');
const mm1 = nowPlus40.getMinutes().toString().padStart(2, '0');
timeStr1 = `${hh1}:${mm1}`;
}
if (doDate) $(`#visit-date${suffix}`).val(dateStr).attr('min', dateStr);
$(`#visit-time${suffix}`).val(timeStr1).attr('min', timeStr);
timeValid = 1;
}
// Initialize both sets
getKohSamuiBookingTime('', true);
getKohSamuiBookingTime('-o', true);
setInterval(function(){ clock_nakee(); },1000);
clock_nakee();
lightbox.option({
fadeDuration: 200,
resizeDuration: 200,
wrapAround: true
});
});-->