LIMITED OFFER! BUY NOW STAY LATER.
Terms & conditions applied.

/****************************** * Editable section -- Start -- ******************************/ // DATE SETTINGS - EDIT AS REQUIRED var daysinAdvance = 2; // Sets default days in advance from current date var numberNights = 2; // Sets default number of nights var numberYears = 3; // Sets default number of years to display in year select list var numberNightsMin = 1; // Sets minimum number of nights accepted var imgDir = "images/"; // Directory for the dynamic calendar script and images. Trailing slash must be included. // FLAG SETTINGS ON/OFF - SET TO 1 FOR ON & 0 FOR OFF var wdDisplay = 1; //weekday display var numberNightsDisplay = 0; //number of nights display var departDateDisplay = 1; //departure dates display var departDateUpdate = 1; //auto update departure date // WEEK DAY AND NUMBER NIGHTS TEXT - EDIT TEXT AS REQUIRED var wdArray = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"); var nightTxt = " Night"; var nightsTxt = " Nights"; // ERROR MESSAGE TEXT - EDIT TEXT AS REQUIRED var invalidDateTxt = "Invalid Arrival Date. Please check number of days selected"; var invalidDatePriorTxt = "Arrival Date selected is prior Today's date. Please change..."; var invalidDepartDateTxt = "Invalid Departure Date. Please check number of days selected"; var invalidDepartTxt = "Departure Date is prior to Arrival Date selected. Please change..."; var invalidNightsTxt = "Sorry, reservations under "+numberNightsMin+" nights are not accepted."; /****************************** * Editable section -- End -- ******************************/ /************************************************** * DO NOT CHANGE JAVASCRIPT SETTINGS BELOW THIS LINE **************************************************/ //Days in each month Array var aNumDays = new Array (31,0,31,30,31,30,31,31,30,31,30,31); //Cancel out if no departure date display if(departDateDisplay == 0) { numberNightsDisplay = 0; departDateUpdate = 0; } //Sets dates selected from dyncalendar function calendarCallback(day, month, year, objName, formName) { if(objName == "calendarArrive"){ document.forms[formName].fd.selectedIndex = day-1; document.forms[formName].fm.selectedIndex = month-1; document.forms[formName].fy.selectedIndex = year - document.forms[formName].fy.options[0].text; updateDates(document.forms[formName]); if(wdDisplay == 1) setWkd(formName, 1); }else{ //objName == calendarDepart document.forms[formName].td.selectedIndex = day-1; document.forms[formName].tm.selectedIndex = month-1; document.forms[formName].ty.selectedIndex = year - document.forms[formName].ty.options[0].text; if(wdDisplay == 1) setWkd(formName, 1); } } //Update form with selected dates function updateDates(form, loadDates) { //check Leap Year if(form.fm.selectedIndex==1) { var leapYear = new Date (form.fy.options[form.fy.selectedIndex].text,form.fm.selectedIndex+1,1); var leapYear = new Date (leapYear - (24*60*60*1000)); var numDaysInMonth = leapYear.getDate(); }else{ var numDaysInMonth = aNumDays[form.fm.selectedIndex]; } // Update departure date only when loading the form and/or departDateUpdate is set to 1 if(loadDates == 1 || departDateUpdate == 1) { var selectDate = new Date(form.fy.options[form.fy.selectedIndex].text, form.fm.selectedIndex, form.fd.selectedIndex); var setDate = new Date(selectDate.getTime() + ((numberNights+1) * 86400000)); var setDay = setDate.getDate(); var setMonth = setDate.getMonth(); var setYear = setDate.getFullYear() - form.fy.options[0].text; var checkinDate = new Date(form.fy.options[form.fy.selectedIndex].text,form.fm.selectedIndex,form.fd.selectedIndex+1); var checkoutDate = new Date(form.ty.options[form.ty.selectedIndex].text,form.tm.selectedIndex,form.td.selectedIndex+1); if(checkinDate > checkoutDate) { if(setYear == form.ty.length) { form.td.options[30].selected=1; form.tm.options[11].selected=1; form.ty.options[form.ty.length-1].selected=1; } else { form.td.options[setDay-1].selected=1; form.tm.options[setMonth].selected=1; form.ty.options[setYear].selected=1; } } } if(form.fd.selectedIndex+1 > numDaysInMonth) { alert(invalidDateTxt); form.fd.selectedIndex = numDaysInMonth-1; } } function setWkd(form, calendar) { // change form object if returned from calendar if(calendar) form = document.forms[form]; for (var i = 0; i < form.fy.length; i++) { if (form.fy.options[i].selected) var fyear = form.fy.options[i].text; if (departDateDisplay == 1 && form.ty.options[i].selected) var tyear = form.ty.options[i].text; } var checkinDate = new Date(fyear,form.fm.selectedIndex,form.fd.selectedIndex+1); if (departDateDisplay == 1) var checkoutDate = new Date(tyear,form.tm.selectedIndex,form.td.selectedIndex+1); var numNights = Math.round((checkoutDate - checkinDate) / 86400000); if (numNights == 1) numNights += nightTxt; else numNights += nightsTxt; //Set Days of the week display if(wdDisplay == 1 && document.getElementById) { document.getElementById('inWd').firstChild.nodeValue = '(' + wdArray[checkinDate.getDay()] + ')'; if (departDateDisplay == 1) document.getElementById('outWd').firstChild.nodeValue = '(' + wdArray[checkoutDate.getDay()] + ')'; } //Set number of nights display if(numberNightsDisplay == 1 && document.getElementById) document.getElementById('lengthStay').firstChild.nodeValue = numNights; } //Load current dates on form load function LoadDates(form) { var curDate = new Date(); var setDate = new Date(curDate.getTime() + (daysinAdvance * 86400000)); var setDay = setDate.getDate(); var setMonth = setDate.getMonth(); var setYear = setDate.getFullYear() - form.fy.options[0].text; // Set Arrival Dates form.fd.selectedIndex = setDay-1; form.fm.selectedIndex = setMonth; form.fy.selectedIndex = setYear; // Set the Departure Dates updateDates(form, departDateDisplay); if(wdDisplay == 1 || numberNightsDisplay == 1) setWkd(form); } //Load current dates on form load function checkDates(form) { var curDate = new Date(); for (var i = 0; i numDaysInMonth) { alert(invalidDepartDateTxt); form.td.selectedIndex = numDaysInMonth-1; return false; } var checkoutDate = new Date(tyear,form.tm.selectedIndex,form.td.selectedIndex+2); var numNights = Math.round((checkoutDate - checkinDate) / 86400000); } else { var numNights = form.numnights.selectedIndex+1; } if(checkinDate.getTime() < curDate.getTime()) { alert(invalidDatePriorTxt); return false; } if(numNights < 1) { alert(invalidDepartTxt ); return false; } if(numNights < numberNightsMin) { alert(invalidNightsTxt); return false; } } //Generate years options for year select list function year_option(form){ curDate = new Date(); curYear = curDate.getFullYear(); for(i = curYear ; i <= curYear+(numberYears-1) ; i++ ){ document.write('' + i + ''); } }
Check In: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec year_option(); Check Out: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec year_option(); Adults: 1 2 3 4 5 6 7 Child: 0 1 2
LoadDates(document.DateSelect);

Awards

 

We are pleased, honoured and grateful to be awarded as one of the best luxury & private villas in Petitenget, Seminyak, Bali. All supports from our guests and partners are much appreciated in order to improve our services and facilities.

HotelsCombined recognizes Koenokoeni Villa amongst the best hotels in Indonesia.

 

HotelsCombined is a hotel price comparison website that was recognized as Best Hotel Booking Site two years in a row for 2020 and 2021 by Frommer’s.

 

HotelsCombined owned by KAYAK, has selected Koenokoeni Villa to receive the official Recognition of Excellence Award. This selection has come from HotelsCombined’s extensive surveys using data from millions of guest reviews for a wide range of accommodation within Indonesia.

 

Koenokoeni Villa has consistently produced a high satisfaction rating among guests and travel industry experts.

 

Koenokoeni Villa now joins an elite group of hotels around the world that have been awarded the HotelsCombined Recognition of Excellence. This exclusive collection of highly-rated accommodations has been chosen using a strict set of criteria such as the quality and consistency of reviews, the absence of recurring or unresolved issues with customers, popularity of the property and of course, the overall resulting score.

 

“We are thrilled to be working with the best hotels in Indonesia. Koenokoeni Villa has proven its place among them with this award and its commitment to providing high-quality services to all guests,” said Melinda Balazs, Hotel Awards Program Manager at HotelsCombined.

 

“With HotelsCombined, 30 million people are finding the best hotel deals available online every month. The HotelsCombined Recognition of Excellence Award makes it even easier for travellers to find the top hotels for customer service and guarantee the best value for their money.”

KoenoKoeni Villa Seminyak Bali Booking.com Awards
KoenoKoeni Villa Seminyak Bali Hotels.com Awards