{"id":16172,"date":"2025-05-11T23:25:43","date_gmt":"2025-05-11T23:25:43","guid":{"rendered":"https:\/\/hypnotikbongs.com\/?page_id=16172"},"modified":"2025-05-13T14:23:07","modified_gmt":"2025-05-13T14:23:07","slug":"buy-locally","status":"publish","type":"page","link":"https:\/\/hypnotikbongs.com\/fr\/buy-locally\/","title":{"rendered":"BUY LOCALLY"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"16172\" class=\"elementor elementor-16172\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a6c478 e-flex e-con-boxed e-con e-parent\" data-id=\"3a6c478\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2cdabd9 elementor-widget elementor-widget-html\" data-id=\"2cdabd9\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Canada Store Locator<\/title>\n    <link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.2\/css\/all.min.css\">\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n            text-transform: uppercase;\n        }\n\n        body {\n            background-color: #f5f7fa;\n            color: #333;\n            line-height: 1.6;\n        }\n\n        .container {\n            max-width: 1200px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n\n        header {\n            text-align: center;\n            margin-bottom: 40px;\n            padding: 20px 0;\n            border-bottom: 1px solid #ddd;\n        }\n\n        header h1 {\n            color: #2c3e50;\n            margin-bottom: 10px;\n            font-size: 2.5rem;\n        }\n\n        header p {\n            color: #7f8c8d;\n            font-size: 1.1rem;\n        }\n\n        .search-container {\n            background-color: #fff;\n            border-radius: 10px;\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n            padding: 25px;\n            margin-bottom: 30px;\n        }\n\n        .search-box {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 15px;\n            align-items: center;\n        }\n\n        .search-box input, \n        .search-box select {\n            flex: 1;\n            min-width: 200px;\n            padding: 12px 15px;\n            border: 1px solid #ddd;\n            border-radius: 5px;\n            font-size: 1rem;\n            outline: none;\n            text-transform: uppercase;\n            height: 46px;\n        }\n\n        .search-box input:focus, \n        .search-box select:focus {\n            border-color: #EC1C23;\n            box-shadow: 0 0 0 2px rgba(236, 28, 35, 0.2);\n        }\n\n        .search-box button {\n            background-color: #EC1C23;\n            color: white;\n            border: none;\n            border-radius: 5px;\n            padding: 12px 25px;\n            cursor: pointer;\n            font-size: 1rem;\n            transition: background-color 0.3s;\n            height: 46px;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n        }\n\n        .search-box button:hover {\n            background-color: #d01017;\n        }\n\n        .results-container {\n            background-color: #fff;\n            border-radius: 10px;\n            box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n            padding: 25px;\n        }\n\n        .results-container h2 {\n            color: #2c3e50;\n            margin-bottom: 20px;\n            padding-bottom: 10px;\n            border-bottom: 1px solid #eee;\n        }\n\n        .store-card {\n            display: flex;\n            padding: 20px;\n            border-bottom: 1px solid #eee;\n            margin-bottom: 15px;\n            transition: transform 0.3s;\n        }\n\n        .store-card:hover {\n            transform: translateY(-3px);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\n        }\n\n        .store-image {\n            width: 120px;\n            height: 120px;\n            border-radius: 5px;\n            margin-right: 20px;\n            background-size: cover;\n            background-position: center;\n        }\n\n        .store-info {\n            flex: 1;\n        }\n\n        .store-name {\n            font-size: 1.3rem;\n            color: #2c3e50;\n            margin-bottom: 5px;\n        }\n\n        .store-address, .store-phone {\n            color: #7f8c8d;\n            margin-bottom: 5px;\n        }\n\n        .store-phone a {\n            color: #EC1C23;\n            text-decoration: none;\n        }\n\n        .no-results {\n            text-align: center;\n            padding: 30px;\n            color: #7f8c8d;\n            font-style: italic;\n        }\n\n        .error-message {\n            text-align: center;\n            padding: 20px;\n            color: #e74c3c;\n            font-weight: 600;\n        }\n\n        .error-message i, .no-results i {\n            margin-right: 10px;\n        }\n\n        @media (max-width: 768px) {\n            .search-box {\n                flex-direction: column;\n                align-items: stretch;\n            }\n            \n            .search-box input,\n            .search-box select,\n            .search-box button {\n                width: 100%;\n            }\n            \n            .store-card {\n                flex-direction: column;\n            }\n            \n            .store-image {\n                width: 100%;\n                height: 180px;\n                margin-right: 0;\n                margin-bottom: 15px;\n            }\n\n            .or-divider {\n                margin: 5px 0;\n                text-align: center;\n                width: 100%;\n                justify-content: center;\n            }\n        }\n\n        .search-label {\n            display: block;\n            margin-bottom: 5px;\n            font-weight: bold;\n            color: #555;\n        }\n\n        .search-inputs {\n            display: flex;\n            flex-wrap: wrap;\n            gap: 15px;\n            margin-bottom: 15px;\n        }\n\n        .or-divider {\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-weight: bold;\n            color: #7f8c8d;\n            margin: 0 5px;\n        }\n    <\/style>\n<\/head>\n<body>\n    <div class=\"container\">\n        <header>\n            <h1>FIND STORES NEAR YOU<\/h1>\n            <p>SEARCH BY POSTAL CODE, CITY OR PROVINCE<\/p>\n        <\/header>\n        \n        <div class=\"search-container\">\n            <div class=\"search-box\">\n                <input type=\"text\" id=\"postal-code\" placeholder=\"POSTAL CODE (E.G., A1A 1A1)\" maxlength=\"7\">\n                <div class=\"or-divider\">OR<\/div>\n                <input type=\"text\" id=\"city\" placeholder=\"CITY (E.G., EDMONTON)\">\n                <div class=\"or-divider\">OR<\/div>\n                <select id=\"province\">\n                    <option value=\"\">SELECT PROVINCE (OPTIONAL)<\/option>\n                    <option value=\"AB\">ALBERTA<\/option>\n                    <option value=\"BC\">BRITISH COLUMBIA<\/option>\n                    <option value=\"MB\">MANITOBA<\/option>\n                    <option value=\"NB\">NEW BRUNSWICK<\/option>\n                    <option value=\"NL\">NEWFOUNDLAND AND LABRADOR<\/option>\n                    <option value=\"NS\">NOVA SCOTIA<\/option>\n                    <option value=\"NT\">NORTHWEST TERRITORIES<\/option>\n                    <option value=\"NU\">NUNAVUT<\/option>\n                    <option value=\"ON\">ONTARIO<\/option>\n                    <option value=\"PE\">PRINCE EDWARD ISLAND<\/option>\n                    <option value=\"QC\">QUEBEC<\/option>\n                    <option value=\"SK\">SASKATCHEWAN<\/option>\n                    <option value=\"YT\">YUKON<\/option>\n                <\/select>\n                <button id=\"search-btn\"><i class=\"fas fa-search\"><\/i> FIND STORES<\/button>\n            <\/div>\n        <\/div>\n        \n        <div class=\"results-container\">\n            <h2>ALL STORES<\/h2>\n            <div id=\"store-list\">\n                <!-- Store results will be displayed here -->\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n    \/\/ Sample store data for Canada\n    const stores = [\n        {\n            id: 1,\n            name: \"OZ Cannabis\",\n            address: \"49 Hinshaw Dr #320, Sylvan Lake, AB T4S 0A5, Canada\",\n            phone: \"+1 403-864-1500\",\n            postalCode: \"T4S 0A5\",\n            province: \"AB\",\n            city: \"Sylvan Lake\",\n            image: \"https:\/\/cyan-stinkbug-305937.hostingersite.com\/wp-content\/uploads\/2025\/05\/2F3231-60.png\",\n            coordinates: {\n                lat: 43.6532,\n                lng: -79.3832\n            }\n        },\n        {\n            id: 2,\n            name: \"Green Eden\",\n            address: \"10213 101 Ave, Lac la Biche, AB T0A 2C0\",\n            phone: \"+1 780-623-3336\",\n            postalCode: \"T0A 2C0\",\n            province: \"AB\",\n            city: \"Lac la Biche\",\n            image: \"https:\/\/cyan-stinkbug-305937.hostingersite.com\/wp-content\/uploads\/2025\/05\/2F3231-61.png\",\n            coordinates: {\n                lat: 49.2827,\n                lng: -123.1207\n            }\n        },\n        {\n            id: 3,\n            name: \"Herb's Cannabis Shoppe\",\n            address: \"37 4 St NE, Calgary, AB T2E 5A6\",\n            phone: \" +1 604-808-2132\",\n            postalCode: \"T2E 5A6\",\n            province: \"AB\",\n            city: \"Calgary\",\n            image: \"https:\/\/arbimports.ca\/wp-content\/uploads\/2025\/05\/2F3231-2025-05-13T222115.630.png\",\n            coordinates: {\n                lat: 45.5017,\n                lng: -73.5673\n            }\n        }\n        \n        \/\/ ,{\n        \/\/     id: 4,\n        \/\/     name: \"Calgary Chinook Center\",\n        \/\/     address: \"6455 Macleod Trail SW, Calgary, AB T2H 0K9\",\n        \/\/     phone: \"403-555-2345\",\n        \/\/     postalCode: \"T2H 0K9\",\n        \/\/     province: \"AB\",\n        \/\/     city: \"Calgary\",\n        \/\/     image: \"https:\/\/images.unsplash.com\/photo-1604719312566-8912e9c8a213?ixlib=rb-4.0.3&ixid=MnwxMjA3fDB8MHxzZWFyY2h8M3x8c3RvcmUlMjBmcm9udHxlbnwwfHwwfHw%3D&auto=format&fit=crop&w=600&q=60\",\n        \/\/     coordinates: {\n        \/\/         lat: 51.0447,\n        \/\/         lng: -114.0719\n        \/\/     }\n        \/\/ }\n    ];\n\n    document.addEventListener('DOMContentLoaded', function() {\n        \/\/ Elements\n        const postalCodeInput = document.getElementById('postal-code');\n        const cityInput = document.getElementById('city');\n        const provinceSelect = document.getElementById('province');\n        const searchBtn = document.getElementById('search-btn');\n        const storeListContainer = document.getElementById('store-list');\n\n        \/\/ Add input validation for Canadian postal code format (e.g., A1A 1A1)\n        postalCodeInput.addEventListener('input', function(e) {\n            const value = e.target.value.toUpperCase();\n            const formattedValue = formatPostalCode(value);\n            e.target.value = formattedValue;\n        });\n\n        \/\/ Format postal code as user types (e.g., A1A 1A1)\n        function formatPostalCode(value) {\n            \/\/ Remove all non-alphanumeric characters\n            value = value.replace(\/[^A-Z0-9]\/g, '');\n            \n            \/\/ Insert space after 3rd character if length > 3\n            if (value.length > 3) {\n                value = value.slice(0, 3) + ' ' + value.slice(3);\n            }\n            \n            \/\/ Canadian postal code format: A1A 1A1 (letter, number, letter, space, number, letter, number)\n            return value;\n        }\n\n        \/\/ Add click event listener to search button\n        searchBtn.addEventListener('click', findStores);\n\n        \/\/ Add enter key press event to trigger search\n        postalCodeInput.addEventListener('keypress', handleEnterKey);\n        cityInput.addEventListener('keypress', handleEnterKey);\n\n        function handleEnterKey(e) {\n            if (e.key === 'Enter') {\n                findStores();\n            }\n        }\n\n        \/\/ Load all stores on page load, sorted alphabetically\n        displayAllStores();\n\n        \/\/ Function to find stores\n        function findStores() {\n            const postalCode = postalCodeInput.value.trim().toUpperCase();\n            const city = cityInput.value.trim().toUpperCase();\n            const province = provinceSelect.value;\n\n            \/\/ Check if at least one search field has a value\n            if (!postalCode && !city && !province) {\n                displayAllStores();\n                return;\n            }\n\n            \/\/ Validate postal code if entered\n            if (postalCode && !validatePostalCode(postalCode)) {\n                showError('PLEASE ENTER A VALID CANADIAN POSTAL CODE (E.G., A1A 1A1)');\n                return;\n            }\n\n            \/\/ Filter stores based on search criteria\n            let filteredStores = stores;\n\n            \/\/ Filter by postal code\n            if (postalCode) {\n                filteredStores = filteredStores.filter(store => store.postalCode.toUpperCase().includes(postalCode));\n            }\n\n            \/\/ Filter by city\n            if (city) {\n                filteredStores = filteredStores.filter(store => \n                    store.city.toUpperCase().includes(city) || \n                    store.address.toUpperCase().includes(city)\n                );\n            }\n\n            \/\/ Filter by province\n            if (province) {\n                filteredStores = filteredStores.filter(store => store.province === province);\n            }\n\n            if (filteredStores.length === 0) {\n                showNoResults('NO STORES FOUND MATCHING YOUR CRITERIA');\n                return;\n            }\n            \n            \/\/ Display the stores sorted alphabetically\n            displayStores(filteredStores);\n        }\n\n        \/\/ Function to validate Canadian postal code\n        function validatePostalCode(postalCode) {\n            \/\/ Basic validation, can be enhanced with more specific regex for Canadian postal codes\n            const postalCodeRegex = \/^[A-Z]\\d[A-Z][ ]?\\d[A-Z]\\d$\/;\n            return postalCodeRegex.test(postalCode);\n        }\n\n        \/\/ Function to show error message\n        function showError(message) {\n            storeListContainer.innerHTML = `\n                <div class=\"error-message\">\n                    <i class=\"fas fa-exclamation-circle\"><\/i>\n                    ${message}\n                <\/div>\n            `;\n        }\n\n        \/\/ Function to show no results message\n        function showNoResults(message) {\n            storeListContainer.innerHTML = `\n                <div class=\"no-results\">\n                    <i class=\"fas fa-store-slash\"><\/i>\n                    ${message}\n                <\/div>\n            `;\n        }\n\n        \/\/ Function to display all stores initially\n        function displayAllStores() {\n            \/\/ Sort stores alphabetically by name\n            const sortedStores = [...stores].sort((a, b) => \n                a.name.localeCompare(b.name)\n            );\n            \n            displayStores(sortedStores);\n        }\n\n        \/\/ Function to display the stores\n        function displayStores(storeList) {\n            if (storeList.length === 0) {\n                showNoResults('NO STORES FOUND MATCHING YOUR CRITERIA');\n                return;\n            }\n\n            \/\/ Sort stores alphabetically by name\n            const sortedStores = [...storeList].sort((a, b) => \n                a.name.localeCompare(b.name)\n            );\n\n            \/\/ Build HTML for the store list\n            let storesHTML = '';\n            \n            sortedStores.forEach(store => {\n                storesHTML += `\n                    <div class=\"store-card\">\n                        <div class=\"store-image\" style=\"background-image: url('${store.image}')\"><\/div>\n                        <div class=\"store-info\">\n                            <h3 class=\"store-name\">${store.name.toUpperCase()}<\/h3>\n                            <p class=\"store-address\">${store.address.toUpperCase()}<\/p>\n                            <p class=\"store-phone\">PHONE: <a href=\"tel:${store.phone}\">${store.phone}<\/a><\/p>\n                        <\/div>\n                    <\/div>\n                `;\n            });\n\n            storeListContainer.innerHTML = storesHTML;\n        }\n\n        \/\/ Helper function to get the full province name\n        function getProvinceFullName(provinceCode) {\n            const provinces = {\n                'AB': 'ALBERTA',\n                'BC': 'BRITISH COLUMBIA',\n                'MB': 'MANITOBA',\n                'NB': 'NEW BRUNSWICK',\n                'NL': 'NEWFOUNDLAND AND LABRADOR',\n                'NS': 'NOVA SCOTIA',\n                'NT': 'NORTHWEST TERRITORIES',\n                'NU': 'NUNAVUT',\n                'ON': 'ONTARIO',\n                'PE': 'PRINCE EDWARD ISLAND',\n                'QC': 'QUEBEC',\n                'SK': 'SASKATCHEWAN',\n                'YT': 'YUKON'\n            };\n            \n            return provinces[provinceCode] || provinceCode;\n        }\n    });\n    <\/script>\n<\/body>\n<\/html> \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Canada Store Locator FIND STORES NEAR YOU SEARCH BY POSTAL CODE, CITY OR PROVINCE OR OR SELECT PROVINCE (OPTIONAL)ALBERTABRITISH COLUMBIAMANITOBANEW BRUNSWICKNEWFOUNDLAND AND LABRADORNOVA SCOTIANORTHWEST TERRITORIESNUNAVUTONTARIOPRINCE EDWARD ISLANDQUEBECSASKATCHEWANYUKON FIND STORES ALL STORES<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-16172","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/pages\/16172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/comments?post=16172"}],"version-history":[{"count":29,"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/pages\/16172\/revisions"}],"predecessor-version":[{"id":16346,"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/pages\/16172\/revisions\/16346"}],"wp:attachment":[{"href":"https:\/\/hypnotikbongs.com\/fr\/wp-json\/wp\/v2\/media?parent=16172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}