const wb_accordion = new function(){
	
	this.init = () => {
        // don't run anything in the editor
        if( typeof wp != "undefined" && typeof wp.blockEditor != "undefined" ){
            return;
        }
        
        // Initially close all accordions (unless they have the class .wb_initial_open)
        const accordions = document.querySelectorAll('.wb_accordion:not(.wb_initial_open)');
        accordions.forEach( this.toggle_accordion );
		
        // Handle clicks on toggle / dismiss elements (accordion header)
        addEventListener( 'click', e => {
            // Determine if this element (or a parent) matches the selectors in element_events[]
            const closestHeader = e.target.closest('.accordion-head');
            if( closestHeader && !e.defaultPrevented ){
                const closestAccordion = e.target.closest('.wb_accordion');
                this.toggle_accordion( closestAccordion );
            }
        });
	};
	
	this.toggle_accordion = accordion => {
        if( accordion.classList.contains('wb_is_dismissable') ){
            accordion.classList.add('accordion-dismissed');
        } else {
            accordion.classList.toggle('accordion-collapsed');
        }
	};
	
    // see if DOM is already available
    if (document.readyState === "complete" || document.readyState === "interactive") {
        // call on next available tick
        setTimeout(this.init, 1);
    } else {
        document.addEventListener("DOMContentLoaded", this.init);
    }
};
