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);

The Journey To Find The Old Forgotten Charms

 

KoenoKoeni is a luxury Petitenget villa with private pool, spacious, and comfortable set in lush tropical garden to accommodate your relaxing experience, as a romantic escape as well as a family holiday. Book now and get a very special deal for a Petitenget villa!

 

A Hidden Gem in Petitenget

 

The beachfront district of Petitenget is often referred to as Seminyak. As a luxury Petitenget villa, KoenoKoeni essentially situated in the lifestyle area that continues to evolve with restaurants, boutiques, spas, clubs and bars for the pleasure of modern travellers. Petitenget Temple on the beach is considered an important site of worship for Bali’s Hindu community and elaborate ceremonies take place here on a regular basis.

KoenoKoeni Villa Seminyak Bali

Luxury Petitenget Villa with Tropical Atmosphere

Nestled on 2,983 m2 lands, the 11 individual villas are well equipped and well maintained. Consists of 7 units of One-Bedroom Villa, 2 unit of Two-Bedroom Villa, and 2 units of Three-Bedroom Villa, all with king-size bed in each and every room…

Petitenget Villa with Exceptional Facilities & Services

Exceptional Services & Facilities

Each villa has a private pool with sun loungers and an outdoor shower by the pool, a spacious living area, a guest bathroom, and an additional outdoor garden shower in the master bathroom. Coupled with exceptional services from our friendly and professional staffs to cater your needs…

Surfing at Petitenget Beach Bali

Beachfront District of Petitenget, Seminyak

Located in the vibrant beachfront district of Petitenget, it’s only 5 minutes walking distance to the beautiful Petitenget beach and offers a secluded, private escape but still near the famous restaurants, clubs and bars and stretching line of shopping arcade, Seminyak…