Approfitta della comodità di programmare senza problemi.
Prova la facilità e l'efficienza di pianificare la tua giornata spa perfetta!
Massaggio presso il nostro salone
Goditi la tua sessione completa al salone Nakee.
Massaggio presso la tua sede
Fatti coccolare a casa tua, in hotel o in villa.
Il prezzo varia a seconda della distanza, del metodo di trasporto (moto o taxi) e del numero di terapisti e di ore richieste.
Passo 1. Scegli l'orario e il luogo che preferisciLa prenotazione è disponibile
da 10:00 AM a 6:00 PM
📍 Appunta la mia posizione
🔄 Azzeramento della posizione
Non è ancora stato selezionato alcun pin di localizzazione. Inserisci il tuo pin sulla mappa per procedere.
Indirizzo stradale *
Numero piatto *
Passo 2. Completa la tua PrenotazioneSeleziona l'orario e l'indirizzo del tuo massaggio. Una volta fatto, potrai inserire il resto dei dettagli della tua prenotazione.
La prenotazione è disponibile
da 10:00 AM a 10:00 PM
Nome *
Scegli il tuo servizio:
Clicca per selezionare il servizio
Scegli il tuo terapeuta:
Clicca per selezionare il terapeuta
Seleziona il terapista o lascia che ti assegniamo il terapista giusto in base al servizio che hai richiesto.
Richiesta aggiuntiva
Invia tramite WhatsApp
OPPURE
Invia tramite Line
Line
WhatsApp
⚠️ Assicurati di inviarci la richiesta di prenotazione tramite l'app che hai scelto. Confermeremo la tua prenotazione solo tramite WhatsApp o Line.
ℹ️ Un messaggio formattato sarà generato in base alla tua selezione dell'appuntamento. Puoi inviarlo tramite l'app di messaggistica preferita elencata sopra.
';
$( window ).on( "resize", function() { on_resize(); });
on_resize();
attentionBoxShift();
$("#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);
setTimeout(function(){ $("body").addClass("product_chooser"); },300);
});
$("#theropist_list_pop_close").on('click',function(){
$("#theropist_list_pop").hide(300);
setTimeout(function(){ $("body").removeClass("product_chooser"); },20);
});
$(".service").each(function(){
var t = $(this);
t.find("table tr").each(function(){
var tr = $(this);
tr.append("
Seleziona Annulla ");
});
});
$(".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();
});
$(".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();
});
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/it/prenota-un-appuntamento/",
});
});
$("#customername,#customerphone,#visitqty,#visit-date,#visit-time").on('change',function(){
attentionBoxShift();
});
$("#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; }
} else {
$(".home-massage").slideUp(400);
$(".book_apointment .visitinfo").show();
$(".top-booking-bar-menu,.book_apointment,.shop_massage_hours").slideDown(400);
}
outside_price_update();
attentionBoxShift();
});
$(".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("
Hai creato con successo la tua richiesta di appuntamento!
");
window.location.href="https://www.nakee.spa/it/ringraziamenti-per-la-prenotazione/?"+params+"&msg="+m;
}
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("Il nome è obbligatorio!"); },201);
return false;
}
/* if ($("#customerphone").val() == ''){
$("#customerphone").addClass('error');
$('html, body').animate({ scrollTop: $('#customerphone').offset().top-70 }, 200);
setTimeout( () => { alert("Il numero di telefono è obbligatorio!"); },201);
return false;
} */
if ($("#visitqty").val() == '' || geusts < 1){
$("#visitqty").addClass('error');
$('html, body').animate({ scrollTop: $('#visitqty').offset().top-70 }, 200);
setTimeout( () => { alert("Seleziona il numero di ospiti!"); },201);
return false;
}
if ($("#visit-date").val() == ''){
$("#visit-date").addClass('error');
$('html, body').animate({ scrollTop: $('#visit-date').offset().top-70 }, 200);
setTimeout( () => { alert("Scegli i dati del tuo appuntamento!"); },201);
return false;
}
if ($("#visit-time").val() == ''){
$("#visit-time").addClass('error');
$('html, body').animate({ scrollTop: $('#visit-time').offset().top-70 }, 200);
setTimeout( () => { alert("Scegli l'orario dell'appuntamento!"); },201);
return false;
}
if (!timeValid) {
setTimeout( () => { alert("Assicurati che l'orario dell'appuntamento sia valido!"); },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("Scegli il tuo servizio!"); },201);
return false;
}
var u = '',brek = '%0A';
switch (t){
case 'whatsapp': brek = '%0A'; break;
case 'line': brek = '%0D%0A'; break;
}
u += encodeURIComponent('Booking Information:')+brek;
u += encodeURIComponent('Massage '+(massage_type == 1 ? "AT OUR SHOP ("+$(".branch_indicator").data('name')+")" : "OUTSIDE AT YOUR LOCATION"))+brek;
if (massage_type == 2)
u += encodeURIComponent(($('input[name="massage-bed"]:checked').val() == '1' ? "Portable Massage Bed: Included" : "Portable Massage Bed: NOT Included"))+brek;
u += brek+encodeURIComponent('Name: '+$("#customername").val())+brek;
//u += encodeURIComponent('phone number: '+$("#customerphone").val())+brek;
u += encodeURIComponent('Number of guests: '+$("#visitqty").val()+' '+(geusts <= 1 ? 'person' : 'persons'))+brek;
u += encodeURIComponent('Preferred visit time: '+ $("#visit-date").val() + ' ' + $("#visit-time").val() )+brek;
u += brek+encodeURIComponent('Required Service: ')+brek;
/* $(".choosed_products li.prod-item").each(function(){
u += encodeURIComponent(' > '+$(this).text()+' ('++' ฿)')+brek;
}); */
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 += encodeURIComponent('> '+tile)+brek;
u += encodeURIComponent(' - '+tr.find('td:eq(0)').text() + ' ['+formatPrice(pr)+' ฿]')+brek;
});
if (tot != 0) {
if ($('input[name="massage-bed"]:checked').val() == '1') {
u += brek+encodeURIComponent('Taxi Transport For Massage Bed: '+taxi+' ฿')+brek;
tot += parseInt(taxi);
}
/* u += encodeURIComponent('------')+brek;
u += encodeURIComponent('Total Price: '+formatPrice(tot)+' ฿')+brek; */
}
if ($(".choosed_theropist li.prod-item").length > 0) {
u += brek+encodeURIComponent('Required Therapist: ')+brek;
$(".choosed_theropist li.prod-item").each(function(){
u += encodeURIComponent(' > '+$(this).text())+brek;
});
} else {
u += brek+encodeURIComponent('Chosen Therapist: You can choose for ')+(geusts <= 1 ? 'me' : 'us')+'.%0A'+brek;
}
if ($("#clientnote").val() != '')
u += brek+encodeURIComponent('Additional Request: ')+brek+encodeURIComponent($("#clientnote").val())+brek;
if (massage_type == 1) {
u += brek+encodeURIComponent('📍 Branch Location: ')+brek+encodeURIComponent($(".branch_indicator").data('name'));
u += brek+encodeURIComponent('🗺️ Google Maps: ')+encodeURIComponent($(".branch_indicator").data('maplink'));
} else {
u += brek+encodeURIComponent('📍 Your Location Map: '+$("#address_url").val())+brek;
u += encodeURIComponent('Your Address: '+$("#visit-address").val())+brek;
u += 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 === ''
? "L'orario dell'appuntamento deve essere compreso tra le 10:00 e le 22:00."
: "L'orario dell'appuntamento deve essere compreso tra le 10:00 e le 18:00.");
} else if (!isVisitTimeValid(suffix)) {
timeField.addClass('error');
timeValid = 0;
alert("L “orario dell” appuntamento deve essere di almeno +30 minuti da adesso.");
}
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) {
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 cutoff = new Date(nowBangkok);
cutoff.setHours(suffix === '' ? 22 : 18, 0, 0, 0);
let dateStr, timeStr;
if (nowPlus30 > cutoff) {
const tomorrow = new Date(nowBangkok);
tomorrow.setDate(tomorrow.getDate() + 1);
dateStr = tomorrow.toISOString().split('T')[0];
timeStr = '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}`;
}
$(`#visit-date${suffix}`).val(dateStr).attr('min', dateStr);
$(`#visit-time${suffix}`).attr('min', timeStr);
}
// Initialize both sets
getKohSamuiBookingTime('');
getKohSamuiBookingTime('-o');
setInterval(function(){ clock_nakee(); },1000);
clock_nakee();
lightbox.option({
fadeDuration: 200,
resizeDuration: 200,
wrapAround: true
});
});-->