---
title: Pre-Select a Country in Restricted Shipping in SureCart
date: 2025-12-04T16:50:00Z
modified: 2025-11-29T22:56:30Z
permalink: "https://techarticles.co.uk/pre-select-a-country-in-restricted-shipping-in-surecart/"
type: post
status: publish
excerpt: ""
wpid: 5758
categories:
  - Blog
  - Coding
  - SureCart
  - Wordpress
timestamp: 2025-11-29T22:56:30Z
tags:
  - Blog
  - Coding
  - SureCart
  - Wordpress
---

This article is an update to one published last week on restricting the [SureCart](https://ta0.uk/surecart) Shipping/ Billing Countries. You can view the original article [here](https://techarticles.co.uk/wp-content/uploads/wp-mfa-exports/post/surecart-restrict-shipping-billing-address-to-uk-or-any-country.md)

This updated snippet makes it easier to set our wanted shipping/billing addresses, and in addition, it allows us to set one of them to be preselected at checkout.

**Please Note:** this is a WPCODEBOX snippet, so it has had its <script> tags removed

/* =====================================================
   CONFIGURATION
===================================================== */
const CONFIG = {
    enableShipping: true,                // Turn shipping restriction on/off
    enableBilling: false,                 // Turn billing restriction on/off
    enableLogging: false,                 // Console logs

    // Allowed countries (add as many as you want)
    allowedCountries: [
        { value: 'GB', label: 'United Kingdom' },
        // { value: 'US', label: 'United States' },
    ],

    // The country to automatically preselect
    defaultCountry: 'GB',                // Must match one of the countries above
};

/* =====================================================
   LOGGING HELPER
===================================================== */
function log(...args) {
    if (!CONFIG.enableLogging) return;
    console.log(...args);
}

/* =====================================================
   SHIPPING HANDLER
===================================================== */
function applyShippingUkOnly() {
    if (!CONFIG.enableShipping) {
        log('Shipping restriction disabled.');
        return true;
    }

    const shippingAddressElement =
        document.querySelector('sc-order-shipping-address')
        ?.shadowRoot
        ?.querySelector('sc-address, sc-compact-address');

    const shippingSelect =
        shippingAddressElement
        ?.shadowRoot
        ?.querySelector('sc-select');

    if (shippingSelect) {
        log('Shipping select found — applying country limits…');
        shippingSelect.choices = CONFIG.allowedCountries;
        shippingSelect.value = CONFIG.defaultCountry; // new preselected option
        return true;
    } else {
        log('Shipping select not found yet');
        return false;
    }
}

function pollShippingUntilFound() {
    let attempts = 0;
    const interval = 250;
    const maxAttempts = 40;

    const timer = setInterval(() => {
        attempts++;
        log(`Shipping attempt #${attempts}`);

        if (applyShippingUkOnly() || attempts >= maxAttempts) {
            clearInterval(timer);
            log(attempts >= maxAttempts
                ? 'Shipping: stopped after max attempts.'
                : 'Shipping: restriction applied and polling stopped.');
        }
    }, interval);
}

/* =====================================================
   BILLING HANDLER
===================================================== */
function pollBillingUntilFound() {
    if (!CONFIG.enableBilling) {
        log('Billing restriction disabled.');
        return;
    }

    let attempts = 0;
    const interval = 250;
    const maxAttempts = 40;

    const timer = setInterval(() => {
        attempts++;
        log(`Billing attempt #${attempts}`);

        const billingAddressElement =
            document.querySelector('sc-order-billing-address')
            ?.shadowRoot
            ?.querySelector('sc-address, sc-compact-address');

        const billingSelect =
            billingAddressElement
            ?.shadowRoot
            ?.querySelector('sc-select');

        if (billingSelect) {
            log('Billing select found — applying country limits…');
            billingSelect.choices = CONFIG.allowedCountries;
            billingSelect.value = CONFIG.defaultCountry; // Our New Pre-select
            clearInterval(timer);
            log('Billing: restriction applied and polling stopped.');
        } else if (attempts >= maxAttempts) {
            clearInterval(timer);
            log('Billing: stopped after max attempts.');
        } else {
            log('Billing select not found yet');
        }
    }, interval);
}

function setupBillingCheckboxListener() {
    if (!CONFIG.enableBilling) {
        log('Billing checkbox listener disabled.');
        return;
    }

    const billingCheckbox =
        document.querySelector('sc-order-billing-address')
        ?.shadowRoot
        ?.querySelector('sc-checkbox')
        ?.shadowRoot
        ?.querySelector('input');

    if (billingCheckbox && !billingCheckbox._listenerAdded) {
        log('Billing checkbox found — adding listener');
        billingCheckbox._listenerAdded = true;

        // If already unchecked (billing address visible), apply immediately
        if (!billingCheckbox.checked) {
            pollBillingUntilFound();
        }

        billingCheckbox.addEventListener('change', () => {
            log('Billing checkbox changed — rechecking billing fields…');
            pollBillingUntilFound();
        });

    } else if (!billingCheckbox) {
        log('Billing checkbox not found yet');
    }
}

/* =====================================================
   INITIALISATION
===================================================== */
function initCountryRestrictions() {
    log('initCountryRestrictions() starting…');

    // Shipping
    pollShippingUntilFound();

    // Billing: wait until the billing checkbox appears, then hook into it
    let attempts = 0;
    const maxAttempts = 20;
    const interval = 250;

    const timer = setInterval(() => {
        attempts++;
        log(`Billing checkbox setup attempt #${attempts}`);

        const billingCheckbox =
            document.querySelector('sc-order-billing-address')
            ?.shadowRoot
            ?.querySelector('sc-checkbox')
            ?.shadowRoot
            ?.querySelector('input');

        if (billingCheckbox || !CONFIG.enableBilling) {
            clearInterval(timer);
            setupBillingCheckboxListener();
        } else if (attempts >= maxAttempts) {
            clearInterval(timer);
            log('Billing checkbox not found — giving up.');
        }
    }, interval);
}

/* =====================================================
   BOOTSTRAP
===================================================== */
log('Registering SureCart event listeners…');

window.addEventListener('appload', () => {
    log('SureCart appload event fired.');
    initCountryRestrictions();
});

document.addEventListener('DOMContentLoaded', () => {
    log('DOM ready — running fallback init.');
    initCountryRestrictions();
});```
<span class="line"><span style="color: #6A737D">/* =====================================================</span></span>
<span class="line"><span style="color: #6A737D">   CONFIGURATION</span></span>
<span class="line"><span style="color: #6A737D">===================================================== */</span></span>
<span class="line"><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">    enableShipping: </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">,                </span><span style="color: #6A737D">// Turn shipping restriction on/off</span></span>
<span class="line"><span style="color: #E1E4E8">    enableBilling: </span><span style="color: #79B8FF">false</span><span style="color: #E1E4E8">,                 </span><span style="color: #6A737D">// Turn billing restriction on/off</span></span>
<span class="line"><span style="color: #E1E4E8">    enableLogging: </span><span style="color: #79B8FF">false</span><span style="color: #E1E4E8">,                 </span><span style="color: #6A737D">// Console logs</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Allowed countries (add as many as you want)</span></span>
<span class="line"><span style="color: #E1E4E8">    allowedCountries: [</span></span>
<span class="line"><span style="color: #E1E4E8">        { value: </span><span style="color: #9ECBFF">'GB'</span><span style="color: #E1E4E8">, label: </span><span style="color: #9ECBFF">'United Kingdom'</span><span style="color: #E1E4E8"> },</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #6A737D">// { value: 'US', label: 'United States' },</span></span>
<span class="line"><span style="color: #E1E4E8">    ],</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// The country to automatically preselect</span></span>
<span class="line"><span style="color: #E1E4E8">    defaultCountry: </span><span style="color: #9ECBFF">'GB'</span><span style="color: #E1E4E8">,                </span><span style="color: #6A737D">// Must match one of the countries above</span></span>
<span class="line"><span style="color: #E1E4E8">};</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/* =====================================================</span></span>
<span class="line"><span style="color: #6A737D">   LOGGING HELPER</span></span>
<span class="line"><span style="color: #6A737D">===================================================== */</span></span>
<span class="line"><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #F97583">...</span><span style="color: #FFAB70">args</span><span style="color: #E1E4E8">) {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableLogging) </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    console.</span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #F97583">...</span><span style="color: #E1E4E8">args);</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/* =====================================================</span></span>
<span class="line"><span style="color: #6A737D">   SHIPPING HANDLER</span></span>
<span class="line"><span style="color: #6A737D">===================================================== */</span></span>
<span class="line"><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">applyShippingUkOnly</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableShipping) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Shipping restriction disabled.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">shippingAddressElement</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">        document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-shipping-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-address, sc-compact-address'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">shippingSelect</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">        shippingAddressElement</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-select'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (shippingSelect) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Shipping select found — applying country limits…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        shippingSelect.choices </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.allowedCountries;</span></span>
<span class="line"><span style="color: #E1E4E8">        shippingSelect.value </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.defaultCountry; </span><span style="color: #6A737D">// new preselected option</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Shipping select not found yet'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">false</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">pollShippingUntilFound</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">let</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">0</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">interval</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">250</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">maxAttempts</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">40</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">timer</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setInterval</span><span style="color: #E1E4E8">(() </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">        attempts</span><span style="color: #F97583">++</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">`Shipping attempt #${</span><span style="color: #E1E4E8">attempts</span><span style="color: #9ECBFF">}`</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #B392F0">applyShippingUkOnly</span><span style="color: #E1E4E8">() </span><span style="color: #F97583">||</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #F97583">?</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'Shipping: stopped after max attempts.'</span></span>
<span class="line"><span style="color: #E1E4E8">                </span><span style="color: #F97583">:</span><span style="color: #E1E4E8"> </span><span style="color: #9ECBFF">'Shipping: restriction applied and polling stopped.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"><span style="color: #E1E4E8">    }, interval);</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/* =====================================================</span></span>
<span class="line"><span style="color: #6A737D">   BILLING HANDLER</span></span>
<span class="line"><span style="color: #6A737D">===================================================== */</span></span>
<span class="line"><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">pollBillingUntilFound</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableBilling) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing restriction disabled.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">let</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">0</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">interval</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">250</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">maxAttempts</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">40</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">timer</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setInterval</span><span style="color: #E1E4E8">(() </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">        attempts</span><span style="color: #F97583">++</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">`Billing attempt #${</span><span style="color: #E1E4E8">attempts</span><span style="color: #9ECBFF">}`</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingAddressElement</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">            document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-billing-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-address, sc-compact-address'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingSelect</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">            billingAddressElement</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-select'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (billingSelect) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing select found — applying country limits…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            billingSelect.choices </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.allowedCountries;</span></span>
<span class="line"><span style="color: #E1E4E8">            billingSelect.value </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.defaultCountry; </span><span style="color: #6A737D">// Our New Pre-select</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing: restriction applied and polling stopped.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing: stopped after max attempts.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing select not found yet'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"><span style="color: #E1E4E8">    }, interval);</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setupBillingCheckboxListener</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableBilling) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox listener disabled.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">return</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingCheckbox</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">        document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-billing-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-checkbox'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">        ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'input'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (billingCheckbox </span><span style="color: #F97583">&&</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">!</span><span style="color: #E1E4E8">billingCheckbox._listenerAdded) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox found — adding listener'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        billingCheckbox._listenerAdded </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">true</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #6A737D">// If already unchecked (billing address visible), apply immediately</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #E1E4E8">billingCheckbox.checked) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">pollBillingUntilFound</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        billingCheckbox.</span><span style="color: #B392F0">addEventListener</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'change'</span><span style="color: #E1E4E8">, () </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox changed — rechecking billing fields…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">pollBillingUntilFound</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">        });</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (</span><span style="color: #F97583">!</span><span style="color: #E1E4E8">billingCheckbox) {</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox not found yet'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">    }</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/* =====================================================</span></span>
<span class="line"><span style="color: #6A737D">   INITIALISATION</span></span>
<span class="line"><span style="color: #6A737D">===================================================== */</span></span>
<span class="line"><span style="color: #F97583">function</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">initCountryRestrictions</span><span style="color: #E1E4E8">() {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'initCountryRestrictions() starting…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Shipping</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">pollShippingUntilFound</span><span style="color: #E1E4E8">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #6A737D">// Billing: wait until the billing checkbox appears, then hook into it</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">let</span><span style="color: #E1E4E8"> attempts </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">0</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">maxAttempts</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">20</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">interval</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">250</span><span style="color: #E1E4E8">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">timer</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span><span style="color: #E1E4E8"> </span><span style="color: #B392F0">setInterval</span><span style="color: #E1E4E8">(() </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">        attempts</span><span style="color: #F97583">++</span><span style="color: #E1E4E8">;</span></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">`Billing checkbox setup attempt #${</span><span style="color: #E1E4E8">attempts</span><span style="color: #9ECBFF">}`</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">const</span><span style="color: #E1E4E8"> </span><span style="color: #79B8FF">billingCheckbox</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">=</span></span>
<span class="line"><span style="color: #E1E4E8">            document.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-order-billing-address'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'sc-checkbox'</span><span style="color: #E1E4E8">)</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.shadowRoot</span></span>
<span class="line"><span style="color: #E1E4E8">            ?.</span><span style="color: #B392F0">querySelector</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'input'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">        </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (billingCheckbox </span><span style="color: #F97583">||</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">!</span><span style="color: #79B8FF">CONFIG</span><span style="color: #E1E4E8">.enableBilling) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">setupBillingCheckboxListener</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">        } </span><span style="color: #F97583">else</span><span style="color: #E1E4E8"> </span><span style="color: #F97583">if</span><span style="color: #E1E4E8"> (attempts </span><span style="color: #F97583">>=</span><span style="color: #E1E4E8"> maxAttempts) {</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">clearInterval</span><span style="color: #E1E4E8">(timer);</span></span>
<span class="line"><span style="color: #E1E4E8">            </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Billing checkbox not found — giving up.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">        }</span></span>
<span class="line"><span style="color: #E1E4E8">    }, interval);</span></span>
<span class="line"><span style="color: #E1E4E8">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #6A737D">/* =====================================================</span></span>
<span class="line"><span style="color: #6A737D">   BOOTSTRAP</span></span>
<span class="line"><span style="color: #6A737D">===================================================== */</span></span>
<span class="line"><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'Registering SureCart event listeners…'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">window.</span><span style="color: #B392F0">addEventListener</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'appload'</span><span style="color: #E1E4E8">, () </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'SureCart appload event fired.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">initCountryRestrictions</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">});</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E1E4E8">document.</span><span style="color: #B392F0">addEventListener</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'DOMContentLoaded'</span><span style="color: #E1E4E8">, () </span><span style="color: #F97583">=></span><span style="color: #E1E4E8"> {</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">log</span><span style="color: #E1E4E8">(</span><span style="color: #9ECBFF">'DOM ready — running fallback init.'</span><span style="color: #E1E4E8">);</span></span>
<span class="line"><span style="color: #E1E4E8">    </span><span style="color: #B392F0">initCountryRestrictions</span><span style="color: #E1E4E8">();</span></span>
<span class="line"><span style="color: #E1E4E8">});</span></span>
```JavaScript