{%- assign groupDetailPageId = '1231' -%}
{%- assign registrationDetailPageId = '3453' -%}
{%- assign eventOccurrencePageId = '4564' -%}
{%- assign workflowEntryPageId = '5675' -%}

<script>
(function(){
    if(window.AdminToolsWidgetLoaded) return;
    window.AdminToolsWidgetLoaded = true;

    var internalRoot = '{{ 'Global' | Attribute:'InternalApplicationRoot' }}';
    var menuItems = [];
    var pageId = '{{ CurrentPage.Id }}';
    
    if(pageId == '{{ groupDetailPageId }}'){
        menuItems.push({ href: internalRoot + 'group/{{ PageParameter.GroupId }}', icon: 'ti-users-group', title: 'Edit Group' });
    }
    if(pageId == '{{ registrationDetailPageId }}'){
        menuItems.push({ href: internalRoot + 'RegistrationInstance/{{ PageParameter.RegistrationInstanceId }}', icon: 'ti-contract', title: 'Edit Registration' });
    }
    if(pageId == '{{ eventOccurrencePageId }}'){
        {% eventitemoccurrence id:'{{ PageParameter.EventOccurrenceId }}' %}
            {% assign eItemId = eventitemoccurrence.EventItemId %}
            {% eventcalendaritem where:'EventItemId == "{{ eItemId }}"' %}
                {% assign calendarId = eventcalendaritem.EventCalendarId %}
            {% endeventcalendaritem %}
        menuItems.push({ href: internalRoot + 'web/calendars/{{ calendarId }}/event/{{ eItemId }}/occurrence/{{ PageParameter.EventOccurrenceId }}', icon: 'ti-calendar-event', title: 'Edit Event' });
        {% endeventitemoccurrence %}
    }
    if(pageId == '{{ workflowEntryPageId }}'){
        {% workflowtype where:'Guid == "{{ PageParameter.WorkflowTypeGuid }}"' %}
            {% assign thisWorkflowTypeId = workflowtype.Id %}
        {% endworkflowtype %}
        menuItems.push({ href: internalRoot + 'page/2954?WorkflowTypeId={{ thisWorkflowTypeId }}&tab=FormBuilder', icon: 'ti-clipboard-text', title: 'Edit Form' });
    }
    menuItems.push({ href: internalRoot + 'admin/cms/pages?Page={{ CurrentPage.Id }}', icon: 'ti-file-code', title: 'Edit Page' });

    var entities = [
        ['ş','&scedil;','s cedil'],['&','&amp;','Ampersand'],['<','&lt;','Less than'],['>','&gt;','Greater than'],
        ['"','&quot;','Double quote'],["'","&apos;","Apostrophe"],[' ','&nbsp;','Non-breaking space'],
        ['©','&copy;','Copyright'],['®','&reg;','Registered'],['™','&trade;','Trademark'],['°','&deg;','Degree'],
        ['±','&plusmn;','Plus minus'],['×','&times;','Multiplication'],['÷','&divide;','Division'],
        ['½','&frac12;','One half'],['¼','&frac14;','One quarter'],['¾','&frac34;','Three quarters'],
        ['—','&mdash;','Em dash'],['–','&ndash;','En dash'],['…','&hellip;','Ellipsis'],['•','&bull;','Bullet'],
        ['·','&middot;','Middle dot'],["\u2018","&lsquo;","Left single quote"],["\u2019","&rsquo;","Right single quote"],
        ["\u201C","&ldquo;","Left double quote"],["\u201D","&rdquo;","Right double quote"],
        ['«','&laquo;','Left angle quote'],['»','&raquo;','Right angle quote'],['←','&larr;','Left arrow'],
        ['→','&rarr;','Right arrow'],['↑','&uarr;','Up arrow'],['↓','&darr;','Down arrow'],
        ['↔','&harr;','Left right arrow'],['⇐','&lArr;','Double left arrow'],['⇒','&rArr;','Double right arrow'],
        ['✓','&check;','Check mark'],['✗','&#10007;','Ballot X'],['★','&#9733;','Black star'],['☆','&#9734;','White star'],
        ['♠','&spades;','Spade'],['♣','&clubs;','Club'],['♥','&hearts;','Heart'],['♦','&diams;','Diamond'],
        ['€','&euro;','Euro'],['£','&pound;','Pound'],['¥','&yen;','Yen'],['¢','&cent;','Cent'],
        ['§','&sect;','Section'],['¶','&para;','Paragraph'],['†','&dagger;','Dagger'],['‡','&Dagger;','Double dagger'],
        ['∞','&infin;','Infinity'],['∑','&sum;','Sum'],['∏','&prod;','Product'],['√','&radic;','Square root'],
        ['∫','&int;','Integral'],['≈','&asymp;','Almost equal'],['≠','&ne;','Not equal'],['≤','&le;','Less or equal'],
        ['≥','&ge;','Greater or equal'],['∴','&there4;','Therefore'],['π','&pi;','Pi'],['α','&alpha;','Alpha'],
        ['β','&beta;','Beta'],['γ','&gamma;','Gamma'],['δ','&delta;','Delta'],['ε','&epsilon;','Epsilon'],
        ['λ','&lambda;','Lambda'],['μ','&mu;','Mu'],['σ','&sigma;','Sigma'],['Ω','&Omega;','Omega'],
        ['¬','&not;','Not sign'],['∧','&and;','Logical and'],['∨','&or;','Logical or'],['∩','&cap;','Intersection'],
        ['∪','&cup;','Union'],['∈','&isin;','Element of'],['∉','&notin;','Not element of'],['⊂','&sub;','Subset'],
        ['⊃','&sup;','Superset'],['∅','&empty;','Empty set'],['∀','&forall;','For all'],['∃','&exist;','There exists'],
        ['′','&prime;','Prime'],['″','&Prime;','Double prime'],['◊','&loz;','Lozenge'],[',','&comma;','Comma'],
        ['.','&period;','Period'],[':','&colon;','Colon'],[';','&semi;','Semicolon'],['!','&excl;','Exclamation'],
        ['¡','&iexcl;','Inverted Exclamation'],['¦','&brvbar;','Broken vertical bar'],['µ','&micro;','	Micro'],
        ['?','&quest;','Question'],['¿','&iquest;','Inverted Question'],['/','&sol;','Slash'],["\\","&bsol;","Backslash"],
        ['(','&lpar;','Left paren'],[')','&rpar;','Right paren'],['[','&lsqb;','Left bracket'],[']','&rsqb;','Right bracket'],
        ['{','&lcub;','Left curly brace'],['}','&rcub;','Right curly brace'],['@','&commat;','At sign'],['#','&num;','Hash'],
        ['%','&percnt;','Percent'],['*','&ast;','Asterisk'],['+','&plus;','Plus'],['=','&equals;','Equals'],
        ['|','&vert;','Vertical bar'],['~','&tilde;','Tilde']
    ];

    var css = document.createElement('style');
    css.textContent = '#atWrap{position:fixed;bottom:20px;right:20px;z-index:99999;text-align:right;}#atBtnWrap{position:relative;display:inline-block;}#atBtn.active{color:var(--apricot-75);}#atHide{position:absolute;top:-5px;right:-5px;width:18px;height:18px;background:var(--slate-50,#64748b);border:none;border-radius:50%;color:#fff;font-size:12px;cursor:pointer;opacity:0;pointer-events:none;display:flex;align-items:center;justify-content:center;line-height:1;transition:opacity .2s;}#atBtnWrap:hover #atHide{opacity:1;pointer-events:auto;}#atHide:hover{background:var(--slate,#475569);}#atOptions{display:grid;justify-items:end;gap:8px;margin-bottom:8px;opacity:0;pointer-events:none;transition:opacity .2s;}#atOptions.open{opacity:1;pointer-events:auto;}#atOptions>:only-child{position:relative;left:20%;}#atPanel{position:absolute;bottom:50px;right:0;width:320px;max-height:380px;background:#fff;border-radius:8px;box-shadow:0 10px 10px -5px rgba(0,0,0,.04),0 20px 25px -5px rgba(0,0,0,.1);display:none;flex-direction:column;overflow:hidden;}#atPanel.open{display:flex;}#atHead{padding:10px;border-bottom:1px solid var(--gray-25,#eee);display:flex;gap:8px;}#atSearch{flex:1;padding:8px 10px;border:1px solid var(--gray-25,#ccc);border-radius:4px;font-size:14px;}#atClose{background:none;border:none;font-size:18px;cursor:pointer;color:var(--slate-50,#666);padding:0 5px;}#atClose:hover{color:var(--slate,#333);}#atList{overflow-y:auto;flex:1;}.atRow{display:flex;align-items:center;padding:8px 12px;cursor:pointer;border-bottom:1px solid var(--gray-25,#eee);}.atRow:hover{background:var(--sky-25,#f5f5f5);}.atChar{font-size:18px;width:30px;text-align:center;}.atCode{font-family:monospace;font-size:12px;flex:1;}.atName{font-size:10px;color:var(--slate-50,#888);width:90px;text-align:right;}.atCopy{background:var(--kelly,#5cb85c);color:#fff;border:none;border-radius:3px;padding:3px 6px;font-size:10px;cursor:pointer;margin-left:6px;}.atCopy:hover{opacity:.85;}.atToast{position:fixed;bottom:80px;right:80px;background:var(--navy,#333);color:#fff;padding:8px 15px;border-radius:4px;z-index:100000;font-size:13px;}';
    document.head.appendChild(css);

    var wrap = document.createElement('div');
    wrap.id = 'atWrap';
    document.body.appendChild(wrap);

    var options = document.createElement('div');
    options.id = 'atOptions';
    wrap.appendChild(options);

    var entityBtn = document.createElement('button');
    entityBtn.type = 'button';
    entityBtn.className = 'btn btn-sm btn-light btn-icon';
    entityBtn.title = 'HTML Entities';
    entityBtn.innerHTML = '<i class="ti ti-code"></i>';
    options.appendChild(entityBtn);

    for(var i = 0; i < menuItems.length; i++){
        var a = document.createElement('a');
        a.href = menuItems[i].href;
        a.className = 'btn btn-sm btn-light btn-icon';
        a.title = menuItems[i].title;
        a.innerHTML = '<i class="ti ' + menuItems[i].icon + '"></i>';
        options.appendChild(a);
    }

    var panel = document.createElement('div');
    panel.id = 'atPanel';
    panel.innerHTML = '<div id="atHead"><input type="text" id="atSearch" placeholder="Search entities..."><button type="button" id="atClose">&times;</button></div><div id="atList"></div>';
    wrap.appendChild(panel);

    var btnWrap = document.createElement('div');
    btnWrap.id = 'atBtnWrap';
    wrap.appendChild(btnWrap);

    var btn = document.createElement('button');
    btn.id = 'atBtn';
    btn.type = 'button';
    btn.className = 'btn btn-light btn-icon';
    btn.title = 'Admin Tools';
    btn.innerHTML = '<i class="ti ti-source-code"></i>';
    btnWrap.appendChild(btn);

    var hide = document.createElement('button');
    hide.id = 'atHide';
    hide.type = 'button';
    hide.innerHTML = '&times;';
    hide.title = 'Hide until page reload';
    btnWrap.appendChild(hide);

    var isOpen = false;
    var panelOpen = false;

    function renderEntities(filter){
        var html = '';
        var t = (filter||'').toLowerCase();
        for(var j=0;j<entities.length;j++){
            var e = entities[j];
            if(!t || e[0].indexOf(t)>-1 || e[1].toLowerCase().indexOf(t)>-1 || e[2].toLowerCase().indexOf(t)>-1){
                html += '<div class="atRow"><span class="atChar">'+e[0]+'</span><span class="atCode">'+e[1].replace(/&/g,'&amp;')+'</span><span class="atName">'+e[2]+'</span><button type="button" class="atCopy" data-idx="'+j+'">Copy</button></div>';
            }
        }
        document.getElementById('atList').innerHTML = html || '<div style="padding:15px;color:#888;">No matches</div>';
    }

    function copyText(text){
        var ta = document.createElement('textarea');
        ta.value = text;
        ta.style.cssText = 'position:fixed;left:-999px;';
        document.body.appendChild(ta);
        ta.select();
        document.execCommand('copy');
        document.body.removeChild(ta);
        var toast = document.createElement('div');
        toast.className = 'atToast';
        toast.textContent = 'Copied: ' + text;
        document.body.appendChild(toast);
        setTimeout(function(){ toast.remove(); }, 1500);
    }

    function closeAll(){
        isOpen = false;
        panelOpen = false;
        btn.classList.remove('active');
        options.classList.remove('open');
        panel.classList.remove('open');
    }

    btn.addEventListener('click', function(e){
        e.preventDefault();
        if(panelOpen){ panel.classList.remove('open'); panelOpen = false; }
        isOpen = !isOpen;
        btn.classList.toggle('active', isOpen);
        options.classList.toggle('open', isOpen);
    });

    entityBtn.addEventListener('click', function(e){
        e.preventDefault();
        e.stopPropagation();
        panelOpen = !panelOpen;
        panel.classList.toggle('open', panelOpen);
        if(panelOpen){
            renderEntities('');
            document.getElementById('atSearch').value = '';
            document.getElementById('atSearch').focus();
        }
    });

    document.getElementById('atClose').addEventListener('click', function(e){
        e.preventDefault();
        panel.classList.remove('open');
        panelOpen = false;
    });

    document.getElementById('atSearch').addEventListener('input', function(){
        renderEntities(this.value);
    });

    document.getElementById('atList').addEventListener('click', function(e){
        if(e.target.classList.contains('atCopy')){
            e.preventDefault();
            var idx = parseInt(e.target.getAttribute('data-idx'));
            copyText(entities[idx][1]);
        }
    });

    hide.addEventListener('click', function(e){
        e.preventDefault();
        e.stopPropagation();
        wrap.style.display = 'none';
    });

    document.addEventListener('keydown', function(e){
        if(e.keyCode === 27) closeAll();
    });

    document.addEventListener('click', function(e){
        if(!wrap.contains(e.target)) closeAll();
    });
})();
</script>