/************************************************************************************************************ JS Calendar Copyright (C) September 2006 DTHMLGoodies.com, Alf Magne Kalleland This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Dhtmlgoodies.com., hereby disclaims all copyright interest in this script written by Alf Magne Kalleland. Alf Magne Kalleland, 2006 Owner of DHTMLgoodies.com ************************************************************************************************************/ var turnOffYearSpan = true; // true = Only show This Year and Next, false = show +/- 5 years var weekStartsOnSunday = false; // true = Start the week on Sunday, false = start the week on Monday var showWeekNumber = false; // true = show week number, false = do not show week number var languageCode = 'en'; // Possible values: en,ge,no,nl,es,pt-br,fr // en = english, ge = german, no = norwegian,nl = dutch, es = spanish, pt-br = portuguese, fr = french, da = danish, hu = hungarian(Use UTF-8 doctype for hungarian) var monthArray = ['January','February','March','April','May','June','July','August','September','October','November','December']; var monthArrayShort = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var dayArray = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun']; var weekString = 'Week'; var todayString = ''; var calendar_display_time = false; // Format of current day at the bottom of the calendar // [todayString] = the value of todayString // [dayString] = day of week (examle: mon, tue, wed...) // [UCFdayString] = day of week (examle: Mon, Tue, Wed...) ( First letter in uppercase) // [day] = Day of month, 1..31 // [monthString] = Name of current month // [year] = Current year var todayStringFormat = '[todayString] [UCFdayString]. [day]. [monthString] [year]'; var pathToImages = '/Images/Calendar/National/'; // Relative to your HTML file var speedOfSelectBoxSliding = 200; // Milliseconds between changing year and hour when holding mouse over "-" and "+" - lower value = faster var intervalSelectBox_minutes = 30; // Minute select box - interval between each option (5 = default) var calendar_offsetTop = 0; // Offset - calendar placement - You probably have to modify this value if you're not using a strict doctype var calendar_offsetLeft = 0; // Offset - calendar placement - You probably have to modify this value if you're not using a strict doctype var calendarDiv = false; var MSIE = false; var Opera = false; if(navigator.userAgent.indexOf('MSIE')>=0 && navigator.userAgent.indexOf('Opera')<0) MSIE=true; if(navigator.userAgent.indexOf('Opera')>=0) Opera=true; var selMonth = {"jan": "01", "feb": "02", "mar": "03", "apr": "04", "may": "05", "jun": "06", "jul": "07", "aug": "08", "sep": "09", "oct": "10", "nov": "11", "dec": "12"}; var todayDate = new Date((new Date().getFullYear()), (new Date().getMonth()), (new Date().getDate()) ); var aa=0; var dropdownNoMonths=0; // Number of months of the booking interface dropdown. function checkAllowedDate(givenDate) { var futureDate = new Date(); fYear = parseInt(futureDate.getFullYear()) + 1; // Current month + no of months of the booking interface dropdown. var combMonth = (new Date()).getMonth() + dropdownNoMonths; // Calculate last month for calendar (same as month dropdown). var futureLastMonth = (combMonth % 12); // Set last future date = one year ahead rounded down to the last dropdown select month. futureDate.setFullYear(fYear, futureLastMonth,0); if ((givenDate < futureDate) && (givenDate >= todayDate) ) { return true; } else { return false; } } if (weekStartsOnSunday) { var tempDayName = dayArray[6]; for(var theIx = 6; theIx > 0; theIx--) { dayArray[theIx] = dayArray[theIx-1]; } dayArray[0] = tempDayName; } var daysInMonthArray = [31,28,31,30,31,30,31,31,30,31,30,31]; var currentMonth; var currentYear; var currentHour; var currentMinute; var calendarContentDiv; var returnDateTo; var returnFormat; var activeSelectBoxMonth; var activeSelectBoxYear; var activeSelectBoxHour; var activeSelectBoxMinute; var iframeObj = false; //// fix for EI frame problem on time dropdowns 09/30/2006 var iframeObj2 =false; function EIS_FIX_EI1(where2fixit) { if(!iframeObj2)return; iframeObj2.style.display = 'block'; iframeObj2.style.height =document.getElementById(where2fixit).offsetHeight+1; iframeObj2.style.width=document.getElementById(where2fixit).offsetWidth; iframeObj2.style.left=getleftPos(document.getElementById(where2fixit))+1-calendar_offsetLeft; iframeObj2.style.top=getTopPos(document.getElementById(where2fixit))-document.getElementById(where2fixit).offsetHeight-calendar_offsetTop; } function EIS_Hide_Frame() { if(iframeObj2)iframeObj2.style.display = 'none';} //// fix for EI frame problem on time dropdowns 09/30/2006 var returnDateToYear; var returnDateToMonth; var returnDateToDay; var returnDateToHour; var returnDateToMinute; var inputYear; var inputMonth; var inputDay; var inputHour; var inputMinute; var calendarDisplayTime = false; var selectBoxHighlightColor = '#FF0000'; // Highlight color of select boxes var selectBoxRolloverBgColor = '#E2EBED'; // Background color on drop down lists(rollover) var selectBoxMovementInProgress = false; var activeSelectBox = false; var calTriggerBtn; function cancelCalendarEvent() { return false; } function isLeapYear(inputYear) { if(inputYear%400==0||(inputYear%4==0&&inputYear%100!=0)) return true; return false; } var activeSelectBoxMonth = false; var activeSelectBoxDirection = false; function debugWrite (data) { var el = document.getElementById("debug"); el.innerHTML += data + '
'; return; } function debugWrite2 (data) { var el = document.getElementById("debug2"); el.innerHTML += data + '
'; return; } var datesAllowed = new Array(); datesAllowed[0] = [2, 2010]; datesAllowed[1] = [3, 2010]; datesAllowed[2] = [4, 2010]; datesAllowed[3] = [5, 2010]; datesAllowed[4] = [6, 2010]; datesAllowed[5] = [7, 2010]; datesAllowed[6] = [8, 2010]; datesAllowed[7] = [9, 2010]; datesAllowed[8] = [10, 2010]; datesAllowed[9] = [11, 2010]; datesAllowed[10] = [0, 2011]; datesAllowed[11] = [1, 2011]; function highlightMonthYear() { if(activeSelectBoxMonth)activeSelectBoxMonth.className=''; activeSelectBox = this; if(this.className=='monthYearActive'){ this.className=''; }else{ this.className = 'monthYearActive'; activeSelectBoxMonth = this; } if(this.innerHTML.indexOf('-')>=0 || this.innerHTML.indexOf('+')>=0){ if(this.className=='monthYearActive') selectBoxMovementInProgress = true; else selectBoxMovementInProgress = false; if(this.innerHTML.indexOf('-')>=0)activeSelectBoxDirection = -1; else activeSelectBoxDirection = 1; }else selectBoxMovementInProgress = false; } function showMonthDropDown() { if(document.getElementById('monthDropDown').style.display=='block'){ document.getElementById('monthDropDown').style.display='none'; //// fix for EI frame problem on time dropdowns 09/30/2006 EIS_Hide_Frame(); }else{ document.getElementById('monthDropDown').style.display='block'; document.getElementById('yearDropDown').style.display='none'; document.getElementById('hourDropDown').style.display='none'; document.getElementById('minuteDropDown').style.display='none'; if (MSIE) { EIS_FIX_EI1('monthDropDown')} //// fix for EI frame problem on time dropdowns 09/30/2006 } } function showYearDropDown() { if(document.getElementById('yearDropDown').style.display=='block'){ document.getElementById('yearDropDown').style.display='none'; //// fix for EI frame problem on time dropdowns 09/30/2006 EIS_Hide_Frame(); }else{ document.getElementById('yearDropDown').style.display='block'; document.getElementById('monthDropDown').style.display='none'; document.getElementById('hourDropDown').style.display='none'; document.getElementById('minuteDropDown').style.display='none'; if (MSIE) { EIS_FIX_EI1('yearDropDown')} //// fix for EI frame problem on time dropdowns 09/30/2006 } } function showHourDropDown() { if(document.getElementById('hourDropDown').style.display=='block'){ document.getElementById('hourDropDown').style.display='none'; //// fix for EI frame problem on time dropdowns 09/30/2006 EIS_Hide_Frame(); }else{ document.getElementById('hourDropDown').style.display='block'; document.getElementById('monthDropDown').style.display='none'; document.getElementById('yearDropDown').style.display='none'; document.getElementById('minuteDropDown').style.display='none'; if (MSIE) { EIS_FIX_EI1('hourDropDown')} //// fix for EI frame problem on time dropdowns 09/30/2006 } } function showMinuteDropDown() { if(document.getElementById('minuteDropDown').style.display=='block'){ document.getElementById('minuteDropDown').style.display='none'; //// fix for EI frame problem on time dropdowns 09/30/2006 EIS_Hide_Frame(); }else{ document.getElementById('minuteDropDown').style.display='block'; document.getElementById('monthDropDown').style.display='none'; document.getElementById('yearDropDown').style.display='none'; document.getElementById('hourDropDown').style.display='none'; if (MSIE) { EIS_FIX_EI1('minuteDropDown')} //// fix for EI frame problem on time dropdowns 09/30/2006 } } function selectMonth() { document.getElementById('calendar_month_txt').innerHTML = this.innerHTML currentMonth = this.id.replace(/[^\d]/g,''); document.getElementById('monthDropDown').style.display='none'; //// fix for EI frame problem on time dropdowns 09/30/2006 EIS_Hide_Frame(); for(var no=0;no=0){ currentMonth=currentMonth-1;; if(currentMonth<0){ currentMonth=11; currentYear=currentYear-1; } }else{ currentMonth=currentMonth+1;; if(currentMonth>11){ currentMonth=0; currentYear=currentYear/1+1; } } // No back year. No coming year more than one. if ((currentYear > (todayDate.getFullYear()+1)) || (currentYear < (todayDate.getFullYear())) ) { currentMonth = tmpCMonth; currentYear = tmpCYear; } // no back month in the coming year. if (currentYear == todayDate.getFullYear() && currentMonth < todayDate.getMonth()) { currentMonth = tmpCMonth; currentYear = tmpCYear; } writeCalendarContent(); } function createMonthDiv(){ var div = document.createElement('DIV'); div.className='monthYearPicker'; div.id = 'monthPicker'; for(var no=0;no=0){ var startYear = yearItems[1].innerHTML/1 -1; if(activeSelectBoxYear){ activeSelectBoxYear.style.color=''; } }else{ var startYear = yearItems[1].innerHTML/1 +1; if(activeSelectBoxYear){ activeSelectBoxYear.style.color=''; } } for(var no=1;no=0){ var startHour = hourItems[1].innerHTML/1 -1; if(startHour<0)startHour=0; if(activeSelectBoxHour){ activeSelectBoxHour.style.color=''; } }else{ var startHour = hourItems[1].innerHTML/1 +1; if(startHour>14)startHour = 14; if(activeSelectBoxHour){ activeSelectBoxHour.style.color=''; } } var prefix = ''; for(var no=1;no14)startHour=14; var subDiv = document.createElement('DIV'); subDiv.innerHTML = '  - '; subDiv.onclick = changeSelectBoxHour; subDiv.onmouseover = highlightMonthYear; subDiv.onmouseout = function(){ selectBoxMovementInProgress = false;}; subDiv.onselectstart = cancelCalendarEvent; div.appendChild(subDiv); for(var no=startHour;no=0){ if(this.src.indexOf('left')>=0)this.src = pathToImages + 'left.gif'; if(this.src.indexOf('right')>=0)this.src = pathToImages + 'right.gif'; }else{ if(this.src.indexOf('left')>=0)this.src = pathToImages + 'left_over.gif'; if(this.src.indexOf('right')>=0)this.src = pathToImages + 'right_over.gif'; } } function highlightClose() { if(this.src.indexOf('over')>=0){ this.src = pathToImages + 'close.gif'; }else{ this.src = pathToImages + 'close_over.gif'; } } function closeCalendar(){ document.getElementById('yearDropDown').style.display='none'; document.getElementById('monthDropDown').style.display='none'; document.getElementById('hourDropDown').style.display='none'; document.getElementById('minuteDropDown').style.display='none'; calendarDiv.style.display='none'; if(iframeObj){ iframeObj.style.display='none'; // fix for EI frame problem on time dropdowns 09/30/2006 EIS_Hide_Frame(); } if(activeSelectBoxMonth) activeSelectBoxMonth.className=''; if(activeSelectBoxYear) activeSelectBoxYear.className=''; } function writeTopBar() { var topBar = document.createElement('DIV'); topBar.className = 'topBar'; topBar.id = 'topBar'; calendarDiv.appendChild(topBar); // Left arrow var leftDiv = document.createElement('DIV'); leftDiv.style.marginRight = '1px'; var img = document.createElement('IMG'); img.src = pathToImages + 'left.gif'; img.onmouseover = highlightArrow; img.onclick = switchMonth; img.onmouseout = highlightArrow; leftDiv.appendChild(img); topBar.appendChild(leftDiv); if(Opera)leftDiv.style.width = '16px'; // Right arrow var rightDiv = document.createElement('DIV'); rightDiv.style.marginRight = '1px'; var img = document.createElement('IMG'); img.src = pathToImages + 'right.gif'; img.onclick = switchMonth; img.onmouseover = highlightArrow; img.onmouseout = highlightArrow; rightDiv.appendChild(img); if(Opera)rightDiv.style.width = '16px'; topBar.appendChild(rightDiv); // Month selector var monthDiv = document.createElement('DIV'); monthDiv.id = 'monthSelect'; monthDiv.onmouseover = highlightSelect; monthDiv.onmouseout = highlightSelect; monthDiv.onclick = showMonthDropDown; var span = document.createElement('SPAN'); span.innerHTML = monthArray[currentMonth]; span.id = 'calendar_month_txt'; monthDiv.appendChild(span); var img = document.createElement('IMG'); img.src = pathToImages + 'down.gif'; img.style.position = 'absolute'; img.style.right = '0px'; monthDiv.appendChild(img); monthDiv.className = 'selectBox'; if(Opera){ img.style.cssText = 'float:right;position:relative'; img.style.position = 'relative'; img.style.styleFloat = 'right'; } topBar.appendChild(monthDiv); var monthPicker = createMonthDiv(); monthPicker.style.left = '37px'; monthPicker.style.top = monthDiv.offsetTop + monthDiv.offsetHeight + 1 + 'px'; monthPicker.style.width ='60px'; monthPicker.id = 'monthDropDown'; calendarDiv.appendChild(monthPicker); // Year selector var yearDiv = document.createElement('DIV'); yearDiv.onmouseover = highlightSelect; yearDiv.onmouseout = highlightSelect; yearDiv.onclick = showYearDropDown; var span = document.createElement('SPAN'); span.innerHTML = currentYear; span.id = 'calendar_year_txt'; yearDiv.appendChild(span); topBar.appendChild(yearDiv); var img = document.createElement('IMG'); img.src = pathToImages + 'down.gif'; img.style.marginLeft = '1px'; yearDiv.appendChild(img); yearDiv.className = 'selectBox'; if(Opera){ yearDiv.style.width = '50px'; img.style.cssText = 'float:right'; img.style.position = 'relative'; img.style.styleFloat = 'right'; } var yearPicker = createYearDiv(); yearPicker.style.left = '113px'; yearPicker.style.top = monthDiv.offsetTop + monthDiv.offsetHeight + 1 + 'px'; yearPicker.style.width = '35px'; yearPicker.id = 'yearDropDown'; calendarDiv.appendChild(yearPicker); var img = document.createElement('IMG'); img.src = pathToImages + 'close.gif'; img.style.styleFloat = 'right'; img.onmouseover = highlightClose; img.onmouseout = highlightClose; img.onclick = closeCalendar; topBar.appendChild(img); if(!document.all){ img.style.position = 'absolute'; img.style.right = '2px'; } } function writeCalendarContent() { var calendarContentDivExists = true; if(!calendarContentDiv){ calendarContentDiv = document.createElement('DIV'); calendarContentDiv.className = 'contentDiv'; calendarDiv.appendChild(calendarContentDiv); calendarContentDivExists = false; } currentMonth = currentMonth/1; var d = new Date(); d.setFullYear(currentYear); d.setDate(1); d.setMonth(currentMonth); var dayStartOfMonth = d.getDay(); if (! weekStartsOnSunday) { if(dayStartOfMonth==0)dayStartOfMonth=7; dayStartOfMonth--; } document.getElementById('calendar_year_txt').innerHTML = currentYear; document.getElementById('calendar_month_txt').innerHTML = monthArray[currentMonth]; document.getElementById('calendar_hour_txt').innerHTML = currentHour; document.getElementById('calendar_minute_txt').innerHTML = currentMinute; var existingTable = calendarContentDiv.getElementsByTagName('TABLE'); if(existingTable.length>0){ calendarContentDiv.removeChild(existingTable[0]); } var calTable = document.createElement('TABLE'); calTable.width = '100%'; calTable.cellSpacing = '0'; calendarContentDiv.appendChild(calTable); var calTBody = document.createElement('TBODY'); calTable.appendChild(calTBody); var row = calTBody.insertRow(-1); row.className = 'calendar_week_row'; if (showWeekNumber) { var cell = row.insertCell(-1); cell.innerHTML = weekString; cell.className = 'calendar_week_column'; cell.style.backgroundColor = selectBoxRolloverBgColor; } for(var no=0;no0 && colCounter%7==0){ var row = calTBody.insertRow(-1); if (showWeekNumber) { var cell = row.insertCell(-1); cell.className = 'calendar_week_column'; var week = getWeek(currentYear,currentMonth,no); cell.innerHTML = week; // Week cell.style.backgroundColor = selectBoxRolloverBgColor; } } var cell = row.insertCell(-1); //debugWrite(currentYear); debugWrite(inputYear); debugWrite(currentMonth); debugWrite(inputMonth); debugWrite(no); debugWrite(inputDay); cell.className='pickableDate'; if(currentYear==inputYear && currentMonth == inputMonth && no==inputDay) { cell.className+='activeDay'; // SATYA } cell.innerHTML = no; // Valid date Range for Booking //drLen = datesAllowed.length; //found = false; if (checkAllowedDate(new Date(currentYear, currentMonth, no))) { cell.onclick = pickDate; } else { cell.className += ' calendarDivTdNoSel'; cell.style.color = '#A3A2A9';//TODO: add to css } colCounter++; } if(!document.all){ if(calendarContentDiv.offsetHeight) document.getElementById('topBar').style.top = calendarContentDiv.offsetHeight + document.getElementById('timeBar').offsetHeight + document.getElementById('topBar').offsetHeight -1 + 'px'; else{ document.getElementById('topBar').style.top = ''; document.getElementById('topBar').style.bottom = '0px'; } } if(iframeObj){ if(!calendarContentDivExists)setTimeout('resizeIframe()',350);else setTimeout('resizeIframe()',10); } } function resizeIframe() { iframeObj.style.width = calendarDiv.offsetWidth + 'px'; iframeObj.style.height = calendarDiv.offsetHeight + 'px' ; } function pickTodaysDate() { var d = new Date(); currentMonth = d.getMonth(); currentYear = d.getFullYear(); pickDate(false,d.getDate()); } function notAllowed () { alert("We are only able to place reservations 1 year in advance, \n please return to our site closer to your departure."); } function pickDate(e,inputDay) { var month = currentMonth/1 +1; if(month<10) month = '0' + month; var day; if(!inputDay && this) { day = this.innerHTML; } else { day = inputDay; } if(day/1 < 10) day = '0' + day; if(returnFormat){ returnFormat = returnFormat.replace('dd',day); returnFormat = returnFormat.replace('mm',month); returnFormat = returnFormat.replace('yyyy',currentYear); returnFormat = returnFormat.replace('hh',currentHour); returnFormat = returnFormat.replace('ii',currentMinute); returnFormat = returnFormat.replace('d',day/1); returnFormat = returnFormat.replace('m',month/1); returnDateTo.value = returnFormat; try{ returnDateTo.onchange(); }catch(e){ } } else{ for(var no=0;no