Accommodations
Rooms designed for your rest
Three types of apartments to suit every travel style—from couples seeking privacy to groups sharing a stay. All feature air conditioning, high-speed Wi-Fi, and the peace and quiet you need after a full day in the city. No unnecessary luxuries, no hidden fees: just the comfort that matters, in the best location in Florianópolis.
BOOK DIRECT · BEST PRICE
12% off when you book through our website
On the official website of Hotel Farol da Ilha, the Flexible Rate already includes a 12% discount, with no coupon required. Choose your dates, view the price, and confirm your reservation online, with direct assistance from our team.
Book directly on the website and save money
Best price guaranteed, immediate confirmation, and no extra fees.
';
for(var d=1; d <= dim; d++){
var dt = new Date(y, m, d);
var cls = 'cal-day';
if (dt
state.ci&&dt'+d+' ';
}
dEl.innerHTML = html;
}
function renderCal() {
renderMonth(view, $('fbw-cal-t0'), $('fbw-cal-d0'));
renderMonth(addMonths(view, 1), $('fbw-cal-t1'), $('fbw-cal-d1'));
$('fbw-cal-prev').disabled = (view.getFullYear() === today.getFullYear() && view.getMonth() === today.getMonth());
var sum=$('fbw-cal-sum'),ap=$('fbw-cal-apply');
if(state.ci&&state.co){
var n=nights();
sum.innerHTML='
'+n+(n===1?' night':' nights')+' · '+state.ci.getDate()+' '+MONTHS_S[state.ci.getMonth()]+' → '+state.co.getDate()+' '+MONTHS_S[state.co.getMonth()];
ap.disabled = false;
} else if (state.ci) {
sum.innerHTML = 'Entry
'+state.ci.getDate()+' '+MONTHS_S[state.ci.getMonth()]+' · 'Select the exit date';
ap.disabled=true;
}else{
sum.textContent='Select the start date';
ap.disabled=true;
}
}
function onDay(e){
var el=e.target.closest('.cal-day');
if(!el||el.classList.contains('empty')||el.classList.contains('disabled'))return;
var p = el.getAttribute('data-d').split('-');
var dt = new Date(+p[0], +p[1] - 1, +p[2]);
if (state.picking === 'ci' || !state.ci || (state.ci && state.co)) {
state.ci = dt; state.co = null; state.picking = 'co';
} else {
if (dt <= state.ci) { state.ci = dt; state.co = null; state.picking = 'co'; }
else { state.co = dt; state.picking = 'ci'; }
}
renderCal();
refreshFields();
}
/* ---------- fields ---------- */
function setField(which){
var dv=$(which==='ci'?'fbw-ci-dv':'fbw-co-dv');
var dt = which === 'ci' ? state.ci : state.co;
if (dt) {
dv.innerHTML = dt.getDate() + ' ' + MONTHS_S[dt.getMonth()] + ' ' + dt.getFullYear() + '
'+WD[dt.getDay()]+(which==='co'&&nights()>0?' · '+nights()+(nights()===1?' night':' nights'):'')+'';
}else{
dv.innerHTML='
'+(which==='ci'?'Select':'Select')+'';
}
}
function refreshFields(){ setField('ci'); setField('co'); }
/* ---------- popover ---------- */
function position(btn){
if(window.innerWidth<560){
cal.style.top=''; cal.style.left=''; cal.style.marginLeft='';
return;
}
cal.style.marginLeft='0';
var top = btn.offsetTop + btn.offsetHeight + 10;
var left = btn.offsetLeft + 48;
var maxLeft = fbw.clientWidth - cal.offsetWidth - 2;
if (left > maxLeft) left = Math.max(2, maxLeft);
cal.style.top = top + 'px';
cal.style.left = left + 'px';
}
function openCal() {
if (cal.classList.contains('open')) { closeCal(); return; }
closeAllSel();
if (!state.ci) state.picking = 'ci';
else if(!state.co) state.picking='co';
else state.picking='ci';
if(state.ci){ view=startOfMonth(state.ci); if(view