mirror of
https://github.com/mblanke/Gov_Travel_App.git
synced 2026-03-01 14:10:22 -05:00
244 lines
15 KiB
JavaScript
244 lines
15 KiB
JavaScript
// City Database - 237+ Canadian Cities with Provinces
|
|
// This database includes major cities and municipalities across all Canadian provinces and territories
|
|
|
|
const CITIES = [
|
|
// Alberta
|
|
{ name: "Calgary", province: "AB", country: "Canada", code: "YYC" },
|
|
{ name: "Edmonton", province: "AB", country: "Canada", code: "YEG" },
|
|
{ name: "Red Deer", province: "AB", country: "Canada", code: "YQF" },
|
|
{ name: "Lethbridge", province: "AB", country: "Canada", code: "YQL" },
|
|
{ name: "Fort McMurray", province: "AB", country: "Canada", code: "YMM" },
|
|
{ name: "Grande Prairie", province: "AB", country: "Canada", code: "YQU" },
|
|
{ name: "Medicine Hat", province: "AB", country: "Canada", code: "YXH" },
|
|
{ name: "Airdrie", province: "AB", country: "Canada", code: "YYC" },
|
|
{ name: "Spruce Grove", province: "AB", country: "Canada", code: "YEG" },
|
|
{ name: "St. Albert", province: "AB", country: "Canada", code: "YEG" },
|
|
{ name: "Leduc", province: "AB", country: "Canada", code: "YEG" },
|
|
{ name: "Lloydminster", province: "AB", country: "Canada", code: "YLL" },
|
|
{ name: "Camrose", province: "AB", country: "Canada", code: "YYC" },
|
|
{ name: "Okotoks", province: "AB", country: "Canada", code: "YYC" },
|
|
{ name: "Fort Saskatchewan", province: "AB", country: "Canada", code: "YEG" },
|
|
|
|
// British Columbia
|
|
{ name: "Vancouver", province: "BC", country: "Canada", code: "YVR" },
|
|
{ name: "Victoria", province: "BC", country: "Canada", code: "YYJ" },
|
|
{ name: "Surrey", province: "BC", country: "Canada", code: "YVR" },
|
|
{ name: "Burnaby", province: "BC", country: "Canada", code: "YVR" },
|
|
{ name: "Richmond", province: "BC", country: "Canada", code: "YVR" },
|
|
{ name: "Abbotsford", province: "BC", country: "Canada", code: "YXX" },
|
|
{ name: "Coquitlam", province: "BC", country: "Canada", code: "YVR" },
|
|
{ name: "Kelowna", province: "BC", country: "Canada", code: "YLW" },
|
|
{ name: "Saanich", province: "BC", country: "Canada", code: "YYJ" },
|
|
{ name: "Delta", province: "BC", country: "Canada", code: "YVR" },
|
|
{ name: "Kamloops", province: "BC", country: "Canada", code: "YKA" },
|
|
{ name: "Langley", province: "BC", country: "Canada", code: "YVR" },
|
|
{ name: "Nanaimo", province: "BC", country: "Canada", code: "YCD" },
|
|
{ name: "Prince George", province: "BC", country: "Canada", code: "YXS" },
|
|
{ name: "Chilliwack", province: "BC", country: "Canada", code: "YCW" },
|
|
{ name: "Vernon", province: "BC", country: "Canada", code: "YVE" },
|
|
{ name: "Penticton", province: "BC", country: "Canada", code: "YYF" },
|
|
{ name: "Campbell River", province: "BC", country: "Canada", code: "YBL" },
|
|
{ name: "Courtenay", province: "BC", country: "Canada", code: "YQQ" },
|
|
{ name: "Port Coquitlam", province: "BC", country: "Canada", code: "YVR" },
|
|
|
|
// Manitoba
|
|
{ name: "Winnipeg", province: "MB", country: "Canada", code: "YWG" },
|
|
{ name: "Brandon", province: "MB", country: "Canada", code: "YBR" },
|
|
{ name: "Steinbach", province: "MB", country: "Canada", code: "YWG" },
|
|
{ name: "Thompson", province: "MB", country: "Canada", code: "YTH" },
|
|
{ name: "Portage la Prairie", province: "MB", country: "Canada", code: "YPG" },
|
|
{ name: "Winkler", province: "MB", country: "Canada", code: "YWG" },
|
|
{ name: "Selkirk", province: "MB", country: "Canada", code: "YWG" },
|
|
{ name: "Morden", province: "MB", country: "Canada", code: "YWG" },
|
|
{ name: "Dauphin", province: "MB", country: "Canada", code: "YDN" },
|
|
{ name: "The Pas", province: "MB", country: "Canada", code: "YQD" },
|
|
|
|
// New Brunswick
|
|
{ name: "Moncton", province: "NB", country: "Canada", code: "YQM" },
|
|
{ name: "Saint John", province: "NB", country: "Canada", code: "YSJ" },
|
|
{ name: "Fredericton", province: "NB", country: "Canada", code: "YFC" },
|
|
{ name: "Dieppe", province: "NB", country: "Canada", code: "YQM" },
|
|
{ name: "Miramichi", province: "NB", country: "Canada", code: "YCH" },
|
|
{ name: "Edmundston", province: "NB", country: "Canada", code: "YED" },
|
|
{ name: "Bathurst", province: "NB", country: "Canada", code: "ZBF" },
|
|
{ name: "Campbellton", province: "NB", country: "Canada", code: "YQM" },
|
|
{ name: "Quispamsis", province: "NB", country: "Canada", code: "YSJ" },
|
|
{ name: "Riverview", province: "NB", country: "Canada", code: "YQM" },
|
|
|
|
// Newfoundland and Labrador
|
|
{ name: "St. John's", province: "NL", country: "Canada", code: "YYT" },
|
|
{ name: "Mount Pearl", province: "NL", country: "Canada", code: "YYT" },
|
|
{ name: "Corner Brook", province: "NL", country: "Canada", code: "YDF" },
|
|
{ name: "Conception Bay South", province: "NL", country: "Canada", code: "YYT" },
|
|
{ name: "Grand Falls-Windsor", province: "NL", country: "Canada", code: "YGK" },
|
|
{ name: "Paradise", province: "NL", country: "Canada", code: "YYT" },
|
|
{ name: "Gander", province: "NL", country: "Canada", code: "YQX" },
|
|
{ name: "Happy Valley-Goose Bay", province: "NL", country: "Canada", code: "YYR" },
|
|
{ name: "Labrador City", province: "NL", country: "Canada", code: "YWK" },
|
|
{ name: "Stephenville", province: "NL", country: "Canada", code: "YJT" },
|
|
|
|
// Northwest Territories
|
|
{ name: "Yellowknife", province: "NT", country: "Canada", code: "YZF" },
|
|
{ name: "Hay River", province: "NT", country: "Canada", code: "YHY" },
|
|
{ name: "Inuvik", province: "NT", country: "Canada", code: "YEV" },
|
|
{ name: "Fort Smith", province: "NT", country: "Canada", code: "YSM" },
|
|
{ name: "Behchoko", province: "NT", country: "Canada", code: "YZF" },
|
|
|
|
// Nova Scotia
|
|
{ name: "Halifax", province: "NS", country: "Canada", code: "YHZ" },
|
|
{ name: "Dartmouth", province: "NS", country: "Canada", code: "YHZ" },
|
|
{ name: "Sydney", province: "NS", country: "Canada", code: "YQY" },
|
|
{ name: "Truro", province: "NS", country: "Canada", code: "YHZ" },
|
|
{ name: "New Glasgow", province: "NS", country: "Canada", code: "YHZ" },
|
|
{ name: "Glace Bay", province: "NS", country: "Canada", code: "YQY" },
|
|
{ name: "Kentville", province: "NS", country: "Canada", code: "YHZ" },
|
|
{ name: "Amherst", province: "NS", country: "Canada", code: "YHZ" },
|
|
{ name: "Yarmouth", province: "NS", country: "Canada", code: "YQI" },
|
|
{ name: "Bridgewater", province: "NS", country: "Canada", code: "YHZ" },
|
|
|
|
// Nunavut
|
|
{ name: "Iqaluit", province: "NU", country: "Canada", code: "YFB" },
|
|
{ name: "Rankin Inlet", province: "NU", country: "Canada", code: "YRT" },
|
|
{ name: "Arviat", province: "NU", country: "Canada", code: "YEK" },
|
|
{ name: "Baker Lake", province: "NU", country: "Canada", code: "YBK" },
|
|
{ name: "Cambridge Bay", province: "NU", country: "Canada", code: "YCB" },
|
|
|
|
// Ontario
|
|
{ name: "Toronto", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Ottawa", province: "ON", country: "Canada", code: "YOW" },
|
|
{ name: "Mississauga", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Brampton", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Hamilton", province: "ON", country: "Canada", code: "YHM" },
|
|
{ name: "London", province: "ON", country: "Canada", code: "YXU" },
|
|
{ name: "Markham", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Vaughan", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Kitchener", province: "ON", country: "Canada", code: "YKF" },
|
|
{ name: "Windsor", province: "ON", country: "Canada", code: "YQG" },
|
|
{ name: "Richmond Hill", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Oakville", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Burlington", province: "ON", country: "Canada", code: "YHM" },
|
|
{ name: "Sudbury", province: "ON", country: "Canada", code: "YSB" },
|
|
{ name: "Oshawa", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Barrie", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "St. Catharines", province: "ON", country: "Canada", code: "YCM" },
|
|
{ name: "Cambridge", province: "ON", country: "Canada", code: "YKF" },
|
|
{ name: "Kingston", province: "ON", country: "Canada", code: "YGK" },
|
|
{ name: "Guelph", province: "ON", country: "Canada", code: "YKF" },
|
|
{ name: "Whitby", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Ajax", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Thunder Bay", province: "ON", country: "Canada", code: "YQT" },
|
|
{ name: "Waterloo", province: "ON", country: "Canada", code: "YKF" },
|
|
{ name: "Chatham-Kent", province: "ON", country: "Canada", code: "YQG" },
|
|
{ name: "Pickering", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Sault Ste. Marie", province: "ON", country: "Canada", code: "YAM" },
|
|
{ name: "Clarington", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Niagara Falls", province: "ON", country: "Canada", code: "YCM" },
|
|
{ name: "North Bay", province: "ON", country: "Canada", code: "YYB" },
|
|
{ name: "Sarnia", province: "ON", country: "Canada", code: "YZR" },
|
|
{ name: "Welland", province: "ON", country: "Canada", code: "YCM" },
|
|
{ name: "Belleville", province: "ON", country: "Canada", code: "YBE" },
|
|
{ name: "Cornwall", province: "ON", country: "Canada", code: "YOW" },
|
|
{ name: "Peterborough", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Brantford", province: "ON", country: "Canada", code: "YHM" },
|
|
{ name: "Kawartha Lakes", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Newmarket", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Halton Hills", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Milton", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Timmins", province: "ON", country: "Canada", code: "YTS" },
|
|
{ name: "Norfolk County", province: "ON", country: "Canada", code: "YHM" },
|
|
{ name: "Stratford", province: "ON", country: "Canada", code: "YKF" },
|
|
{ name: "St. Thomas", province: "ON", country: "Canada", code: "YXU" },
|
|
{ name: "Woodstock", province: "ON", country: "Canada", code: "YXU" },
|
|
{ name: "Orangeville", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Orillia", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Fort Erie", province: "ON", country: "Canada", code: "YCM" },
|
|
{ name: "Brockville", province: "ON", country: "Canada", code: "YOW" },
|
|
{ name: "Owen Sound", province: "ON", country: "Canada", code: "YYZ" },
|
|
{ name: "Kenora", province: "ON", country: "Canada", code: "YQK" },
|
|
{ name: "Pembroke", province: "ON", country: "Canada", code: "YOW" },
|
|
|
|
// Prince Edward Island
|
|
{ name: "Charlottetown", province: "PE", country: "Canada", code: "YYG" },
|
|
{ name: "Summerside", province: "PE", country: "Canada", code: "YSU" },
|
|
{ name: "Stratford", province: "PE", country: "Canada", code: "YYG" },
|
|
{ name: "Cornwall", province: "PE", country: "Canada", code: "YYG" },
|
|
{ name: "Montague", province: "PE", country: "Canada", code: "YYG" },
|
|
|
|
// Quebec
|
|
{ name: "Montreal", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Quebec City", province: "QC", country: "Canada", code: "YQB" },
|
|
{ name: "Laval", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Gatineau", province: "QC", country: "Canada", code: "YND" },
|
|
{ name: "Longueuil", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Sherbrooke", province: "QC", country: "Canada", code: "YSC" },
|
|
{ name: "Saguenay", province: "QC", country: "Canada", code: "YBG" },
|
|
{ name: "Levis", province: "QC", country: "Canada", code: "YQB" },
|
|
{ name: "Trois-Rivieres", province: "QC", country: "Canada", code: "YRQ" },
|
|
{ name: "Terrebonne", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Saint-Jean-sur-Richelieu", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Repentigny", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Brossard", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Drummondville", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Saint-Jerome", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Granby", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Blainville", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Shawinigan", province: "QC", country: "Canada", code: "YRQ" },
|
|
{ name: "Dollard-des-Ormeaux", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Saint-Hyacinthe", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Rimouski", province: "QC", country: "Canada", code: "YXK" },
|
|
{ name: "Victoriaville", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Mirabel", province: "QC", country: "Canada", code: "YMX" },
|
|
{ name: "Joliette", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Sorel-Tracy", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Val-d'Or", province: "QC", country: "Canada", code: "YVO" },
|
|
{ name: "Salaberry-de-Valleyfield", province: "QC", country: "Canada", code: "YUL" },
|
|
{ name: "Sept-Iles", province: "QC", country: "Canada", code: "YZV" },
|
|
{ name: "Rouyn-Noranda", province: "QC", country: "Canada", code: "YUY" },
|
|
{ name: "Alma", province: "QC", country: "Canada", code: "YBG" },
|
|
|
|
// Saskatchewan
|
|
{ name: "Saskatoon", province: "SK", country: "Canada", code: "YXE" },
|
|
{ name: "Regina", province: "SK", country: "Canada", code: "YQR" },
|
|
{ name: "Prince Albert", province: "SK", country: "Canada", code: "YPA" },
|
|
{ name: "Moose Jaw", province: "SK", country: "Canada", code: "YMJ" },
|
|
{ name: "Swift Current", province: "SK", country: "Canada", code: "YYN" },
|
|
{ name: "Yorkton", province: "SK", country: "Canada", code: "YQV" },
|
|
{ name: "North Battleford", province: "SK", country: "Canada", code: "YQW" },
|
|
{ name: "Estevan", province: "SK", country: "Canada", code: "YEN" },
|
|
{ name: "Weyburn", province: "SK", country: "Canada", code: "YQR" },
|
|
{ name: "Warman", province: "SK", country: "Canada", code: "YXE" },
|
|
|
|
// Yukon
|
|
{ name: "Whitehorse", province: "YT", country: "Canada", code: "YXY" },
|
|
{ name: "Dawson City", province: "YT", country: "Canada", code: "YDA" },
|
|
{ name: "Watson Lake", province: "YT", country: "Canada", code: "YQH" },
|
|
{ name: "Haines Junction", province: "YT", country: "Canada", code: "YHT" },
|
|
{ name: "Carmacks", province: "YT", country: "Canada", code: "YXY" },
|
|
];
|
|
|
|
// Validate city function
|
|
function validateCity(cityName) {
|
|
const city = CITIES.find(c => c.name.toLowerCase() === cityName.toLowerCase());
|
|
return city !== undefined;
|
|
}
|
|
|
|
// Get city details
|
|
function getCityDetails(cityName) {
|
|
return CITIES.find(c => c.name.toLowerCase() === cityName.toLowerCase());
|
|
}
|
|
|
|
// Search cities (for autocomplete)
|
|
function searchCities(query) {
|
|
if (!query || query.length < 2) return [];
|
|
const lowerQuery = query.toLowerCase();
|
|
return CITIES.filter(c =>
|
|
c.name.toLowerCase().includes(lowerQuery) ||
|
|
c.province.toLowerCase().includes(lowerQuery)
|
|
).slice(0, 10); // Limit to 10 results
|
|
}
|
|
|
|
// Export for use in other modules
|
|
if (typeof module !== 'undefined' && module.exports) {
|
|
module.exports = { CITIES, validateCity, getCityDetails, searchCities };
|
|
}
|