0 && vSalePrice < vRegPrice;
            
            // Different calculations based on product condition
            if (isNew) {
                // For NEW products, calculate discount from MSRP
                if (vMsrp > 0 && vPrice > 0) {
                    discountPercentage = Math.round((vMsrp - vPrice) / vMsrp * 100);
                    
                    // Show badge if discount is 40% or more
                    if (discountPercentage >= 40) {
                        discountBadge.textContent = discountPercentage + '% OFF!';
                        discountBadge.style.display = 'inline-flex';
                    } else {
                        discountBadge.style.display = 'none';
                    }
                } else {
                    discountBadge.style.display = 'none';
                }
            } else {
                // For USED/refurbished products, calculate discount from regular price
                if (isOnSale && vRegPrice > 0 && vPrice > 0) {
                    discountPercentage = Math.round((vRegPrice - vPrice) / vRegPrice * 100);
                    
                    // Show badge if discount is 40% or more
                    if (discountPercentage >= 40) {
                        discountBadge.textContent = discountPercentage + '% OFF!';
                        discountBadge.style.display = 'inline-flex';
                    } else {
                        discountBadge.style.display = 'none';
                    }
                } else {
                    discountBadge.style.display = 'none';
                }
            }
        ">
                
        
            
            
            
            
            
                
            
             
        
        
            
            
            
            
            
                
                                    
            
        
    
    
    
                
                    Sale!                
                                        
                            42% OFF!                        
            
            
             0) {
                            const newIndex = currentIndex - 1;
                            const img = thumbs[newIndex].querySelector('img');
                            const fullUrl = img.dataset.fullUrl;
                            const srcset = img.dataset.srcset;
                            const alt = img.alt;
                            
                            const tempImage = new Image();
                            tempImage.src = fullUrl;
                            
                            const updateImages = () => {
                                currentLightboxImage = fullUrl;
                                currentLightboxSrcset = srcset;
                                currentLightboxAlt = alt;
                                currentIndex = newIndex;
                                requestAnimationFrame(() => {
                                    thumbs[newIndex].click();
                                });
                            };
                            if (tempImage.complete) {
                                updateImages();
                            } else {
                                tempImage.onload = updateImages;
                            }
                        }
                    }
                "
                @keydown.arrow-right.window="
                    if (showLightbox) {
                        const thumbs = document.querySelectorAll('.gallery-thumb');
                        if (currentIndex < thumbs.length - 1) {
                            const newIndex = currentIndex + 1;
                            const img = thumbs[newIndex].querySelector('img');
                            const fullUrl = img.dataset.fullUrl;
                            const srcset = img.dataset.srcset;
                            const alt = img.alt;
                            
                            const tempImage = new Image();
                            tempImage.src = fullUrl;
                            
                            const updateImages = () => {
                                currentLightboxImage = fullUrl;
                                currentLightboxSrcset = srcset;
                                currentLightboxAlt = alt;
                                currentIndex = newIndex;
                                requestAnimationFrame(() => {
                                    thumbs[newIndex].click();
                                });
                            };
                            if (tempImage.complete) {
                                updateImages();
                            } else {
                                tempImage.onload = updateImages;
                            }
                        }
                    }
                "
                @touchstart="
                    $event.target === $event.currentTarget && $event.preventDefault();
                    window.touchStartX = $event.touches[0].clientX;
                "
                @touchmove="
                    $event.target === $event.currentTarget && $event.preventDefault();
                "
                @touchend="
                    $event.target === $event.currentTarget && $event.preventDefault();
                    if (!window.touchStartX) return;
                    
                    const touchEndX = $event.changedTouches[0].clientX;
                    const diff = touchEndX - window.touchStartX;
                    const threshold = 50; // minimum swipe distance
                    
                    if (Math.abs(diff) >= threshold) {
                        const thumbs = document.querySelectorAll('.gallery-thumb');
                        if (diff > 0 && currentIndex > 0) {
                            // Swipe right - go to previous
                            const newIndex = currentIndex - 1;
                            const img = thumbs[newIndex].querySelector('img');
                            const fullUrl = img.dataset.fullUrl;
                            const srcset = img.dataset.srcset;
                            const alt = img.alt;
                            
                            const tempImage = new Image();
                            tempImage.src = fullUrl;
                            
                            const updateImages = () => {
                                currentLightboxImage = fullUrl;
                                currentLightboxSrcset = srcset;
                                currentLightboxAlt = alt;
                                currentIndex = newIndex;
                                requestAnimationFrame(() => {
                                    thumbs[newIndex].click();
                                });
                            };
                            if (tempImage.complete) {
                                updateImages();
                            } else {
                                tempImage.onload = updateImages;
                            }
                        } else if (diff < 0 && currentIndex < thumbs.length - 1) {
                            // Swipe left - go to next
                            const newIndex = currentIndex + 1;
                            const img = thumbs[newIndex].querySelector('img');
                            const fullUrl = img.dataset.fullUrl;
                            const srcset = img.dataset.srcset;
                            const alt = img.alt;
                            
                            const tempImage = new Image();
                            tempImage.src = fullUrl;
                            
                            const updateImages = () => {
                                currentLightboxImage = fullUrl;
                                currentLightboxSrcset = srcset;
                                currentLightboxAlt = alt;
                                currentIndex = newIndex;
                                requestAnimationFrame(() => {
                                    thumbs[newIndex].click();
                                });
                            };
                            if (tempImage.complete) {
                                updateImages();
                            } else {
                                tempImage.onload = updateImages;
                            }
                        }
                    }
                    window.touchStartX = null;
                "
                x-data="{ 
                    isFirstImage() {
                        return currentIndex === 0;
                    },
                    isLastImage() {
                        const thumbs = document.querySelectorAll('.gallery-thumb');
                        return currentIndex === thumbs.length - 1;
                    }
                }">
                
                
                
                
                
                
                
                ![]() 
            
         0) {
                                        // Determine if we're before or after cutoff
                                        const now = new Date();
                                        const hour = now.getHours();
                                        const isBeforeCutoff = hour < 14;
                                        
                                        availabilityMessageElements.forEach(element => {
                                            if (isBeforeCutoff) {
                                                element.textContent = 'Same-Day Delivery!';
                                            } else {
                                                element.textContent = 'Order Online';
                                            }
                                        });
                                    }
                                } else {
                                    deliveryNoteElement.textContent = 'Local Delivery Available';
                                    // Update all availability message elements
                                    if (availabilityMessageElements && availabilityMessageElements.length > 0) {
                                        availabilityMessageElements.forEach(element => {
                                            element.textContent = 'Order Online';
                                        });
                                    }
                                }
                            }
                        }
                        
                        // Update main product image
                        const mainImage = document.querySelector('#main-product-image');
                        if (mainImage && v?.main_image_id) {
                            mainImage.style.opacity = 0;
                            setTimeout(() => {
                                if (v.image_url) {
                                    mainImage.src = v.image_url;
                                    mainImage.srcset = v.image_srcset || '';
                                }
                                mainImage.style.opacity = 1;
                            }, 150);
                        }
                    ">
                    
    
            
    
                
        
    
    
        
    
    
                    
            Essex EUP-123E Upright Piano
        UsedUpright Piano    
            Used Essex 48" Upright Piano in Polished Ebony Finish. Designed by Steinway and Sons and built by Pearl River. Includes matching bench
        
        3-Year Store Warranty (In-Home)
    
    
                
        
        100% Lifetime Trade-Up Credit
    
    
                
        
        Matching Bench Included
    
    
    
    
            
                
        
        Available in Store
    
    
        Price:
    
    
            $5,488        
        
                
                
            Regular:
            
                $9,500            
        
            While we make every effort to provide accurate pricing and availability, occasional errors may occur. All prices and availability are subject to change without notice. We reserve the right to cancel or refuse any purchase made based on incorrect pricing.




