/*************************************************************************************************************************** GENERAL UTILITIES CALENDAR AND DATE VALIDATION FUNCTIONS ***************************************************************************************************************************/ // Gets and sets current day and month for departures function initDate(fName, depMonth, depDay) { var theForm = fName; var dateNow = new Date(); var curMonth = dateNow.getMonth(); var curDay = dateNow.getDate(); if (curDay == 31) { curDay = 0; curMonth++; } // Set our departure day to today+1 and set current month depMonth.selectedIndex = curMonth; depDay.selectedIndex = curDay; // Update day and month values updateReturnDate(theForm); } function checkDateRange(getMonth, getDay, getObYear, getObMonth, getObDay, maxRange, orIbCheck) { var isValid = true; // Selected date values var year = getYear(getMonth, getDay); var month = parseInt(getMonth); var day = parseInt(getDay); // Outbound date values var obYear = parseInt(getObYear); var obMonth = parseInt(getObMonth); var obDay = parseInt(getObDay); var legalRange = new Date(); if (!orIbCheck) { if (obYear > year) { year++; } if (obYear == year) { if (month < obMonth) { year++; } else if (month == obMonth && day < obDay) { year++; } } } legalRange.setDate(legalRange.getDate() + maxRange); var lrYear = legalRange.getUTCFullYear(); var lrMonth = legalRange.getUTCMonth()+1; var lrDay = legalRange.getUTCDate(); var lrDate = new Date(lrYear, lrMonth, lrDay); var selectedDate = new Date(year, month, day); if (selectedDate > lrDate) { isValid = false; } return isValid; } function getYear(getMonth, getDay) { var year; var month = parseInt(getMonth); var day = parseInt(getDay); var date = new Date(); if (month <= date.getUTCMonth()+1) { if (month == date.getUTCMonth()+1 && day < date.getUTCDate()) { year = date.getUTCFullYear() + 1; } else if (month < date.getUTCMonth()+1) { year = date.getUTCFullYear() + 1; } else { year = date.getUTCFullYear(); } } else { year = date.getUTCFullYear(); } return year; } // Launch applicable calendar popup function launchCalendar(calForm, formName,langVal){ var urlVer; if (langVal == 'll') { urlVer = '/pubcontent/en_GB/apps/common/calendar.jsp'; } else if (langVal == 'en') { urlVer = '/pubcontent/en_GB/apps/common/calendar.jsp'; } eval('document.'+formName+'.currentCalForm.value = calForm'); var calWin = window.open(urlVer,formName,'scrollbars=no,menu=no,width=300,height=165,top=125,left=325'); calWin.focus(); } // DATE VALIDATION CODE ADAPTED FROM AA.COM function leapYear(theYear) { if ( ((theYear % 4 == 0) && (theYear % 100 != 0)) || (theYear % 400 == 0) ) { return true; } else { return false; } } /**** Set the return month and day to two days after the departure month and day. [chalsted] ER #9196 ****/ function updateReturnDate(formName) { var d = new Date(); var dYear = d.getFullYear(); var dDay = formName.departureDay.selectedIndex; var dMonth = formName.departureMonth.selectedIndex; var today = new Date(); var threeDaysInfuture = new Date(); threeDaysInfuture.setDate(today.getDate() + 3); /* Start of ER 12182 :ER - Return Date should not default to Outbound + 2 * if return date has been specified by user */ var rDy = formName.returnDay.selectedIndex; var rMon = formName.returnMonth.selectedIndex; //var changed = true; //if((rDy == threeDaysInfuture.getDate() - 1) && (rMon == threeDaysInfuture.getMonth())) //changed = false; //if(changed == true && formName.changed == null) //new page - keep date changes // return; var rYr = d.getFullYear(); // for next year if (formName.returnMonth.selectedIndex < d.getMonth()){ rYr = rYr+1; } // for next year if (formName.departureMonth.selectedIndex < d.getMonth()){ dYear = dYear+1; } rDate = new Date(rYr, rMon, rDy); dDate = new Date(dYear, dMonth, dDay+2); // end of ER 12182 : var rYear = dYear; var rMonth = '0'; var rDay = '0'; // 30 Days: April-3 June-5 September-8 November-10 // 31 Days: January-0, March-2, May-4, July-6, August-7, October-9, December-11 // 28 Days: February-1 // For Months with 31 days if ((dMonth == '0' || dMonth == '2' || dMonth == '4' || dMonth == '6' || dMonth == '7' || dMonth == '9' || dMonth == '11' )) { if (dDay == '29') { rDay = '0'; // If December, set month back to '0' for January if (dMonth == '11') { rMonth = '0'; } else { rMonth = dMonth + 1; } } else if (dDay == '30') { rDay = '1'; // If December, set month back to '0' for January if (dMonth == '11') { rMonth = '0'; } else { rMonth = dMonth + 1; } } else { rDay = dDay + 2; rMonth = dMonth; } // For Months with 30 days } else if ((dMonth == '3' || dMonth == '5' || dMonth == '8' || dMonth == '10' )) { /* test for invalid dates */ if (dDay == '30' || dDay == '31') { dDay = '29'; eval (formName.departureDay.selectedIndex = dDay); } if (dDay == '28') { rDay = '0'; rMonth = dMonth + 1; } else if (dDay == '29') { rDay = '1'; rMonth = dMonth + 1; } else { rDay = dDay + 2; rMonth = dMonth; } // For February, check for leapyear. } else if (dMonth == '1') { /*********************************************************** 13 Apr 07 - Updated validation to take account of leap year [O.Ammann] ***********************************************************/ // Check to see if Feb 29, 30, or 31 is selected for NON-leapyear. // If so, set departure date to Feb 28. if (!leapYear(rYear)) { if (dDay == '28' || dDay == '29' || dDay == '30') { dDay = '27'; eval (formName.departureDay.selectedIndex = dDay); } } else if (leapYear(rYear)) { if (dDay == '29' || dDay == '30') { dDay = '28'; eval (formName.departureDay.selectedIndex = dDay); } } if ((leapYear(rYear) && dDay == '27') || (!leapYear(rYear) && dDay == '26')) { rDay = '0'; rMonth = dMonth + 1; } else if ((leapYear(rYear) && dDay == '28') || (!leapYear(rYear) && dDay == '27')) { rDay = '1'; rMonth = dMonth + 1; } else { rDay = dDay + 2; rMonth = dMonth; } } //check to see if on different page if(formName.dateChanged != null && formName.dateChanged.value == 'true') { return; } if(formName.returnDay.changed == null && formName.changed == null){ eval (formName.returnDay.selectedIndex = rDay); } if( formName.returnMonth.changed == null && formName.changed == null){ eval (formName.returnMonth.selectedIndex = rMonth); } return; } function validateReturn(theForm) { var formName = eval('document.' + theForm); var dMonth = formName.returnMonth.selectedIndex; var dDay = formName.returnDay.selectedIndex; var dYear = getYear(dMonth, dDay); // For Months with 31 days if ((dMonth == '0' || dMonth == '2' || dMonth == '4' || dMonth == '6' || dMonth == '7' || dMonth == '9' || dMonth == '11' )) { if (dDay == '30' || dDay == '31') { dDay = '29'; //eval (formName.returnDay.selectedIndex = dDay); } // For Months with 30 days } else if ((dMonth == '3' || dMonth == '5' || dMonth == '8' || dMonth == '10' )) { if (dDay == '30' || dDay == '31') { dDay = '29'; eval (formName.returnDay.selectedIndex = dDay); } /*********************************************************** 13 Apr 07 - Updated validation to take account of leap year [O.Ammann] ***********************************************************/ // For February, check for leapyear. } else if (dMonth == '1') { if (!leapYear(dYear)) { if (dDay == '28' || dDay == '29' || dDay == '30') { dDay = '27'; eval (formName.returnDay.selectedIndex = dDay); } } else if (leapYear(dYear)) { if (dDay == '29' || dDay == '30') { dDay = '28'; eval (formName.returnDay.selectedIndex = dDay); } } } } function updateChangedDate(selectObject) { selectObject.changed = true; if(selectObject.form.dateChanged) { selectObject.form.dateChanged.value = true; } } // Preload module images function preloadImgs(img1, w1, h1, img2, w2, h2) { image1 = new Image(w1,h1); image1.src = img1; image2 = new Image(w2,h2); image2.src = img2; } // [ER request 00001 18/04/08] State lookup function function checkIfState(getStr) { var sTable = ['london heathrow', 'hawaii', 'hawai', 'florida', 'new york', 'newyork', 'new york jfk', 'colorado']; var lookUp = ['LHR', 'HNL', 'HNL', 'MIA', 'NYC', 'NYC', 'JFK', 'DEN']; for (i = 0; i < sTable.length; i++) { if (getStr.toLowerCase() == sTable[i]) { getStr = lookUp[i]; } } return getStr; } // Remove default orig/dest values function doDefaultRemove(formFld) { formFld.value = ""; }