Gasthaus zur Krone

Willkommen im Gasthaus zur Krone, wo gemütlicher Charme auf modernen Komfort trifft. Im Herzen von Wertingen bietet unser familiengeführtes Hotel eine warme und einladende Atmosphäre für jeden Gast.

Unsere Unterkünfte umfassen 6 komfortable Doppelzimmer, 3 gemütliche Einzelzimmer und 1 geräumiges Familienzimmer, die alle durchdacht gestaltet sind, um einen entspannenden Aufenthalt zu gewährleisten. Egal, ob Sie allein, als Paar oder mit der Familie reisen, wir haben den perfekten Raum für Sie.

Beginnen Sie Ihren Tag mit einem köstlichen Frühstück und entspannen Sie in unserem traditionellen Biergarten, wo Sie bayerische Spezialitäten und erfrischende Getränke in einem entspannten Außenbereich genießen können.

Wir freuen uns darauf, Sie willkommen zu heißen!

Jetzt buchen
Client testimonials

Staying at Gasthaus zur Krone was a delightful experience! The traditional charm combined with modern amenities made my visit truly memorable.

Markus Schmidt
Frequent Traveler
Prince Frederick, Maryland USA Dec 1, 2023 The entrance to the Walmart department store.

Our Values

At Gasthaus zur Krone, we take pride in providing unique experiences grounded in essential values that showcase our dedication to tradition, comfort, and genuine Bavarian hospitality.

Authentic Bavarian Tradition

Experience the rich heritage of Bavaria with our inviting accommodations and local delicacies that celebrate our culture.

Warm Hospitality

As a family-run hotel, we ensure that every guest is treated like family, feeling right at home throughout their stay.

Delicious Cuisine

Begin your day with a scrumptious breakfast and indulge in traditional Bavarian dishes at our charming beer garden.

Comfort & Relaxation

Our meticulously designed rooms promote relaxation and tranquility for every guest, ensuring a peaceful retreat.

Family-Oriented Atmosphere

We strive to create a welcoming space that feels like home for families and solo travelers, creating lasting memories.

Exceptional Experiences

From peaceful retreats to thrilling adventures, we guarantee that every guest departs with unforgettable memories.

Umfassende API-Lösungen
Automatisierte Transfers
Sofortige ACH-Verarbeitung
Zahlungsmethoden
Mastercard, Visa
Kontodienste
Treasury Konten
Globale Transaktionen
Internationale Überweisungen
Dokumentenverarbeitung
Elektronische Schecks
Echtzeit-Zahlungen
Bereit zum Start!
Und mehr!
Halten Sie Ausschau
// Rolls Quantity and Protein Selection Management document.addEventListener('DOMContentLoaded', function() { // Function to set up interactive features for a menu item function setupMenuItem(menuItem) { const proteinSelect = menuItem.querySelector('.protein-select'); const quantityInput = menuItem.querySelector('.quantity-input'); const plusButton = menuItem.querySelector('.quantity-btn.plus'); const minusButton = menuItem.querySelector('.quantity-btn.minus'); const totalPriceElement = menuItem.querySelector('.total-price'); const itemTotalPriceElement = menuItem.querySelector('.item-total-price'); const priceElement = menuItem.querySelector('.font-semibold'); function extractBasePrice() { // Extract base price more robustly const priceText = priceElement ? priceElement.textContent : ( menuItem.querySelector('.text-lg.font-semibold') || menuItem.querySelector('.text-sm.font-medium') )?.textContent || '0€'; const price = parseFloat(priceText.replace('€', '').trim()); return isNaN(price) ? 0 : price; } function updateTotalPrice() { const quantity = parseInt(quantityInput.value); const basePrice = extractBasePrice(); const totalPrice = (quantity * basePrice).toFixed(2); // Update total price display with animation if (totalPriceElement) { totalPriceElement.textContent = `${basePrice}€ pro Stück`; totalPriceElement.classList.add('animate-pulse'); setTimeout(() => { totalPriceElement.classList.remove('animate-pulse'); }, 500); } // Update item total price element if (itemTotalPriceElement) { itemTotalPriceElement.textContent = `${totalPrice}€`; itemTotalPriceElement.classList.add('animate-pulse'); setTimeout(() => { itemTotalPriceElement.classList.remove('animate-pulse'); }, 500); } } // Plus button functionality plusButton.addEventListener('click', function() { // If protein selection is required, ensure it's selected if (proteinSelect && proteinSelect.value === '') { proteinSelect.classList.add('border-red-500', 'animate-shake'); setTimeout(() => { proteinSelect.classList.remove('border-red-500', 'animate-shake'); }, 500); alert('Please select a protein option first.'); return; } const currentValue = parseInt(quantityInput.value); const newValue = Math.min(currentValue + 1, 10); // Limit quantity to 10 quantityInput.value = newValue; // Visual and haptic feedback quantityInput.classList.add('bg-green-100', 'transition-colors', 'animate-bounce'); plusButton.classList.add('scale-110'); setTimeout(() => { quantityInput.classList.remove('bg-green-100', 'animate-bounce'); plusButton.classList.remove('scale-110'); }, 300); // Disable plus button if max quantity reached if (newValue === 10) { plusButton.disabled = true; plusButton.classList.add('opacity-50', 'cursor-not-allowed'); } // Enable minus button minusButton.disabled = false; minusButton.classList.remove('opacity-50', 'cursor-not-allowed'); updateTotalPrice(); }); // Minus button functionality minusButton.addEventListener('click', function() { const currentValue = parseInt(quantityInput.value); const newValue = Math.max(currentValue - 1, 0); // Ensure non-negative quantityInput.value = newValue; // Visual and haptic feedback quantityInput.classList.add('bg-red-100', 'transition-colors', 'animate-bounce'); minusButton.classList.add('scale-110'); setTimeout(() => { quantityInput.classList.remove('bg-red-100', 'animate-bounce'); minusButton.classList.remove('scale-110'); }, 300); // Disable minus button if zero if (newValue === 0) { minusButton.disabled = true; minusButton.classList.add('opacity-50', 'cursor-not-allowed'); } // Enable plus button plusButton.disabled = false; plusButton.classList.remove('opacity-50', 'cursor-not-allowed'); updateTotalPrice(); }); // Protein selection change handler if (proteinSelect) { proteinSelect.addEventListener('change', function() { const selectedOption = proteinSelect.options[proteinSelect.selectedIndex]; const priceMatch = selectedOption.textContent.match(/\((\d+(?:\.\d{1,2})?)\€\)/); if (priceMatch) { const selectedPrice = parseFloat(priceMatch[1]); const totalPriceElement = menuItem.querySelector('.total-price'); if (totalPriceElement) { totalPriceElement.textContent = priceMatch[0]; } } quantityInput.value = 0; // Reset quantity when protein changes updateTotalPrice(); // Reset button states plusButton.disabled = false; minusButton.disabled = true; plusButton.classList.remove('opacity-50', 'cursor-not-allowed'); minusButton.classList.add('opacity-50', 'cursor-not-allowed'); }); } // Add keyboard support for quantity input quantityInput.addEventListener('keydown', function(event) { if (event.key === 'ArrowUp') { plusButton.click(); } else if (event.key === 'ArrowDown') { minusButton.click(); } }); // Initialize state minusButton.disabled = true; minusButton.classList.add('opacity-50', 'cursor-not-allowed'); updateTotalPrice(); } // Setup for all menu items with quantity controls const menuItems = document.querySelectorAll('li[class*="group/menu-item"], li .protein-select').closest('li'); menuItems.forEach(setupMenuItem); }); // Discount Code Handling document.addEventListener('DOMContentLoaded', function() { const discountCodeInput = document.getElementById('discount-code'); const applyDiscountButton = document.getElementById('apply-discount'); const discountMessage = document.getElementById('discount-message'); const validDiscountCodes = ['SUVI10', 'WELCOME10', 'FLAVOR10']; // Mock order total (in a real scenario, this would be calculated dynamically) let orderTotal = 50.00; applyDiscountButton.addEventListener('click', function() { const enteredCode = discountCodeInput.value.trim().toUpperCase(); if (validDiscountCodes.includes(enteredCode)) { // Calculate 10% discount const discountAmount = orderTotal * 0.10; const discountedTotal = orderTotal - discountAmount; // Successful discount application discountMessage.innerHTML = ` 🎉 Discount applied!
Original Total: €${orderTotal.toFixed(2)}
Discount (10%): -€${discountAmount.toFixed(2)}
New Total: €${discountedTotal.toFixed(2)} `; discountMessage.classList.remove('text-red-500'); discountMessage.classList.add('text-green-500'); // Optional: Add a temporary visual effect discountCodeInput.classList.add('border-green-500'); // Redirect to menu/checkout page after a short delay setTimeout(() => { window.location.href = '/menu?discount=' + enteredCode; }, 1500); } else { // Invalid discount code discountMessage.textContent = '❌ Invalid discount code. Please try again.'; discountMessage.classList.remove('text-green-500'); discountMessage.classList.add('text-red-500'); // Add a temporary shake animation for invalid code discountCodeInput.classList.add('animate-shake'); setTimeout(() => { discountCodeInput.classList.remove('animate-shake'); }, 500); } }); // Add keyboard support (Enter key) discountCodeInput.addEventListener('keypress', function(event) { if (event.key === 'Enter') { applyDiscountButton.click(); } }); }); // Image upload handling document.getElementById('imageUpload').addEventListener('change', function(event) { const file = event.target.files[0]; if (file) { const reader = new FileReader(); reader.onload = function(e) { const img = document.querySelector('.clicked-element').previousElementSibling; img.src = e.target.result; img.alt = "Custom Uploaded Image"; }; reader.readAsDataURL(file); } }); // Enhanced Pricing and Quantity Management document.addEventListener('DOMContentLoaded', function() { // Function to extract price for a specific menu item function extractPrice(menuItem) { // First, try to find the base price in the item-base-price span const basePriceSpan = menuItem.querySelector('.item-base-price'); if (basePriceSpan) { const basePrice = parseFloat(basePriceSpan.textContent.replace('€', '').replace(',', '.').trim()); if (!isNaN(basePrice)) return basePrice; } // If not found, try extracting from other elements const priceElements = [ menuItem.querySelector('.font-semibold'), menuItem.querySelector('.text-lg.font-semibold'), menuItem.querySelector('.text-sm.font-medium') ]; for (const priceElement of priceElements) { if (priceElement) { const priceText = priceElement.textContent.replace('€', '').replace(',', '.').trim(); const price = parseFloat(priceText); if (!isNaN(price)) return price; } } return 0; } // Function to update total price for a menu item function updateMenuItemPrice(menuItem) { const quantityInput = menuItem.querySelector('.quantity-input'); const totalPriceElement = menuItem.querySelector('.total-price'); const itemTotalPriceElement = menuItem.querySelector('.item-total-price'); const basePrice = extractPrice(menuItem); const quantity = parseInt(quantityInput.value || 0); const totalPrice = (basePrice * quantity); // Update total price display if (totalPriceElement) { totalPriceElement.textContent = `${basePrice.toFixed(2)}€ pro Stück`; } // Update item total price element if (itemTotalPriceElement) { itemTotalPriceElement.textContent = `${totalPrice.toFixed(2)}€`; // Visual indication of price change itemTotalPriceElement.classList.add('animate-pulse'); setTimeout(() => { itemTotalPriceElement.classList.remove('animate-pulse'); }, 300); } // Update quantity input styles quantityInput.classList.add('bg-blue-100', 'transition-colors'); setTimeout(() => { quantityInput.classList.remove('bg-blue-100'); }, 300); } // Setup price management for all menu items const menuItems = document.querySelectorAll('li'); menuItems.forEach(menuItem => { const quantityInput = menuItem.querySelector('.quantity-input'); const plusButton = menuItem.querySelector('.quantity-btn.plus'); const minusButton = menuItem.querySelector('.quantity-btn.minus'); // Update price on quantity change if (quantityInput) { quantityInput.addEventListener('change', () => updateMenuItemPrice(menuItem)); } // Quantity buttons management if (plusButton) { plusButton.addEventListener('click', () => { if (quantityInput) { const currentValue = parseInt(quantityInput.value || 0); quantityInput.value = Math.min(currentValue + 1, 10); updateMenuItemPrice(menuItem); // Add visual feedback for plus button plusButton.classList.add('bg-green-200', 'scale-110'); setTimeout(() => { plusButton.classList.remove('bg-green-200', 'scale-110'); }, 200); } }); } if (minusButton) { minusButton.addEventListener('click', () => { if (quantityInput) { const currentValue = parseInt(quantityInput.value || 0); quantityInput.value = Math.max(currentValue - 1, 0); updateMenuItemPrice(menuItem); // Add visual feedback for minus button minusButton.classList.add('bg-red-200', 'scale-110'); setTimeout(() => { minusButton.classList.remove('bg-red-200', 'scale-110'); }, 200); } }); } // Initial price update updateMenuItemPrice(menuItem); }); }); // Gallery Image Zoom Functionality document.addEventListener('DOMContentLoaded', function() { const galleryContainer = document.getElementById('gallery-container'); const galleryImages = galleryContainer.querySelectorAll('.gallery-image'); // Create zoom modal const zoomModal = document.createElement('div'); zoomModal.id = 'gallery-zoom-modal'; zoomModal.style.cssText = ` display: none; position: fixed; z-index: 1000; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.9); display: flex; justify-content: center; align-items: center; `; const zoomImage = document.createElement('img'); zoomImage.style.cssText = ` max-width: 90%; max-height: 90%; object-fit: contain; cursor: pointer; `; zoomModal.appendChild(zoomImage); document.body.appendChild(zoomModal); // Add click event to each gallery image galleryImages.forEach(image => { image.addEventListener('click', function() { zoomImage.src = this.src; zoomModal.style.display = 'flex'; }); }); // Close zoom modal when clicking outside the image zoomModal.addEventListener('click', function(event) { if (event.target === zoomModal) { zoomModal.style.display = 'none'; } }); // Close zoom modal with ESC key document.addEventListener('keydown', function(event) { if (event.key === 'Escape' && zoomModal.style.display === 'flex') { zoomModal.style.display = 'none'; } }); });