Gemi Tours - Professional Travel Planner AI
๐ข Live System - Smart Distance Planning Active
๐ฑ Live Rate: 1 USD = 12.28 GHS
๐ค Your Travel Information Help us personalize your perfect itinerary
๐ Your Premium Itinerary
Generating personalized itinerary with Live Updates and Route Optimization...
๐ฌ๐ญ Discover Ghana by Region - Select Your Adventures Choose from our authentic Ghanaian experiences organized by region. All prices include professional guides and are updated with live market rates.
All Regions
Volta Region
Central Region
Ashanti Region
Western Region
Northern Region
Upper East Region
Upper West Region
North East Region
Savannah Region
Bono Region
Bono East Region
Ahafo Region
Greater Accra
Eastern Region
Oti Region
`;
}showEmailNotification() {
const notification = document.createElement('div');
notification.style.cssText = `
position: fixed; top: 20px; right: 20px; z-index: 1000;
background: linear-gradient(135deg, #10b981, #059669); color: white;
padding: 15px 20px; border-radius: 10px; box-shadow: 0 4px 15px rgba(16,185,129,0.3);
font-weight: 600; animation: slideInRight 0.5s ease;
`;
notification.innerHTML = 'โ
Itinerary automatically sent to info@gemitours.com';
document.body.appendChild(notification);setTimeout(() => {
notification.style.animation = 'slideOutRight 0.5s ease forwards';
setTimeout(() => notification.remove(), 500);
}, 4000);
}getFormData() {
const customDays = document.getElementById('customDays').value;
const presetDays = document.getElementById('presetDays').value;
const duration = this.currentDurationType === 'custom' ? parseInt(customDays) : parseInt(presetDays);const additionalServices = {
customNight: document.getElementById('customNight').value,
transportType: document.getElementById('transportType').value,
accommodationType: document.getElementById('accommodationType').value,
droneServices: {
basic: document.getElementById('droneBasic').checked,
professional: document.getElementById('droneProfessional').checked,
mapping: document.getElementById('droneMapping').checked
},
photography: {
basic: document.getElementById('photoBasic').checked,
professional: document.getElementById('photoProfessional').checked,
wedding: document.getElementById('photoWedding').checked
},
foodPreferences: {
vegetarian: document.getElementById('foodVegetarian').checked,
vegan: document.getElementById('foodVegan').checked,
halal: document.getElementById('foodHalal').checked,
kosher: document.getElementById('foodKosher').checked,
glutenFree: document.getElementById('foodGlutenFree').checked,
local: document.getElementById('foodLocal').checked
},
culturalTraining: {
cooking: document.getElementById('trainingCooking').checked,
advancedCooking: document.getElementById('trainingAdvancedCooking').checked,
streetFood: document.getElementById('trainingStreetFood').checked,
dancing: document.getElementById('trainingDancing').checked,
kente: document.getElementById('trainingKente').checked,
drumming: document.getElementById('trainingDrumming').checked,
language: document.getElementById('trainingLanguage').checked,
crafts: document.getElementById('trainingCrafts').checked,
storytelling: document.getElementById('trainingStory').checked
}
};return {
destinations: this.selectedCountries,
duration: duration || 0,
nights: parseInt(document.getElementById('nights').value) || 0,
budget: document.getElementById('budget').value,
travelers: parseInt(document.getElementById('travelers').value) || 1,
categories: this.selectedCategories,
purposes: this.selectedPurposes,
tripType: this.currentTripType,
selectedGhanaExperiences: this.selectedGhanaExperiences,
additionalServices: additionalServices,
personalDetails: this.personalDetails
};
}hasMinimumData(data) {
return data.destinations.length > 0 && data.duration > 0 && data.budget;
}buildRealItinerary(data) {
const itinerary = {
destinations: data.destinations,
duration: data.duration,
travelers: data.travelers,
tripType: data.tripType,
selectedPreferences: data.tripType === 'experience' ? data.categories : data.purposes,
selectedGhanaExperiences: data.selectedGhanaExperiences,
selectedPurposeServices: this.selectedPurposeServices,
personalDetails: data.personalDetails,
totalEstimatedCost: 0,
ghanaExperienceDetails: this.getSelectedGhanaExperienceDetails(data.selectedGhanaExperiences),
purposeServiceDetails: this.getSelectedPurposeServiceDetails(),
additionalServices: this.getSelectedAdditionalServices(data.additionalServices),
selectedDays: []
};itinerary.totalEstimatedCost = this.calculateSelectedItemsCost(data);
if (data.selectedGhanaExperiences.length > 0) {
itinerary.selectedDays = this.generateSelectedExperienceDays(data);
}if (this.selectedPurposeServices.length > 0) {
const purposeDays = this.generatePurposeServiceDays();
itinerary.selectedDays = [...itinerary.selectedDays, ...purposeDays];
}return itinerary;
}generatePurposeServiceDays() {
const purposeDays = [];
let dayOffset = 0;this.selectedPurposeServices.forEach((service, index) => {
const dayNumber = dayOffset + index + 1;
const currentCountry = this.selectedCountries[0] || { name: 'Home Country', code: 'XX' };
const weather = { temp: 25, condition: 'Pleasant', humidity: 60 };purposeDays.push({
day: dayNumber,
country: currentCountry,
weather: weather,
purposeService: {
...service,
type: 'Purpose Travel Service'
},
isPurposeService: true
});
});return purposeDays;
}getSelectedGhanaExperienceDetails(selectedIds) {
return selectedIds.map(id => {
const experience = this.findGhanaExperienceById(id);
if (experience) {
return {
...experience,
currentPrice: this.calculateExperiencePrice(experience)
};
}
return null;
}).filter(exp => exp !== null);
}getSelectedAdditionalServices(services) {
const selected = [];
if (services.droneServices.basic) selected.push({ name: 'Basic Aerial Photography', cost: this.getBasePriceForService('droneBasic') });
if (services.droneServices.professional) selected.push({ name: 'Professional Drone Videography', cost: this.getBasePriceForService('droneProfessional') });
if (services.droneServices.mapping) selected.push({ name: '360ยฐ Mapping & Virtual Tours', cost: this.getBasePriceForService('droneMapping') });
if (services.photography.basic) selected.push({ name: 'Basic Photo Package', cost: this.getBasePriceForService('photoBasic') });
if (services.photography.professional) selected.push({ name: 'Professional Photography', cost: this.getBasePriceForService('photoProfessional') });
if (services.photography.wedding) selected.push({ name: 'Wedding/Special Event Coverage', cost: this.getBasePriceForService('photoWedding') });
if (services.culturalTraining.cooking) selected.push({ name: 'Traditional Cooking Classes', cost: this.getBasePriceForService('trainingCooking') });
if (services.culturalTraining.kente) selected.push({ name: 'Kente Weaving Workshop', cost: this.getBasePriceForService('trainingKente') });
if (services.culturalTraining.drumming) selected.push({ name: 'Traditional Drumming Lessons', cost: this.getBasePriceForService('trainingDrumming') });
return selected;
}calculateSelectedItemsCost(data) {
let totalCost = 0;
data.selectedGhanaExperiences.forEach(experienceId => {
const experience = this.findGhanaExperienceById(experienceId);
if (experience) {
totalCost += this.calculateExperiencePrice(experience);
}
});this.selectedPurposeServices.forEach(service => {
totalCost += service.price;
});const services = data.additionalServices;
if (services.droneServices.basic) totalCost += this.getBasePriceForService('droneBasic');
if (services.droneServices.professional) totalCost += this.getBasePriceForService('droneProfessional');
if (services.droneServices.mapping) totalCost += this.getBasePriceForService('droneMapping');
if (services.photography.basic) totalCost += this.getBasePriceForService('photoBasic');
if (services.photography.professional) totalCost += this.getBasePriceForService('photoProfessional');
if (services.photography.wedding) totalCost += this.getBasePriceForService('photoWedding');
if (services.culturalTraining.cooking) totalCost += this.getBasePriceForService('trainingCooking');
if (services.culturalTraining.advancedCooking) totalCost += this.getBasePriceForService('trainingAdvancedCooking');
if (services.culturalTraining.streetFood) totalCost += this.getBasePriceForService('trainingStreetFood');
if (services.culturalTraining.dancing) totalCost += this.getBasePriceForService('trainingDancing');
if (services.culturalTraining.kente) totalCost += this.getBasePriceForService('trainingKente');
if (services.culturalTraining.drumming) totalCost += this.getBasePriceForService('trainingDrumming');
if (services.culturalTraining.language) totalCost += this.getBasePriceForService('trainingLanguage');
if (services.culturalTraining.crafts) totalCost += this.getBasePriceForService('trainingCrafts');
if (services.culturalTraining.storytelling) totalCost += this.getBasePriceForService('trainingStory');if (services.transportType && services.transportType !== 'select') {
const transportRates = { budget: 15, medium: 50, premium: 150 };
totalCost += transportRates[services.transportType] * data.duration;
}
if (services.accommodationType && services.accommodationType !== 'select') {
const accommodationRates = {
'eco-lodge': 45, 'guest-house': 25, 'motel': 35,
'2-star': 40, '3-star': 65, '4-star': 120,
'5-star': 250, 'airbnb': 55
};
totalCost += accommodationRates[services.accommodationType] * data.nights;
}return totalCost * data.travelers;
}generateSelectedExperienceDays(data) {
const selectedDays = [];
data.selectedGhanaExperiences.forEach((experienceId, index) => {
const experience = this.findGhanaExperienceById(experienceId);
if (experience) {
const dayNumber = index + 1;
const currentCountry = data.destinations.find(dest => dest.code === 'GH') || data.destinations[0];
const weather = this.generateRealisticWeather(currentCountry.code);
selectedDays.push({
day: dayNumber,
country: currentCountry,
weather: weather,
experience: {
...experience,
currentPrice: this.calculateExperiencePrice(experience)
}
});
}
});
return selectedDays;
}generateRealisticWeather(countryCode) {
const weatherData = {
'GH': { temp: 28 + Math.floor(Math.random() * 6), condition: 'Warm & Humid', humidity: 75 },
'US': { temp: 15 + Math.floor(Math.random() * 15), condition: 'Variable', humidity: 60 },
'GB': { temp: 8 + Math.floor(Math.random() * 12), condition: 'Cloudy', humidity: 70 },
'FR': { temp: 12 + Math.floor(Math.random() * 18), condition: 'Mild', humidity: 65 },
'default': { temp: 20 + Math.floor(Math.random() * 10), condition: 'Pleasant', humidity: 65 }
};
return weatherData[countryCode] || weatherData.default;
}displayItinerary(itinerary) {
const resultElement = document.getElementById('itineraryResult');
let html = `
๐ Your Personalized Live Itinerary
๐ฅ Live Updates Generated!
Smart Distance Planning โข Traffic Optimization โข Weather Integration
๐ค Traveler Information Name: ${itinerary.personalDetails.fullName || 'Not provided'}
Email: ${itinerary.personalDetails.email || 'Not provided'}
Mobile: ${itinerary.personalDetails.whatsappNumber || 'Not provided'}
${itinerary.personalDetails.nationality ? `
Nationality: ${itinerary.personalDetails.nationality}
` : ''}
${itinerary.personalDetails.ageRange ? `
Age Range: ${itinerary.personalDetails.ageRange}
` : ''}
${itinerary.personalDetails.travelExperience ? `
Experience: ${itinerary.personalDetails.travelExperience}
` : ''}
`;if (itinerary.ghanaExperienceDetails.length > 0) {
html += `
๐ฌ๐ญ Selected Ghana Premium Experiences
`;
itinerary.ghanaExperienceDetails.forEach(experience => {
html += `
${experience.name}
${this.formatGHS(experience.currentPrice)}
๐ ${experience.location} โข โฑ๏ธ ${experience.duration}
${experience.description}
`;
});
html += `
`;
}if (itinerary.purposeServiceDetails.length > 0) {
html += `
๐ผ Selected Purpose Travel Services
`;
itinerary.purposeServiceDetails.forEach(service => {
html += `
${service.name}
โฑ๏ธ ${service.duration}
${this.formatGHS(service.currentPrice)}
`;
});
html += `
`;
}if (itinerary.additionalServices.length > 0) {
html += `
๐ฏ Selected Additional Services
`;
itinerary.additionalServices.forEach(service => {
html += `
${service.name}
${this.formatGHS(service.cost)}
`;
});
html += `
`;
}if (itinerary.selectedDays.length > 0) {
html += `
๐
Your Personalized Daily Itinerary
`;
itinerary.selectedDays.forEach(day => {
if (day.isPurposeService) {
html += `
${day.purposeService.name}
${this.formatGHS(day.purposeService.currentPrice)}
โฑ๏ธ Duration: ${day.purposeService.duration}
Professional ${day.purposeService.type} to support your travel goals and requirements.
`;
} else {
html += `
${day.experience.name}
${this.formatGHS(day.experience.currentPrice)}
๐ ${day.experience.location} โข โฑ๏ธ ${day.experience.duration}
${day.experience.description}
${day.experience.features.slice(0, 3).map(feature =>
`${feature} `
).join('')}
`;
}
});
} else if (itinerary.ghanaExperienceDetails.length === 0 && itinerary.purposeServiceDetails.length === 0 && itinerary.additionalServices.length === 0) {
html += `
๐ฏ Ready to Select Your Adventures? Choose from our Ghana experiences above, purpose travel services, or add additional services to see your personalized itinerary here.
Tip: Select experiences or services to see detailed planning!
`;
}html += `
๐ฐ Live Trip Pricing Summary
Duration: ${itinerary.duration} days
Travelers: ${itinerary.travelers}
Selected Items: ${itinerary.ghanaExperienceDetails.length + itinerary.purposeServiceDetails.length + itinerary.additionalServices.length}
Route Optimization: Active
Total Cost: ${this.formatGHS(itinerary.totalEstimatedCost)} Live Updates โข Includes selected experiences & services
๐ฏ BOOK NOW - ${this.formatGHS(itinerary.totalEstimatedCost)}
`;html += `
๐ฅ Download Your Complete Itinerary Get your complete personalized itinerary with Live Updates!
๐ Download Full Itinerary
`;resultElement.innerHTML = html;
}downloadItinerary(itinerary) {
const content = this.generateDownloadContent(itinerary);
const blob = new Blob([content], { type: 'text/html;charset=utf-8' });
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `Gemi-Tours-Personalized-Itinerary-${Date.now()}.html`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(url);
}generateDownloadContent(itinerary) {
return `
Gemi Tours - Your Personalized Itinerary ๐ค Traveler Information Name: ${itinerary.personalDetails.fullName || 'Not provided'}
Email: ${itinerary.personalDetails.email || 'Not provided'}
Mobile: ${itinerary.personalDetails.whatsappNumber || 'Not provided'}
${itinerary.personalDetails.nationality ? `
Nationality: ${itinerary.personalDetails.nationality}
` : ''}
${itinerary.personalDetails.currentCity ? `
Current City: ${itinerary.personalDetails.currentCity}
` : ''}
${itinerary.personalDetails.specialRequests ? `
Special Requests: ${itinerary.personalDetails.specialRequests}
` : ''}
๐ฐ Trip Summary Total Cost: ${this.formatGHS(itinerary.totalEstimatedCost)} for ${itinerary.travelers} travelers
Duration: ${itinerary.duration} days
Selected Experiences: ${itinerary.ghanaExperienceDetails.length}
Additional Services: ${itinerary.additionalServices.length}
Generated: ${new Date().toLocaleString()} with Live Updates
${itinerary.selectedDays.map(day => `
Day ${day.day} - ${day.country.name} Weather: ${day.weather.condition}, ${day.weather.temp}ยฐC
${day.experience.name} Location: ${day.experience.location}
Duration: ${day.experience.duration}
Price: ${this.formatGHS(day.experience.currentPrice)}
Description: ${day.experience.description}
Includes: ${day.experience.features.join(', ')}
`).join('')}
Generated by Gemi Tours Professional Travel Planner AI
Smart Distance Planning โข Weather Integration โข Route Optimization
Contact: +233 54 804 2551 | Email: info@gemitours.com
`;
}showLoading(show) {
const loader = document.getElementById('loadingIndicator');
const result = document.getElementById('itineraryResult');
if (show) {
loader.classList.add('active');
result.innerHTML = '';
} else {
loader.classList.remove('active');
}
}displayError() {
document.getElementById('itineraryResult').innerHTML = `
โ ๏ธ System Error Unable to generate itinerary. Please check your inputs and try again.
`;
}loadCountryData() {
return [
{ name: '๐ฆ๐ซ Afghanistan', code: 'AF', currency: 'AFN', capital: 'Kabul' },
{ name: '๐ฆ๐ฑ Albania', code: 'AL', currency: 'ALL', capital: 'Tirana' },
{ name: '๐ฉ๐ฟ Algeria', code: 'DZ', currency: 'DZD', capital: 'Algiers' },
{ name: '๐ฆ๐ฉ Andorra', code: 'AD', currency: 'EUR', capital: 'Andorra la Vella' },
{ name: '๐ฆ๐ด Angola', code: 'AO', currency: 'AOA', capital: 'Luanda' },
{ name: '๐ฆ๐ฌ Antigua and Barbuda', code: 'AG', currency: 'XCD', capital: 'Saint John\'s' },
{ name: '๐ฆ๐ท Argentina', code: 'AR', currency: 'ARS', capital: 'Buenos Aires' },
{ name: '๐ฆ๐ฒ Armenia', code: 'AM', currency: 'AMD', capital: 'Yerevan' },
{ name: '๐ฆ๐บ Australia', code: 'AU', currency: 'AUD', capital: 'Canberra' },
{ name: '๐ฆ๐น Austria', code: 'AT', currency: 'EUR', capital: 'Vienna' },
{ name: '๐ฆ๐ฟ Azerbaijan', code: 'AZ', currency: 'AZN', capital: 'Baku' },
{ name: '๐ง๐ธ Bahamas', code: 'BS', currency: 'BSD', capital: 'Nassau' },
{ name: '๐ง๐ญ Bahrain', code: 'BH', currency: 'BHD', capital: 'Manama' },
{ name: '๐ง๐ฉ Bangladesh', code: 'BD', currency: 'BDT', capital: 'Dhaka' },
{ name: '๐ง๐ง Barbados', code: 'BB', currency: 'BBD', capital: 'Bridgetown' },
{ name: '๐ง๐พ Belarus', code: 'BY', currency: 'BYN', capital: 'Minsk' },
{ name: '๐ง๐ช Belgium', code: 'BE', currency: 'EUR', capital: 'Brussels' },
{ name: '๐ง๐ฟ Belize', code: 'BZ', currency: 'BZD', capital: 'Belmopan' },
{ name: '๐ง๐ฏ Benin', code: 'BJ', currency: 'XOF', capital: 'Porto-Novo' },
{ name: '๐ง๐น Bhutan', code: 'BT', currency: 'BTN', capital: 'Thimphu' },
{ name: '๐ง๐ด Bolivia', code: 'BO', currency: 'BOB', capital: 'Sucre' },
{ name: '๐ง๐ฆ Bosnia and Herzegovina', code: 'BA', currency: 'BAM', capital: 'Sarajevo' },
{ name: '๐ง๐ผ Botswana', code: 'BW', currency: 'BWP', capital: 'Gaborone' },
{ name: '๐ง๐ท Brazil', code: 'BR', currency: 'BRL', capital: 'Brasรญlia' },
{ name: '๐ง๐ณ Brunei', code: 'BN', currency: 'BND', capital: 'Bandar Seri Begawan' },
{ name: '๐ง๐ฌ Bulgaria', code: 'BG', currency: 'BGN', capital: 'Sofia' },
{ name: '๐ง๐ซ Burkina Faso', code: 'BF', currency: 'XOF', capital: 'Ouagadougou' },
{ name: '๐ง๐ฎ Burundi', code: 'BI', currency: 'BIF', capital: 'Gitega' },
{ name: '๐ฐ๐ญ Cambodia', code: 'KH', currency: 'KHR', capital: 'Phnom Penh' },
{ name: '๐จ๐ฒ Cameroon', code: 'CM', currency: 'XAF', capital: 'Yaoundรฉ' },
{ name: '๐จ๐ฆ Canada', code: 'CA', currency: 'CAD', capital: 'Ottawa' },
{ name: '๐จ๐ป Cape Verde', code: 'CV', currency: 'CVE', capital: 'Praia' },
{ name: '๐จ๐ซ Central African Republic', code: 'CF', currency: 'XAF', capital: 'Bangui' },
{ name: '๐น๐ฉ Chad', code: 'TD', currency: 'XAF', capital: 'N\'Djamena' },
{ name: '๐จ๐ฑ Chile', code: 'CL', currency: 'CLP', capital: 'Santiago' },
{ name: '๐จ๐ณ China', code: 'CN', currency: 'CNY', capital: 'Beijing' },
{ name: '๐จ๐ด Colombia', code: 'CO', currency: 'COP', capital: 'Bogotรก' },
{ name: '๐ฐ๐ฒ Comoros', code: 'KM', currency: 'KMF', capital: 'Moroni' },
{ name: '๐จ๐ฌ Congo', code: 'CG', currency: 'XAF', capital: 'Brazzaville' },
{ name: '๐จ๐ฉ Democratic Republic of the Congo', code: 'CD', currency: 'CDF', capital: 'Kinshasa' },
{ name: '๐จ๐ท Costa Rica', code: 'CR', currency: 'CRC', capital: 'San Josรฉ' },
{ name: '๐ญ๐ท Croatia', code: 'HR', currency: 'HRK', capital: 'Zagreb' },
{ name: '๐จ๐บ Cuba', code: 'CU', currency: 'CUP', capital: 'Havana' },
{ name: '๐จ๐พ Cyprus', code: 'CY', currency: 'EUR', capital: 'Nicosia' },
{ name: '๐จ๐ฟ Czech Republic', code: 'CZ', currency: 'CZK', capital: 'Prague' },
{ name: '๐ฉ๐ฐ Denmark', code: 'DK', currency: 'DKK', capital: 'Copenhagen' },
{ name: '๐ฉ๐ฏ Djibouti', code: 'DJ', currency: 'DJF', capital: 'Djibouti' },
{ name: '๐ฉ๐ฒ Dominica', code: 'DM', currency: 'XCD', capital: 'Roseau' },
{ name: '๐ฉ๐ด Dominican Republic', code: 'DO', currency: 'DOP', capital: 'Santo Domingo' },
{ name: '๐ช๐จ Ecuador', code: 'EC', currency: 'USD', capital: 'Quito' },
{ name: '๐ช๐ฌ Egypt', code: 'EG', currency: 'EGP', capital: 'Cairo' },
{ name: '๐ธ๐ป El Salvador', code: 'SV', currency: 'USD', capital: 'San Salvador' },
{ name: '๐ฌ๐ถ Equatorial Guinea', code: 'GQ', currency: 'XAF', capital: 'Malabo' },
{ name: '๐ช๐ท Eritrea', code: 'ER', currency: 'ERN', capital: 'Asmara' },
{ name: '๐ช๐ช Estonia', code: 'EE', currency: 'EUR', capital: 'Tallinn' },
{ name: '๐ธ๐ฟ Eswatini', code: 'SZ', currency: 'SZL', capital: 'Mbabane' },
{ name: '๐ช๐น Ethiopia', code: 'ET', currency: 'ETB', capital: 'Addis Ababa' },
{ name: '๐ซ๐ฏ Fiji', code: 'FJ', currency: 'FJD', capital: 'Suva' },
{ name: '๐ซ๐ฎ Finland', code: 'FI', currency: 'EUR', capital: 'Helsinki' },
{ name: '๐ซ๐ท France', code: 'FR', currency: 'EUR', capital: 'Paris' },
{ name: '๐ฌ๐ฆ Gabon', code: 'GA', currency: 'XAF', capital: 'Libreville' },
{ name: '๐ฌ๐ฒ Gambia', code: 'GM', currency: 'GMD', capital: 'Banjul' },
{ name: '๐ฌ๐ช Georgia', code: 'GE', currency: 'GEL', capital: 'Tbilisi' },
{ name: '๐ฉ๐ช Germany', code: 'DE', currency: 'EUR', capital: 'Berlin' },
{ name: '๐ฌ๐ญ Ghana', code: 'GH', currency: 'GHS', capital: 'Accra' },
{ name: '๐ฌ๐ท Greece', code: 'GR', currency: 'EUR', capital: 'Athens' },
{ name: '๐ฌ๐ฉ Grenada', code: 'GD', currency: 'XCD', capital: 'St. George\'s' },
{ name: '๐ฌ๐น Guatemala', code: 'GT', currency: 'GTQ', capital: 'Guatemala City' },
{ name: '๐ฌ๐ณ Guinea', code: 'GN', currency: 'GNF', capital: 'Conakry' },
{ name: '๐ฌ๐ผ Guinea-Bissau', code: 'GW', currency: 'XOF', capital: 'Bissau' },
{ name: '๐ฌ๐พ Guyana', code: 'GY', currency: 'GYD', capital: 'Georgetown' },
{ name: '๐ญ๐น Haiti', code: 'HT', currency: 'HTG', capital: 'Port-au-Prince' },
{ name: '๐ญ๐ณ Honduras', code: 'HN', currency: 'HNL', capital: 'Tegucigalpa' },
{ name: '๐ญ๐บ Hungary', code: 'HU', currency: 'HUF', capital: 'Budapest' },
{ name: '๐ฎ๐ธ Iceland', code: 'IS', currency: 'ISK', capital: 'Reykjavik' },
{ name: '๐ฎ๐ณ India', code: 'IN', currency: 'INR', capital: 'New Delhi' },
{ name: '๐ฎ๐ฉ Indonesia', code: 'ID', currency: 'IDR', capital: 'Jakarta' },
{ name: '๐ฎ๐ท Iran', code: 'IR', currency: 'IRR', capital: 'Tehran' },
{ name: '๐ฎ๐ถ Iraq', code: 'IQ', currency: 'IQD', capital: 'Baghdad' },
{ name: '๐ฎ๐ช Ireland', code: 'IE', currency: 'EUR', capital: 'Dublin' },
{ name: '๐ฎ๐ฑ Israel', code: 'IL', currency: 'ILS', capital: 'Jerusalem' },
{ name: '๐ฎ๐น Italy', code: 'IT', currency: 'EUR', capital: 'Rome' },
{ name: '๐จ๐ฎ Ivory Coast', code: 'CI', currency: 'XOF', capital: 'Yamoussoukro' },
{ name: '๐ฏ๐ฒ Jamaica', code: 'JM', currency: 'JMD', capital: 'Kingston' },
{ name: '๐ฏ๐ต Japan', code: 'JP', currency: 'JPY', capital: 'Tokyo' },
{ name: '๐ฏ๐ด Jordan', code: 'JO', currency: 'JOD', capital: 'Amman' },
{ name: '๐ฐ๐ฟ Kazakhstan', code: 'KZ', currency: 'KZT', capital: 'Nur-Sultan' },
{ name: '๐ฐ๐ช Kenya', code: 'KE', currency: 'KES', capital: 'Nairobi' },
{ name: '๐ฐ๐ฎ Kiribati', code: 'KI', currency: 'AUD', capital: 'Tarawa' },
{ name: '๐ฐ๐ผ Kuwait', code: 'KW', currency: 'KWD', capital: 'Kuwait City' },
{ name: '๐ฐ๐ฌ Kyrgyzstan', code: 'KG', currency: 'KGS', capital: 'Bishkek' },
{ name: '๐ฑ๐ฆ Laos', code: 'LA', currency: 'LAK', capital: 'Vientiane' },
{ name: '๐ฑ๐ป Latvia', code: 'LV', currency: 'EUR', capital: 'Riga' },
{ name: '๐ฑ๐ง Lebanon', code: 'LB', currency: 'LBP', capital: 'Beirut' },
{ name: '๐ฑ๐ธ Lesotho', code: 'LS', currency: 'LSL', capital: 'Maseru' },
{ name: '๐ฑ๐ท Liberia', code: 'LR', currency: 'LRD', capital: 'Monrovia' },
{ name: '๐ฑ๐พ Libya', code: 'LY', currency: 'LYD', capital: 'Tripoli' },
{ name: '๐ฑ๐ฎ Liechtenstein', code: 'LI', currency: 'CHF', capital: 'Vaduz' },
{ name: '๐ฑ๐น Lithuania', code: 'LT', currency: 'EUR', capital: 'Vilnius' },
{ name: '๐ฑ๐บ Luxembourg', code: 'LU', currency: 'EUR', capital: 'Luxembourg' },
{ name: '๐ฒ๐ฌ Madagascar', code: 'MG', currency: 'MGA', capital: 'Antananarivo' },
{ name: '๐ฒ๐ผ Malawi', code: 'MW', currency: 'MWK', capital: 'Lilongwe' },
{ name: '๐ฒ๐พ Malaysia', code: 'MY', currency: 'MYR', capital: 'Kuala Lumpur' },
{ name: '๐ฒ๐ป Maldives', code: 'MV', currency: 'MVR', capital: 'Malรฉ' },
{ name: '๐ฒ๐ฑ Mali', code: 'ML', currency: 'XOF', capital: 'Bamako' },
{ name: '๐ฒ๐น Malta', code: 'MT', currency: 'EUR', capital: 'Valletta' },
{ name: '๐ฒ๐ญ Marshall Islands', code: 'MH', currency: 'USD', capital: 'Majuro' },
{ name: '๐ฒ๐ท Mauritania', code: 'MR', currency: 'MRU', capital: 'Nouakchott' },
{ name: '๐ฒ๐บ Mauritius', code: 'MU', currency: 'MUR', capital: 'Port Louis' },
{ name: '๐ฒ๐ฝ Mexico', code: 'MX', currency: 'MXN', capital: 'Mexico City' },
{ name: '๐ซ๐ฒ Micronesia', code: 'FM', currency: 'USD', capital: 'Palikir' },
{ name: '๐ฒ๐ฉ Moldova', code: 'MD', currency: 'MDL', capital: 'Chiศinฤu' },
{ name: '๐ฒ๐จ Monaco', code: 'MC', currency: 'EUR', capital: 'Monaco' },
{ name: '๐ฒ๐ณ Mongolia', code: 'MN', currency: 'MNT', capital: 'Ulaanbaatar' },
{ name: '๐ฒ๐ช Montenegro', code: 'ME', currency: 'EUR', capital: 'Podgorica' },
{ name: '๐ฒ๐ฆ Morocco', code: 'MA', currency: 'MAD', capital: 'Rabat' },
{ name: '๐ฒ๐ฟ Mozambique', code: 'MZ', currency: 'MZN', capital: 'Maputo' },
{ name: '๐ฒ๐ฒ Myanmar', code: 'MM', currency: 'MMK', capital: 'Naypyidaw' },
{ name: '๐ณ๐ฆ Namibia', code: 'NA', currency: 'NAD', capital: 'Windhoek' },
{ name: '๐ณ๐ท Nauru', code: 'NR', currency: 'AUD', capital: 'Yaren' },
{ name: '๐ณ๐ต Nepal', code: 'NP', currency: 'NPR', capital: 'Kathmandu' },
{ name: '๐ณ๐ฑ Netherlands', code: 'NL', currency: 'EUR', capital: 'Amsterdam' },
{ name: '๐ณ๐ฟ New Zealand', code: 'NZ', currency: 'NZD', capital: 'Wellington' },
{ name: '๐ณ๐ฎ Nicaragua', code: 'NI', currency: 'NIO', capital: 'Managua' },
{ name: '๐ณ๐ช Niger', code: 'NE', currency: 'XOF', capital: 'Niamey' },
{ name: '๐ณ๐ฌ Nigeria', code: 'NG', currency: 'NGN', capital: 'Abuja' },
{ name: '๐ฐ๐ต North Korea', code: 'KP', currency: 'KPW', capital: 'Pyongyang' },
{ name: '๐ฒ๐ฐ North Macedonia', code: 'MK', currency: 'MKD', capital: 'Skopje' },
{ name: '๐ณ๐ด Norway', code: 'NO', currency: 'NOK', capital: 'Oslo' },
{ name: '๐ด๐ฒ Oman', code: 'OM', currency: 'OMR', capital: 'Muscat' },
{ name: '๐ต๐ฐ Pakistan', code: 'PK', currency: 'PKR', capital: 'Islamabad' },
{ name: '๐ต๐ผ Palau', code: 'PW', currency: 'USD', capital: 'Ngerulmud' },
{ name: '๐ต๐ธ Palestine', code: 'PS', currency: 'ILS', capital: 'East Jerusalem' },
{ name: '๐ต๐ฆ Panama', code: 'PA', currency: 'PAB', capital: 'Panama City' },
{ name: '๐ต๐ฌ Papua New Guinea', code: 'PG', currency: 'PGK', capital: 'Port Moresby' },
{ name: '๐ต๐พ Paraguay', code: 'PY', currency: 'PYG', capital: 'Asunciรณn' },
{ name: '๐ต๐ช Peru', code: 'PE', currency: 'PEN', capital: 'Lima' },
{ name: '๐ต๐ญ Philippines', code: 'PH', currency: 'PHP', capital: 'Manila' },
{ name: '๐ต๐ฑ Poland', code: 'PL', currency: 'PLN', capital: 'Warsaw' },
{ name: '๐ต๐น Portugal', code: 'PT', currency: 'EUR', capital: 'Lisbon' },
{ name: '๐ถ๐ฆ Qatar', code: 'QA', currency: 'QAR', capital: 'Doha' },
{ name: '๐ท๐ด Romania', code: 'RO', currency: 'RON', capital: 'Bucharest' },
{ name: '๐ท๐บ Russia', code: 'RU', currency: 'RUB', capital: 'Moscow' },
{ name: '๐ท๐ผ Rwanda', code: 'RW', currency: 'RWF', capital: 'Kigali' },
{ name: '๐ผ๐ธ Samoa', code: 'WS', currency: 'WST', capital: 'Apia' },
{ name: '๐ธ๐ฒ San Marino', code: 'SM', currency: 'EUR', capital: 'San Marino' },
{ name: '๐ธ๐น Sรฃo Tomรฉ and Prรญncipe', code: 'ST', currency: 'STN', capital: 'Sรฃo Tomรฉ' },
{ name: '๐ธ๐ฆ Saudi Arabia', code: 'SA', currency: 'SAR', capital: 'Riyadh' },
{ name: '๐ธ๐ณ Senegal', code: 'SN', currency: 'XOF', capital: 'Dakar' },
{ name: '๐ท๐ธ Serbia', code: 'RS', currency: 'RSD', capital: 'Belgrade' },
{ name: '๐ธ๐จ Seychelles', code: 'SC', currency: 'SCR', capital: 'Victoria' },
{ name: '๐ธ๐ฑ Sierra Leone', code: 'SL', currency: 'SLE', capital: 'Freetown' },
{ name: '๐ธ๐ฌ Singapore', code: 'SG', currency: 'SGD', capital: 'Singapore' },
{ name: '๐ธ๐ฐ Slovakia', code: 'SK', currency: 'EUR', capital: 'Bratislava' },
{ name: '๐ธ๐ฎ Slovenia', code: 'SI', currency: 'EUR', capital: 'Ljubljana' },
{ name: '๐ธ๐ง Solomon Islands', code: 'SB', currency: 'SBD', capital: 'Honiara' },
{ name: '๐ธ๐ด Somalia', code: 'SO', currency: 'SOS', capital: 'Mogadishu' },
{ name: '๐ฟ๐ฆ South Africa', code: 'ZA', currency: 'ZAR', capital: 'Cape Town' },
{ name: '๐ฐ๐ท South Korea', code: 'KR', currency: 'KRW', capital: 'Seoul' },
{ name: '๐ธ๐ธ South Sudan', code: 'SS', currency: 'SSP', capital: 'Juba' },
{ name: '๐ช๐ธ Spain', code: 'ES', currency: 'EUR', capital: 'Madrid' },
{ name: '๐ฑ๐ฐ Sri Lanka', code: 'LK', currency: 'LKR', capital: 'Colombo' },
{ name: '๐ฐ๐ณ Saint Kitts and Nevis', code: 'KN', currency: 'XCD', capital: 'Basseterre' },
{ name: '๐ฑ๐จ Saint Lucia', code: 'LC', currency: 'XCD', capital: 'Castries' },
{ name: '๐ป๐จ Saint Vincent and the Grenadines', code: 'VC', currency: 'XCD', capital: 'Kingstown' },
{ name: '๐ธ๐ฉ Sudan', code: 'SD', currency: 'SDG', capital: 'Khartoum' },
{ name: '๐ธ๐ท Suriname', code: 'SR', currency: 'SRD', capital: 'Paramaribo' },
{ name: '๐ธ๐ช Sweden', code: 'SE', currency: 'SEK', capital: 'Stockholm' },
{ name: '๐จ๐ญ Switzerland', code: 'CH', currency: 'CHF', capital: 'Bern' },
{ name: '๐ธ๐พ Syria', code: 'SY', currency: 'SYP', capital: 'Damascus' },
{ name: '๐น๐ฏ Tajikistan', code: 'TJ', currency: 'TJS', capital: 'Dushanbe' },
{ name: '๐น๐ฟ Tanzania', code: 'TZ', currency: 'TZS', capital: 'Dodoma' },
{ name: '๐น๐ญ Thailand', code: 'TH', currency: 'THB', capital: 'Bangkok' },
{ name: '๐น๐ฑ Timor-Leste', code: 'TL', currency: 'USD', capital: 'Dili' },
{ name: '๐น๐ฌ Togo', code: 'TG', currency: 'XOF', capital: 'Lomรฉ' },
{ name: '๐น๐ด Tonga', code: 'TO', currency: 'TOP', capital: 'Nuku\'alofa' },
{ name: '๐น๐น Trinidad and Tobago', code: 'TT', currency: 'TTD', capital: 'Port of Spain' },
{ name: '๐น๐ณ Tunisia', code: 'TN', currency: 'TND', capital: 'Tunis' },
{ name: '๐น๐ท Turkey', code: 'TR', currency: 'TRY', capital: 'Ankara' },
{ name: '๐น๐ฒ Turkmenistan', code: 'TM', currency: 'TMT', capital: 'Ashgabat' },
{ name: '๐น๐ป Tuvalu', code: 'TV', currency: 'AUD', capital: 'Funafuti' },
{ name: '๐บ๐ฌ Uganda', code: 'UG', currency: 'UGX', capital: 'Kampala' },
{ name: '๐บ๐ฆ Ukraine', code: 'UA', currency: 'UAH', capital: 'Kyiv' },
{ name: '๐ฆ๐ช United Arab Emirates', code: 'AE', currency: 'AED', capital: 'Abu Dhabi' },
{ name: '๐ฌ๐ง United Kingdom', code: 'GB', currency: 'GBP', capital: 'London' },
{ name: '๐บ๐ธ United States', code: 'US', currency: 'USD', capital: 'Washington, D.C.' },
{ name: '๐บ๐พ Uruguay', code: 'UY', currency: 'UYU', capital: 'Montevideo' },
{ name: '๐บ๐ฟ Uzbekistan', code: 'UZ', currency: 'UZS', capital: 'Tashkent' },
{ name: '๐ป๐บ Vanuatu', code: 'VU', currency: 'VUV', capital: 'Port Vila' },
{ name: '๐ป๐ฆ Vatican City', code: 'VA', currency: 'EUR', capital: 'Vatican City' },
{ name: '๐ป๐ช Venezuela', code: 'VE', currency: 'VES', capital: 'Caracas' },
{ name: '๐ป๐ณ Vietnam', code: 'VN', currency: 'VND', capital: 'Hanoi' },
{ name: '๐พ๐ช Yemen', code: 'YE', currency: 'YER', capital: 'Sana\'a' },
{ name: '๐ฟ๐ฒ Zambia', code: 'ZM', currency: 'ZMW', capital: 'Lusaka' },
{ name: '๐ฟ๐ผ Zimbabwe', code: 'ZW', currency: 'ZWL', capital: 'Harare' }
];
}loadWeatherPatterns() {
return {
tropical: ['Sunny', 'Partly Cloudy', 'Thunderstorms', 'Heavy Rain'],
temperate: ['Sunny', 'Cloudy', 'Light Rain', 'Partly Cloudy'],
arid: ['Sunny', 'Hot', 'Dusty', 'Clear Skies'],
cold: ['Cloudy', 'Snow', 'Foggy', 'Overcast'],
mediterranean: ['Sunny', 'Mild', 'Breezy', 'Pleasant']
};
}loadRealAttractions() {
return {
'GH': {
name: 'Ghana',
regions: {
'Volta Region': [
{ name: 'Amedzofe Mount Gemi Guided Expeditions', location: 'Amedzofe', type: 'Adventure', cost: 145 },
{ name: 'Amedzofe Canopy Walkway & Ote Waterfalls', location: 'Amedzofe', type: 'Nature', cost: 120 },
{ name: 'Amedzofe The Dark Forest Historical Experience', location: 'Amedzofe', type: 'Historical', cost: 95 },
{ name: 'Wli Waterfalls Exploration', location: 'Hohoe', type: 'Nature', cost: 110 },
{ name: 'Tafi Monkey Sanctuary', location: 'Tafi Atome', type: 'Wildlife', cost: 85 },
{ name: 'Kpetoe Kente Village Experience', location: 'Kpetoe', type: 'Cultural', cost: 105 }
],
'Central Region': [
{ name: 'Cape Coast Castle Historical Immersion', location: 'Cape Coast', type: 'Historical', cost: 75 },
{ name: 'Elmina Castle & Town Historical Journey', location: 'Elmina', type: 'Historical', cost: 80 },
{ name: 'Kakum National Park Canopy Walk Adventure', location: 'Cape Coast', type: 'Adventure', cost: 110 }
],
'Ashanti Region': [
{ name: 'Manhyia Palace Museum Royal Heritage Tour', location: 'Kumasi', type: 'Historical', cost: 70 },
{ name: 'Bonwire Royal Kente Village Experience', location: 'Bonwire', type: 'Cultural', cost: 90 },
{ name: 'Lake Bosumtwi Sacred Crater Lake Ecosystem Tour', location: 'Lake Bosumtwi', type: 'Nature', cost: 105 }
],
'Western Region': [
{ name: 'Nzulezu Ancient Stilt Village Cultural Immersion', location: 'Beyin', type: 'Cultural', cost: 125 }
],
'Greater Accra Region': [
{ name: 'Accra Cultural Heritage & Modern City Tour', location: 'Accra', type: 'Cultural', cost: 65 }
]
}
}
};
}
}// ChatBot Functionality
class GemiToursChatBot {
constructor() {
this.exchangeRate = 12.28;
this.responses = {
'hello': ['Hello! Welcome to Gemi Tours! How can I help you plan your perfect trip today?'],
'hi': ['Hi there! I\'m your Gemi Tours assistant. What can I help you with?'],
'services': ['We offer comprehensive travel services:\n\n๐ **Study Abroad** - From GHS โต3,050 ($500)\n๐ผ **Work Abroad** - From GHS โต2,440 ($400)\nโ๏ธ **Smart Booking** - From GHS โต305 ($50)\n๐ **Visa Assistance** - From GHS โต610 ($100)\n๐ฌ๐ญ **Ghana Experiences** - From GHS โต274 ($45)\n\nWhich service interests you?'],
'study abroad': ['๐ **Study Abroad Services** (Most affordable in Africa!):\n\nโข **Predictive University Matching** - GHS โต1,525 ($250)\nโข **5 University Applications + Scholarships** - GHS โต2,135 ($350)\nโข **Accommodation Search & Booking** - GHS โต915 ($150)\nโข **Embassy Documentation** - GHS โต610 ($100)\nโข **Complete Visa Support + Mock Interviews** - GHS โต1,220 ($200)\nโข **Travel Package** - GHS โต1,830 ($300)\nโข **24/7 Academic Advisor** - GHS โต305 ($50/month)\n\n**Complete Package**: GHS โต6,100 ($1,000) - Save 30%!'],
'study': ['๐ **Study Abroad Services** (Most affordable in Africa!):\n\nโข **Predictive University Matching** - GHS โต1,525 ($250)\nโข **5 University Applications + Scholarships** - GHS โต2,135 ($350)\nโข **Accommodation Search & Booking** - GHS โต915 ($150)\nโข **Embassy Documentation** - GHS โต610 ($100)\nโข **Complete Visa Support + Mock Interviews** - GHS โต1,220 ($200)\nโข **Travel Package** - GHS โต1,830 ($300)\nโข **24/7 Academic Advisor** - GHS โต305 ($50/month)\n\n**Complete Package**: GHS โต6,100 ($1,000) - Save 30%!'],
'work abroad': ['๐ผ **Work Abroad Services** (Best rates in Ghana!):\n\nโข **AI-powered Job Discovery** - GHS โต1,220 ($200)\nโข **ATS-optimized Resume + Keywords** - GHS โต610 ($100)\nโข **Global Salary Analysis** - GHS โต305 ($50)\nโข **InterviewBot AI + Mock Sessions** - GHS โต915 ($150)\nโข **Work Permit + Sponsorship** - GHS โต1,525 ($250)\nโข **Complete Relocation Package** - GHS โต2,135 ($350)\nโข **Career Specialists** - GHS โต610 ($100/month)\n\n**Complete Package**: GHS โต4,880 ($800) - Save 35%!'],
'work': ['๐ผ **Work Abroad Services** (Best rates in Ghana!):\n\nโข **AI-powered Job Discovery** - GHS โต1,220 ($200)\nโข **ATS-optimized Resume + Keywords** - GHS โต610 ($100)\nโข **Global Salary Analysis** - GHS โต305 ($50)\nโข **InterviewBot AI + Mock Sessions** - GHS โต915 ($150)\nโข **Work Permit + Sponsorship** - GHS โต1,525 ($250)\nโข **Complete Relocation Package** - GHS โต2,135 ($350)\nโข **Career Specialists** - GHS โต610 ($100/month)\n\n**Complete Package**: GHS โต4,880 ($800) - Save 35%!'],
'smart booking': ['โ๏ธ **Smart Booking Services** (Cheapest in Africa!):\n\nโข **Cheapest Fare Finder** - GHS โต305 ($50)\nโข **Route Optimization** - GHS โต183 ($30)\nโข **Visa-approved Accommodations** - GHS โต610 ($100)\nโข **Ground Transportation + Eco-options** - GHS โต458 ($75)\nโข **Embassy-compliant Insurance** - GHS โต244 ($40)\nโข **Carbon Tracking + Offset** - GHS โต122 ($20)\n\n**Complete Package**: GHS โต1,525 ($250) - Save 25%!'],
'booking': ['โ๏ธ **Smart Booking Services** (Cheapest in Africa!):\n\nโข **Cheapest Fare Finder** - GHS โต305 ($50)\nโข **Route Optimization** - GHS โต183 ($30)\nโข **Visa-approved Accommodations** - GHS โต610 ($100)\nโข **Ground Transportation + Eco-options** - GHS โต458 ($75)\nโข **Embassy-compliant Insurance** - GHS โต244 ($40)\nโข **Carbon Tracking + Offset** - GHS โต122 ($20)\n\n**Complete Package**: GHS โต1,525 ($250) - Save 25%!'],
'visa': ['๐ **Visa Application Services** (Free assessment!):\n\nโข **Free Visa Eligibility Assessment** - FREE (instant!)\nโข **Dynamic Form Filling** - GHS โต610 ($100)\nโข **EmbassySimโข VR Interview Training** - GHS โต915 ($150)\nโข **VFS/TLS Scheduler + Booking** - GHS โต458 ($75)\nโข **Rejection Insurance + Reapplication** - GHS โต1,525 ($250)\n\n**Complete Package**: GHS โต2,440 ($400) - Includes FREE reapplication guarantee!'],
'visa assistance': ['๐ **Visa Application Services** (Free assessment!):\n\nโข **Free Visa Eligibility Assessment** - FREE (instant!)\nโข **Dynamic Form Filling** - GHS โต610 ($100)\nโข **EmbassySimโข VR Interview Training** - GHS โต915 ($150)\nโข **VFS/TLS Scheduler + Booking** - GHS โต458 ($75)\nโข **Rejection Insurance + Reapplication** - GHS โต1,525 ($250)\n\n**Complete Package**: GHS โต2,440 ($400) - Includes FREE reapplication guarantee!'],
'price': ['Our comprehensive services start from:\n\n๐ Study Abroad: GHS โต1,525 ($250) per service\n๐ผ Work Abroad: GHS โต610 ($100) per service \nโ๏ธ Smart Booking: GHS โต183 ($30) per service\n๐ Visa Services: FREE assessment + GHS โต458 ($75)\n๐ฌ๐ญ Ghana Tours: GHS โต274 ($45) - GHS โต885 ($145)\n\nAll prices are in Ghana Cedis with USD equivalent. What service interests you?'],
'pricing': ['Our comprehensive services start from:\n\n๐ Study Abroad: GHS โต1,525 ($250) per service\n๐ผ Work Abroad: GHS โต610 ($100) per service \nโ๏ธ Smart Booking: GHS โต183 ($30) per service\n๐ Visa Services: FREE assessment + GHS โต458 ($75)\n๐ฌ๐ญ Ghana Tours: GHS โต274 ($45) - GHS โต885 ($145)\n\nAll prices are in Ghana Cedis with USD equivalent. What service interests you?'],
'ghana': ['๐ฌ๐ญ **Ghana Premium Experiences** (Complete catalog!):\n\n**Volta Region**: Amedzofe Mount Gemi, Canopy Walkway, Amedzofe Dark Forest, Wli Waterfalls, Tafi Monkeys, Kente Villages, Keta Forte, Afadjato, Liati Waterfalls\n\n**Central Region**: Cape Coast Castle, Elmina Castle, Kakum Canopy Walk\n\n**Ashanti Region**: Manhyia Palace, Kejetia Market, Golden Sword Site, Bonwire Kente, Lake Bosumtwi\n\n**Other Regions**: Nzulezu Stilt Village, Independence Square, Arts Center, Shai Hills, Aburi Gardens\n\n**Prices**: GHS โต274 ($45) - GHS โต885 ($145). Which region interests you most?'],
'mount gemi': ['๐๏ธ **Amedzofe Mount Gemi Expedition** - Ghana\'s highest peak!\n\n**Price**: GHS โต885 ($145) per person\n**Duration**: 6-8 hours\n**Includes**: Professional guide, safety equipment, village tour, traditional lunch, summit certificate, photos\n\n**Highlights**: 885m above sea level, panoramic views of 3 countries, traditional Ewe village experience. Would you like to add this to your itinerary?'],
'kente': ['๐จ **Kente Experiences** available in 2 villages:\n\n**Kpetoe Village**: GHS โต640 ($105) - Birthplace of Kente\n**Bonwire Village**: GHS โต549 ($90) - Royal Kente for kings\n\nBoth include master weaver training, hands-on weaving, color symbolism education, and creating your own Kente strip. Which village interests you?'],
'budget': ['๐ฐ **Our Affordable Pricing** (Most competitive in Africa!):\n\n**Study Abroad**: Complete package GHS โต6,100 ($1,000)\n**Work Abroad**: Complete package GHS โต4,880 ($800)\n**Smart Booking**: Complete package GHS โต1,525 ($250)\n**Visa Services**: Complete package GHS โต2,440 ($400)\n**Ghana Tours**: GHS โต274-885 ($45-145) per experience\n\nAll prices include live updates and professional support. What fits your budget?'],
'book': ['Ready to book? Here are your options:\n\n๐ **Contact our experts**: +233 54 804 2551\n๐ **Visit**: https://gemitours.com/contact/\n\nOr continue planning here - I can help you:\nโข Compare service packages\nโข Get instant visa assessment\nโข Plan your Ghana itinerary\nโข Calculate total costs\n\nWhat would you like to do next?'],
'booking': ['Ready to book? Here are your options:\n\n๐ **Contact our experts**: +233 54 804 2551\n๐ **Visit**: https://gemitours.com/contact/\n\nOr continue planning here - I can help you:\nโข Compare service packages\nโข Get instant visa assessment\nโข Plan your Ghana itinerary\nโข Calculate total costs\n\nWhat would you like to do next?'],
'contact': ['๐ **Contact Gemi Tours**:\n\nโข **WhatsApp**: +233 54 804 2551 (24/7)\nโข **Website**: https://gemitours.com/contact/\nโข **Email**: info@gemitours.com\n\n**Our Services**:\n๐ Study Abroad | ๐ผ Work Abroad | โ๏ธ Smart Booking\n๐ Visa Assistance | ๐ฌ๐ญ Ghana Tours\n\n**Why Choose Us**: Most affordable prices in Ghana & Africa, yet premium quality service. I\'m also here 24/7 to help!'],
'help': ['I can help you with:\n\n๐ **Study Abroad**: University matching, applications, visas\n๐ผ **Work Abroad**: Job discovery, resume optimization, permits\nโ๏ธ **Smart Booking**: Cheapest fares, accommodations, insurance\n๐ **Visa Services**: Free assessment, form filling, interview prep\n๐ฌ๐ญ **Ghana Tours**: 25+ premium experiences across 6 regions\n๐ฐ **Pricing**: Most affordable rates in Africa\n๐ **Booking**: Direct contact with travel experts\n\nWhat interests you most?'],
'packages': ['๐ **Complete Service Packages** (Best Value!):\n\n๐ **Study Abroad Complete**: GHS โต6,100 ($1,000) - Save 30%\n๐ผ **Work Abroad Complete**: GHS โต4,880 ($800) - Save 35%\nโ๏ธ **Smart Booking Complete**: GHS โต1,525 ($250) - Save 25%\n๐ **Visa Complete**: GHS โต2,440 ($400) - FREE guarantee\n\n**All packages include**: Live support, premium service, money-back guarantee, and 24/7 assistance. Which package suits your needs?'],
'free': ['๐ **FREE Services Available**:\n\nโข **Visa Eligibility Assessment** - Instant results!\nโข **Travel Consultation** - 30-minute expert advice\nโข **Ghana Experience Recommendations** - Personalized suggestions\nโข **University Matching Preview** - Top 3 matches\nโข **Job Discovery Preview** - 5 visa-sponsoring opportunities\n\nStart with any free service and upgrade anytime! What would you like to try?'],
'default': ['I\'d love to help you with that! I can assist with:\n\n๐ Study Abroad (from GHS โต1,525)\n๐ผ Work Abroad (from GHS โต610)\nโ๏ธ Smart Booking (from GHS โต183)\n๐ Visa Services (FREE assessment)\n๐ฌ๐ญ Ghana Tours (from GHS โต274)\n\nFor detailed assistance:\n๐ +233 54 804 2551\n๐ https://gemitours.com/contact/\n\nWhat specific service interests you?']
};
}getResponse(message) {
const msg = message.toLowerCase();
for (const [key, responses] of Object.entries(this.responses)) {
if (msg.includes(key)) {
return responses[Math.floor(Math.random() * responses.length)];
}
}
return this.responses.default[0];
}convertToGHS(usdAmount) {
return Math.round(usdAmount * this.exchangeRate);
}formatPrice(usdAmount) {
const ghsAmount = this.convertToGHS(usdAmount);
return `GHS โต${ghsAmount} (${usdAmount})`;
}
}// Global functions
function switchTripType(type) {
const generator = window.itineraryGenerator;
generator.currentTripType = type;
document.querySelectorAll('.trip-type-btn').forEach(btn => {
btn.classList.remove('active');
});
event.target.classList.add('active');
document.querySelectorAll('.section').forEach(section => {
section.classList.remove('active');
});
document.getElementById(type + 'Section').classList.add('active');
document.querySelectorAll('.tour-category, .purpose-category, .package-card').forEach(cat => {
cat.classList.remove('selected');
});
generator.selectedCategories = [];
generator.selectedPurposes = [];
generator.selectedPurposeServices = [];
generator.tryAutoGenerate();
}function switchDurationType(type) {
const generator = window.itineraryGenerator;
generator.currentDurationType = type;
document.querySelectorAll('.duration-toggle-btn').forEach(btn => {
btn.classList.remove('active');
});
event.target.classList.add('active');
if (type === 'custom') {
document.getElementById('customDuration').style.display = 'block';
document.getElementById('presetDuration').style.display = 'none';
} else {
document.getElementById('customDuration').style.display = 'none';
document.getElementById('presetDuration').style.display = 'block';
}
generator.tryAutoGenerate();
}function showRegion(regionFilter) {
const generator = window.itineraryGenerator;
if (generator) {
generator.renderExperiencesByRegion(regionFilter);
}
document.querySelectorAll('.region-tab').forEach(tab => {
tab.classList.remove('active');
});
event.target.classList.add('active');
}function openPaymentModal(totalCost) {
const modal = document.getElementById('paymentModal');
const totalElement = document.getElementById('paymentTotal');
const bookingRef = 'GT' + Date.now().toString().slice(-6);
totalElement.innerHTML = `
Total Amount: GHS โต${Math.round(totalCost * 12.28)} (${totalCost}) `;
document.getElementById('bookingReference').textContent = bookingRef;
modal.classList.add('active');
}function closePaymentModal() {
const modal = document.getElementById('paymentModal');
modal.classList.remove('active');
}function copyToClipboard(text) {
navigator.clipboard.writeText(text).then(function() {
const button = event.target;
const originalText = button.textContent;
button.textContent = 'Copied!';
button.style.background = '#10b981';
setTimeout(() => {
button.textContent = originalText;
button.style.background = '#059669';
}, 1500);
}).catch(function(err) {
console.error('Could not copy text: ', err);
const textArea = document.createElement('textarea');
textArea.value = text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
document.execCommand('copy');
const button = event.target;
const originalText = button.textContent;
button.textContent = 'Copied!';
button.style.background = '#10b981';
setTimeout(() => {
button.textContent = originalText;
button.style.background = '#059669';
}, 1500);
} catch(err) {
console.error('Fallback copy failed: ', err);
}
document.body.removeChild(textArea);
});
}function openWhatsApp() {
const details = window.itineraryGenerator ? window.itineraryGenerator.personalDetails : {};
const message = `Hello Gemi Tours! I'm interested in planning a trip. ${details.fullName ? `My name is ${details.fullName}` : 'I need assistance with travel planning.'}`;
const encodedMessage = encodeURIComponent(message);
const whatsappUrl = `https://wa.me/233548042551?text=${encodedMessage}`;
window.open(whatsappUrl, '_blank');
}function toggleChatbot() {
const chatbotWindow = document.getElementById('chatbotWindow');
chatbotWindow.classList.toggle('active');
}function sendChatbotMessage() {
const input = document.getElementById('chatbotInput');
const message = input.value.trim();
if (!message) return;
const messagesContainer = document.getElementById('chatbotMessages');
const userMessage = document.createElement('div');
userMessage.className = 'message user';
userMessage.textContent = message;
messagesContainer.appendChild(userMessage);
const botResponse = window.chatBot.getResponse(message);
setTimeout(() => {
const botMessage = document.createElement('div');
botMessage.className = 'message bot';
botMessage.textContent = botResponse;
messagesContainer.appendChild(botMessage);
messagesContainer.scrollTop = messagesContainer.scrollHeight;
}, 500);
input.value = '';
messagesContainer.scrollTop = messagesContainer.scrollHeight;
}function handleChatbotEnter(event) {
if (event.key === 'Enter') {
sendChatbotMessage();
}
}// Initialize the application
document.addEventListener('DOMContentLoaded', () => {
window.itineraryGenerator = new EnhancedItineraryGenerator();
window.chatBot = new GemiToursChatBot();
const syncNightsWithDays = () => {
const daysInput = document.getElementById('customDays');
const nightsInput = document.getElementById('nights');
if (daysInput && nightsInput) {
const days = parseInt(daysInput.value) || 0;
const nights = Math.max(0, days - 1);
nightsInput.value = nights;
}
};const daysInput = document.getElementById('customDays');
const presetDaysInput = document.getElementById('presetDays');
if (daysInput) {
daysInput.addEventListener('input', syncNightsWithDays);
daysInput.addEventListener('change', syncNightsWithDays);
}
if (presetDaysInput) {
presetDaysInput.addEventListener('change', () => {
const days = parseInt(presetDaysInput.value) || 0;
const nights = Math.max(0, days - 1);
document.getElementById('nights').value = nights;
});
}setTimeout(() => {
const ghanaCountry = window.itineraryGenerator.countryData.find(c => c.code === 'GH');
if (ghanaCountry) {
window.itineraryGenerator.addCountry(ghanaCountry);
}
syncNightsWithDays();
}, 1000);
});