Historical Site
About This Attraction
Hahoe Folk Village, located in Andong, South Korea, is a well-preserved traditional village that offers insight into Korean culture and architecture. The village is renowned for its beautiful natural surroundings, including the Nakdong River that flows nearby. Visitors can explore traditional houses known as hanok, which have been maintained in their original form for centuries. This unique historical site is also recognized by UNESCO as a World Heritage Site, emphasizing its cultural importance.
For those seeking Hahoe Folk Village travel information, its important to note that the village hosts various cultural events and performances throughout the year. One of the highlights is the Mask Dance Festival, where performers don traditional masks and costumes. Additionally, the village provides opportunities to experience Korean customs through workshops and local food offerings. With easy access from major cities like Seoul via train or bus, Hahoe Folk Village serves as an accessible destination for tourists interested in Koreas rich history.
Location Details
Address
40-1, Hahoe-ri, Pungcheon-myeon, Andong-si, Gyeongsangbuk-do, South Korea
Visitor Information
Pricing & Ratings
Ticket Prices
Adult
3000 KRW
Child
1500 KRW
Student
2000 KRW
Senior
2000 KRW
Opening Hours & Booking
Open
Days
Monday to Sunday
Hours
09:00 AM to 06:00 PM
Seasonality
Open all year round
Booking
Booking Required?
No
Nearby Attractions
Andong Confucian Academy, also known as Dosan Seowon, is a significant historical site located in…
Learn More
Haeundae Beach is one of the most popular tourist destinations in Busan, South Korea. Known…
Learn More
Gamcheon Culture Village in Busan is a must-see destination for visitors interested in art and…
Learn More
Jagalchi Fish Market in Busan is one of South Koreas largest seafood markets, located near…
Learn More
Fukuoka Tower, located in Fukuoka City, Japan, stands as one of the tallest seaside towers…
Learn More
Ohori Park in Fukuoka is a popular destination for both locals and tourists, offering a…
Learn More
Canal City Hakata is a large shopping and entertainment complex located in Fukuoka, Japan. It…
Learn More
Universal Studios Japan, located in Osaka, is one of the countrys most popular theme parks,…
Learn More
Dotonbori is a popular tourist destination in Osaka, Japan, known for its vibrant nightlife and…
Learn More
Osaka Castle is a historic landmark situated in Osaka, Japan. It was originally built in…
Learn More
";
}
// Initialize modal controls
const initModalControls = function() {
console.log('Initializing modal controls');
const modal = document.getElementById('attraction-modal');
const closeBtn = document.querySelector('.attraction-modal-close');
if (closeBtn) {
closeBtn.addEventListener('click', function() {
modal.style.display = 'none';
document.body.style.overflow = '';
});
}
window.addEventListener('click', function(event) {
if (event.target === modal) {
modal.style.display = 'none';
document.body.style.overflow = '';
}
});
// Make attraction cards clickable
const attractionCards = document.querySelectorAll('.attraction-card');
console.log('Found ' + attractionCards.length + ' attraction cards');
attractionCards.forEach(card => {
card.addEventListener('click', function(e) {
openModalWithCardData(this);
});
});
};
// Function to open modal with card data
const openModalWithCardData = function(card) {
// Get data from hidden div
const data = card.querySelector('.attraction-full-data');
if (!data) {
console.error('No attraction data found in card');
return;
}
const modal = document.getElementById('attraction-modal');
if (!modal) {
console.error('Modal element still not found after creation attempt');
return;
}
// Helper function to safely get element text
function getElementText(selector) {
const element = data.querySelector(selector);
return element ? element.textContent : '';
}
try {
// Basic Info
document.getElementById('attraction-modal-title').textContent = getElementText('.attraction-name');
document.getElementById('attraction-modal-type').textContent = getElementText('.attraction-type-full');
document.getElementById('attraction-modal-description').textContent = getElementText('.attraction-description-full');
// Reset all containers to hidden
['attraction-modal-hours-container', 'attraction-modal-price-container',
'attraction-modal-address-container', 'attraction-modal-image-container'].forEach(id => {
const container = document.getElementById(id);
if (container) container.style.display = 'none';
});
// Rating
const ratingText = getElementText('.attraction-rating-full');
if (ratingText) {
const ratingValue = parseFloat(ratingText);
if (!isNaN(ratingValue)) {
const ratingValueEl = document.getElementById('attraction-modal-rating-value');
const ratingFillEl = document.getElementById('attraction-modal-rating-fill');
if (ratingValueEl) ratingValueEl.textContent = ratingValue.toFixed(1) + '/10';
if (ratingFillEl) ratingFillEl.style.width = (ratingValue * 10) + '%';
}
}
// Show the modal
modal.style.display = 'block';
document.body.style.overflow = 'hidden'; // Prevent background scrolling
console.log('Modal opened successfully');
} catch (error) {
console.error('Error opening modal:', error);
}
};
// Try to create the modal
const created = createModal();
console.log('Modal created:', created);
// If not created (already exists), initialize the controls
if (!created) {
initModalControls();
}
// Also initialize distance toggle
const distanceToggle = document.getElementById('distance-unit-toggle');
if (distanceToggle) {
distanceToggle.addEventListener('change', function() {
const showKm = this.checked;
// Update toggle labels
const labels = document.querySelectorAll('.toggle-label');
if (labels.length >= 2) {
labels[0].style.opacity = showKm ? '0.5' : '1';
labels[1].style.opacity = showKm ? '1' : '0.5';
}
// Update all distance displays
document.querySelectorAll('.nearby-attraction-card').forEach(card => {
const kmEl = card.querySelector('.distance-km');
const miEl = card.querySelector('.distance-mi');
if (kmEl && miEl) {
kmEl.style.display = showKm ? 'inline' : 'none';
miEl.style.display = showKm ? 'none' : 'inline';
}
});
});
}
});