Searching thousands of flights...

AG
AirGo
AG
Kuwait International
Kuwait
KWI
Dubai International
Dubai
DXB
London Heathrow
London
LHR
John F. Kennedy
New York
JFK
Charles de Gaulle
Paris
CDG
Charles de Gaulle
Paris
CDG
Dubai International
Dubai
DXB
Tokyo Haneda
Tokyo
HND
Velana International
Maldives
MLE
London Heathrow
London
LHR
August 2026
September 2026
August 2026
September 2026
Stops
Airlines
Price Range
$200$3,000
Cabin Class
Departure Time
Fare Conditions
const multiCityCalendarMonths = {}; function toggleMultiCityCalendar(index, event) { if (event) { event.stopPropagation(); } const popup = document.getElementById(`mc-calendar-${index}`); if (!popup) return; const wasOpen = popup.classList.contains('active'); closePopups(); if (!wasOpen) { if ( typeof multiCityCalendarMonths[index] !== 'number' ) { multiCityCalendarMonths[index] = 7; } popup.classList.add('active'); renderMultiCityCalendar(index); } } function renderMultiCityCalendar(index) { const month = multiCityCalendarMonths[index] ?? 7; const nextMonthValue = month === 11 ? 0 : month + 1; const year = month === 11 ? 2027 : 2026; const nextYear = month === 11 ? 2027 : 2026; const monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; const title1 = document.getElementById( `mc-cal-${index}-title-1` ); const title2 = document.getElementById( `mc-cal-${index}-title-2` ); if (title1) { title1.innerText = `${monthNames[month]} ${year}`; } if (title2) { title2.innerText = `${monthNames[nextMonthValue]} ${nextYear}`; } renderMultiCityMonthGrid( index, year, month, `mc-cal-${index}-grid-1` ); renderMultiCityMonthGrid( index, nextYear, nextMonthValue, `mc-cal-${index}-grid-2` ); } function renderMultiCityMonthGrid( index, year, month, gridId ) { const grid = document.getElementById(gridId); if (!grid) return; const input = document.getElementById( `mc-depart-${index}` ); const monthNamesShort = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; const firstDay = new Date(year, month, 1).getDay(); const daysInMonth = new Date(year, month + 1, 0).getDate(); grid.innerHTML = `
Su
Mo
Tu
We
Th
Fr
Sa
`; for (let i = 0; i < firstDay; i++) { grid.innerHTML += `
`; } for ( let day = 1; day <= daysInMonth; day++ ) { const dateObject = new Date(year, month, day); const today = new Date(); today.setHours(0, 0, 0, 0); const isPast = dateObject < today; const dateString = `${day} ${monthNamesShort[month]} ${year}`; const selected = input && input.value === dateString; const classes = ['cal-day']; if (isPast) { classes.push('disabled'); } if (selected) { classes.push('selected'); } grid.innerHTML += `
${day}
`; } } function selectMultiCityDate(index, dateString) { if (!multiCityLegs[index]) return; multiCityLegs[index].depart = dateString; const input = document.getElementById( `mc-depart-${index}` ); if (input) { input.value = dateString; } closePopups(); /* * Keep the following legs sensible: * if a later leg is now before this leg, * move it forward rather than leaving * an impossible itinerary. */ } function nextMultiCityMonth(index) { const current = multiCityCalendarMonths[index] ?? 7; if (current >= 11) return; multiCityCalendarMonths[index] = current + 1; renderMultiCityCalendar(index); } function prevMultiCityMonth(index) { const current = multiCityCalendarMonths[index] ?? 7; if (current <= 0) return; multiCityCalendarMonths[index] = current - 1; renderMultiCityCalendar(index); }