var EnhancedCalendar = { updateInputs:{ departureDate : {field : "returnDate", offset : 0}, returnDate : {field : "departureDate", offset : 0} }, today:new Date(2009, 10, 20), maxDate:new Date(2010, 9, 20), displayDiv:get("travelCalendarContainer"), displayIFrame:get("travelCalendar"), calendarNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"], sourceElm:null, currentMonth:-1, currentYear:-1, invalidDate:1001, parsedDate:null, setInternals:function(Definition) { this.setParsedDate(Definition.sourceElm.value); if ( this.parsedDate.date === "" ) { this.setParsedDate( (this.today.getMonth() + 1) + "/" + this.today.getDate() + "/" + this.today.getFullYear()); } var sendYear = this.parsedDate.year, sendMonth = this.parsedDate.month, sendDay = this.parsedDate.day; this.sourceElm = Definition.sourceElm; this.sourceElm.onkeyup = this.updateCalendar; this.sourceElm.onkeydown = this.checkKeyBoardOut; if((this.sourceElm.value.toLowerCase() === "mm/dd/yyyy" || this.sourceElm.value.toLowerCase() === "") && exists(this.updateInputs) ) { var updateDef = this.updateInputs[this.sourceElm.id.replace(/\[|\]/g, "")]; var otherInputId = updateDef.field; var otherInput = get(otherInputId); if(exists(otherInput) && otherInput.value.toLowerCase() !== "mm/dd/yyyy") { var data = otherInput.value.split("/") if(this.isValidDate(data)) { var adjustedDate = new Date( data[2], (data[0] - 1), data[1]); adjustedDate.setDate(adjustedDate.getDate() + updateDef.offset) sendMonth = adjustedDate.getMonth(); sendDay = adjustedDate.getDate(); sendYear = adjustedDate.getFullYear(); } } }if(this.displayIFrame.src.indexOf("RTRCalendar.jsp?y=" + sendYear + "&m=" + sendMonth) == -1) { this.displayIFrame.src = "/shared/components/apps/RTRCalendar.jsp?y=" + sendYear + "&m=" + sendMonth + "&d=" + sendDay + "&from=script" + "&bookingLimit=333"; } }, calendar:function(Definition) { try { this.close(); this.setInternals(Definition); var XY = getElementXAndYPos(Definition.sourceElm); this.displayDiv.style.top = (XY.y + (10)) + "px"; this.displayDiv.style.left = (XY.x + (-10)) + "px"; this.currentMonth = this.parsedDate.year; this.currentYear = this.parsedDate.month; show(this.displayDiv.id); } catch (e){ } }, setDate:function(day, month, year, dayOfWeek) { //Had to convert month back to string so that I could display date properly as say, 03/03/2009 var monthToDisplay = (parseInt(month, 10) + 1); var addZeroToDayAsPrefix = (parseInt(day, 10) < 10) ? "0" : ""; var addZeroToMonthAsPrefix = (monthToDisplay < 10) ? "0" : ""; this.setParsedDate(addZeroToMonthAsPrefix + monthToDisplay.toString() + "/" + (addZeroToDayAsPrefix + day) + "/" + year); this.setValues( { date : addZeroToMonthAsPrefix + monthToDisplay.toString() + "/" + (addZeroToDayAsPrefix + day) + "/" + year, month : month, day : day, dayOfWeek : dayOfWeek, year : year} ); try { if(get("departureDate")) { var outbound = new Date (get("departureDate").value); } else if(get("revisedDeptDate")) { var outbound = new Date (get("revisedDeptDate").value); } if(get("returnDate")) { var inbound = new Date (get("returnDate").value); } else if(get("revisedReturnDate")) { var inbound = new Date (get("revisedReturnDate").value); } var sourceField = this.sourceElm.id; if(sourceField == "returnDate" && outbound > inbound){ get("departureDate").value = ""; } else if(sourceField == "revisedReturnDate" && outbound > inbound) { get("revisedDeptDate").value = ""; } if(sourceField == "departureDate" && outbound > inbound){ get("returnDate").value = ""; } else if(sourceField == "revisedDeptDate" && outbound > inbound){ get("revisedReturnDate").value = ""; } } catch (noUpdateError) {} //Hiding this for new enhanced calendar pop out to work properly...hide(this.displayDiv.id); }, close:function() { EnhancedCalendar.sourceElm = null; hide(EnhancedCalendar.displayDiv.id); }, setValues:function (Definition) { this.sourceElm.value = Definition.date; }, isValidDate:function(dataArray){ if( dataArray.length !== 3) { return false; } if( isNaN(dataArray[0]) || isNaN(dataArray[1]) || isNaN(dataArray[2]) ) { return false; } if( parseInt(dataArray[0], 10) < 1 || parseInt(dataArray[0], 10) > 12 ) { return false; } if( parseInt(dataArray[1], 10) < 1 || parseInt(dataArray[1], 10) > 31 ) { return false; } if( parseInt(dataArray[2], 10) < this.today.getFullYear() || parseInt(dataArray[2], 10) > (this.today.getFullYear() + 1) ) { return false; } if(( parseInt(dataArray[0], 10) == 4 || parseInt(dataArray[0], 10) == 6 || parseInt(dataArray[0], 10) == 9 || parseInt(dataArray[0], 10) == 11 ) && parseInt(dataArray[1], 10) > 30) { return false;} //need condition to satisfy Leap Day { return true; } if ( parseInt(dataArray[0], 10) == 2 && parseInt(dataArray[1], 10) > 28 ) { return false;} return true; }, setParsedDate:function(value) { this.parsedDate = { date:"", month:"month", day:"day", year:"year"}; if(value.toLowerCase() === "mm/dd/yyyy") { this.parsedDate.month = this.today.getMonth(); this.parsedDate.day = this.today.getDate(); this.parsedDate.year = this.today.getFullYear(); this.parsedDate.date = (this.parsedDate.month + 1) + "/" + this.parsedDate.day + "/" + this.parsedDate.year; } else { var date = value.split("/"); if(this.isValidDate(date)) { var passedDate = new Date( date[2], (date[0] - 1), date[1]); this.parsedDate.month = passedDate.getMonth(); this.parsedDate.day = passedDate.getDate(); this.parsedDate.year = passedDate.getFullYear(); this.parsedDate.date = (this.parsedDate.month + 1) + "/" + this.parsedDate.day + "/" + this.parsedDate.year; } } }, checkKeyBoardOut:function(e) { var eventKeyCode = (document.all) ? window.event.keyCode : e.which; if(eventKeyCode === 9 || eventKeyCode === 27) { EnhancedCalendar.close(); } }, updateCalendar:function(e) { try { var eventKeyCode = (document.all) ? window.event.keyCode : e.which; if( EnhancedCalendar.sourceElm.value.split("/").length === 3 && ( (eventKeyCode >= 48 && eventKeyCode <= 57) || (eventKeyCode >= 96 && eventKeyCode <= 105) ) ) { EnhancedCalendar.setParsedDate(EnhancedCalendar.sourceElm.value); if(EnhancedCalendar.parsedDate.date !== "") { var newDate = new Date(EnhancedCalendar.parsedDate.year, EnhancedCalendar.parsedDate.month, EnhancedCalendar.parsedDate.day); if( newDate.getTime() <= EnhancedCalendar.maxDate.getTime() && newDate.getTime() >= EnhancedCalendar.today.getTime() ) { EnhancedCalendar.displayIFrame.src = "/shared/components/apps/RTRCalendar.jsp?y=" + EnhancedCalendar.parsedDate.year + "&m=" + EnhancedCalendar.parsedDate.month + "&from=script"; } } } } catch(e) {} } }; function parseDate(enhancedDateId, monthInputId, dayInputId) { var months = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); var dateInput = get(enhancedDateId).value.split("/"); if(EnhancedCalendar.isValidDate(dateInput)) { get(monthInputId).value = months[(dateInput[0] - 1)]; get(dayInputId).value = dateInput[1]; } }