Skip to Content
Recreation Leader
Free Adventure Guides
Navigating Permits
Shop
Visiting Educator & Lecturer
Central Oregon 360
Podcast
Video Collections
Contact
RESPECT Ethos
Who We Are
Login Account
0
0
Support
Login Account
0
0
Support
Recreation Leader
Free Adventure Guides
Navigating Permits
Shop
Visiting Educator & Lecturer
Central Oregon 360
Podcast
Video Collections
Contact
RESPECT Ethos
Who We Are
Folder: Get Outside
Back
Free Adventure Guides
Navigating Permits
Shop
Folder: Work With TC
Back
Visiting Educator & Lecturer
Folder: Media
Back
Central Oregon 360
Podcast
Video Collections
Folder: About
Back
Contact
RESPECT Ethos
Who We Are
Login Account
Support

Shop

Shop

  • All
  • Outdoor Apparel (Unisex)
  • Mugs
enamel-mug-white-12-oz-right-68eae6fb62a95.jpg enamel-mug-white-12-oz-front-68eae7d347943.png enamel-mug-white-12-oz-left-68eae7d3478bf.png enamel-mug-white-12-oz-right-68eae7d3477d1.png
Quick View
Three Sisters Wilderness 12oz Mug
Sale Price: $16.97 Original Price: $22.99
Sale
Pacific NorthWonderland Zip Hoodie (Limted Run)
Quick View
Pacific NorthWonderland Zip Hoodie (Limted Run)
Sale Price: $99.00 Original Price: $149.00
Sale

Subscribe

Sign up to receive the latest outdoor guides, updates, & exclusive discounts.

We respect your privacy. Unsubscribe anytime.

Check your inbox & confirm your email.

Beautiful Bend, Oregon

Location

Social Media

Return, Refund, Reschedule, & Cancelation Policies
RESPECT Through Recreation
Support the Mission

Legal

Work With Us
Terms Of Service
Privacy Policy
© 2025 Recreation Leader.
All rights reserved.RESPECT Through Recreation™️
Shop

Let’s Go!

/** * Dynamic Blog Filter - No Page Refresh * Enhanced with better error handling, accessibility, and performance */ (function() { 'use strict'; function initDynamicFilter() { // Robust selector fallback for different Squarespace templates const categoryLinks = document.querySelectorAll('[class*="category"] a[href*="/category/"], a[href*="/get-outside/category/"]'); const blogContainer = document.querySelector('[class*="blog-grid"], [class*="blog-list"], .sqs-block-content'); const allBlogPosts = blogContainer ? blogContainer.querySelectorAll('[class*="blog-item"], article[data-item-id]') : []; if (allBlogPosts.length === 0 || categoryLinks.length === 0) { console.warn('Dynamic Blog Filter: No blog posts or categories found'); return; } // Store original display state and data const originalStates = new Map(); allBlogPosts.forEach(post => { originalStates.set(post, { display: post.style.display || '', opacity: post.style.opacity || '1' }); }); let currentFilter = 'all'; /** * Filter posts by category with animation */ function filterPosts(categoryName) { categoryName = categoryName || 'all'; currentFilter = categoryName; let visibleCount = 0; allBlogPosts.forEach(post => { const isMatch = categoryName === 'all' || postHasCategory(post, categoryName); if (isMatch) { showPost(post); visibleCount++; } else { hidePost(post); } }); // Update active state updateActiveLinks(categoryName); // Scroll to results smoothly smoothScrollToBlogs(); // Dispatch custom event for tracking window.dispatchEvent(new CustomEvent('blogFilterChanged', { detail: { category: categoryName, visibleCount } })); } /** * Check if post has the specified category */ function postHasCategory(post, categoryName) { const categoryLinks = post.querySelectorAll('a[href*="/category/"]'); for (const link of categoryLinks) { try { const linkCategory = decodeURIComponent(link.href.split('/category/')[1]?.split('/')[0] || ''); if (linkCategory === categoryName) return true; } catch (e) { console.warn('Error parsing category from link:', link.href); } } return false; } /** * Show post with animation */ function showPost(post) { post.style.transition = 'opacity 0.3s ease-in-out'; post.style.opacity = '1'; post.style.display = originalStates.get(post).display || 'block'; post.setAttribute('aria-hidden', 'false'); } /** * Hide post with animation */ function hidePost(post) { post.style.transition = 'opacity 0.3s ease-in-out'; post.style.opacity = '0'; post.setAttribute('aria-hidden', 'true'); setTimeout(() => { if (post.style.opacity === '0') { post.style.display = 'none'; } }, 300); } /** * Update active state styling */ function updateActiveLinks(categoryName) { categoryLinks.forEach(link => { const linkCategory = extractCategoryFromUrl(link.href); const isActive = (categoryName === 'all' && link.classList.contains('show-all')) || (linkCategory === categoryName); link.classList.toggle('active-category', isActive); link.setAttribute('aria-current', isActive ? 'page' : 'false'); }); } /** * Extract category name from URL */ function extractCategoryFromUrl(href) { try { const url = new URL(href, window.location.origin); return decodeURIComponent(url.pathname.split('/category/')[1]?.split('/')[0] || ''); } catch (e) { console.warn('Error parsing URL:', href); return ''; } } /** * Scroll to blog section */ function smoothScrollToBlogs() { const blogSection = blogContainer || document.querySelector('[class*="blog"]'); if (blogSection) { blogSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); } } // Add click handlers to category links categoryLinks.forEach(link => { link.addEventListener('click', function(e) { e.preventDefault(); const categoryName = extractCategoryFromUrl(this.href); filterPosts(categoryName); history.pushState({ category: categoryName }, '', this.href); }); }); // Handle browser back/forward window.addEventListener('popstate', function(e) { const category = e.state?.category || 'all'; filterPosts(category); }); // Add "Show All" button if not present addShowAllButton(categoryLinks); // Inject styles injectStyles(); // Check for initial category in URL const initialCategory = extractInitialCategory(); if (initialCategory) { filterPosts(initialCategory); } } /** * Add "Show All" button */ function addShowAllButton(categoryLinks) { if (document.querySelector('a.show-all-categories')) return; const showAllLink = document.createElement('a'); showAllLink.href = window.location.pathname.split('/category/')[0] || '/'; showAllLink.textContent = 'Show All'; showAllLink.className = 'show-all-categories'; showAllLink.setAttribute('role', 'button'); showAllLink.addEventListener('click', function(e) { e.preventDefault(); filterPosts('all'); history.pushState({ category: 'all' }, '', this.href); }); const categoryContainer = document.querySelector('[class*="category"]'); if (categoryContainer) { categoryContainer.insertBefore(showAllLink, categoryContainer.firstChild); } } /** * Extract category from current URL */ function extractInitialCategory() { try { const match = window.location.pathname.match(/\/category\/([^/]+)/); return match ? decodeURIComponent(match[1]) : null; } catch (e) { return null; } } /** * Inject CSS styles */ function injectStyles() { if (document.querySelector('style[data-blog-filter]')) return; const style = document.createElement('style'); style.setAttribute('data-blog-filter', 'true'); style.textContent = ` .active-category { font-weight: 700 !important; color: #4a7c59 !important; text-decoration: underline !important; } .show-all-categories { display: inline-block; margin: 0 0 10px 0; font-weight: 700; cursor: pointer; text-decoration: underline; color: #4a7c59; } .blog-item, [class*="blog-item"], article[data-item-id] { transition: opacity 0.3s ease-in-out !important; } [aria-hidden="true"] { pointer-events: none; } `; document.head.appendChild(style); } // Initialize when DOM is ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initDynamicFilter); } else { initDynamicFilter(); } // Re-initialize on Squarespace AJAX loads window.addEventListener('mercury:load', initDynamicFilter); })(); /** * Meta Commerce Manager Checkout URL Handler * Enhanced with better validation, error handling, and security */ (function() { 'use strict'; const CONFIG = { maxQuantityPerItem: 999, validSkuPattern: /^[a-zA-Z0-9\-_]+$/, debugMode: false }; /** * Get query parameter by name */ function getQueryParam(name) { try { const urlParams = new URLSearchParams(window.location.search); return urlParams.get(name); } catch (e) { console.error('Error parsing query parameters:', e); return null; } } /** * Parse Meta products string into array */ function parseMetaProducts(productsString) { const items = []; if (!productsString || typeof productsString !== 'string') { return items; } try { const decodedString = decodeURIComponent(productsString); const productEntries = decodedString.split(','); for (const entry of productEntries) { const [sku, quantityStr] = entry.split(':'); if (!sku || !quantityStr) continue; const quantity = parseInt(quantityStr, 10); // Validation checks if (isNaN(quantity) || quantity <= 0 || quantity > CONFIG.maxQuantityPerItem) { console.warn(`Invalid quantity for SKU ${sku}: ${quantity}`); continue; } if (!CONFIG.validSkuPattern.test(sku)) { console.warn(`Invalid SKU format: ${sku}`); continue; } items.push({ sku: sku.trim(), quantity }); } } catch (e) { console.error('Error parsing Meta products:', e); } return items; } /** * Build cart URL */ function buildCartUrl(items, coupon) { let url = '/api/cart/add?'; const params = []; items.forEach(item => { params.push(`sku=${encodeURIComponent(item.sku)}&qty=${item.quantity}`); }); url += params.join('&'); // Note: Coupon support depends on Squarespace configuration // Some templates allow coupon as query param: &coupon=CODE if (coupon) { url += `&coupon=${encodeURIComponent(coupon)}`; } return url; } /** * Handle Meta checkout */ function handleMetaCheckout() { const productsParam = getQueryParam('products'); const couponParam = getQueryParam('coupon'); // Validate we're on checkout page and have products if (!productsParam) { if (CONFIG.debugMode) console.log('No products parameter found'); return; } if (window.location.pathname.indexOf('/checkout') === -1) { if (CONFIG.debugMode) console.log('Not on checkout page'); return; } const items = parseMetaProducts(productsParam); if (items.length === 0) { console.error('Meta Checkout Handler: No valid products parsed from URL'); return; } if (CONFIG.debugMode) { console.log('Meta Checkout - Items to add:', items); console.log('Meta Checkout - Coupon:', couponParam || 'none'); } // Build and redirect const cartUrl = buildCartUrl(items, couponParam); if (CONFIG.debugMode) { console.log('Redirecting to:', cartUrl); } window.location.replace(cartUrl); } // Execute handler handleMetaCheckout(); })();