{"id":21615,"date":"2026-06-04T18:54:53","date_gmt":"2026-06-04T16:54:53","guid":{"rendered":"https:\/\/www.drugshortage.ch\/?page_id=21615"},"modified":"2026-06-04T23:17:30","modified_gmt":"2026-06-04T21:17:30","slug":"atc-abonnement-verwaltung","status":"publish","type":"page","link":"https:\/\/www.drugshortage.ch\/index.php\/atc-abonnement-verwaltung\/","title":{"rendered":"atc-abonnement-verwaltung"},"content":{"rendered":"\n<!-- ============================================================\n     ATC-Code Abonnement \u2013 Verwaltung\n     Seite: \"atc-abonnement-verwaltung\" (\u00f6ffentlich)\n     Magic Link zeigt auf diese Seite mit ?token=xxx&email=xxx\n     ============================================================ -->\n<style>\n  #atcvw-outer { width:100%; max-width:700px; box-sizing:border-box; font-family:'Segoe UI',Arial,sans-serif; font-size:13px; color:#2d3748; margin:0 auto; }\n  .atcvw-card { background:#fff; border:1px solid #e2e8f0; border-radius:12px; padding:22px 24px; margin-bottom:16px; box-shadow:0 1px 4px rgba(0,0,0,.06); }\n\n  \/* Header *\/\n  .atcvw-header { display:flex; justify-content:space-between; align-items:flex-start; margin-bottom:16px; flex-wrap:wrap; gap:10px; }\n  .atcvw-title { font-size:16px; font-weight:700; color:#1a202c; margin-bottom:3px; }\n  .atcvw-user { font-size:12px; color:#718096; }\n  .atcvw-btn-sm { padding:6px 14px; border:1px solid #e2e8f0; border-radius:7px; background:#fff; font-size:12px; font-weight:600; color:#4a5568; cursor:pointer; }\n  .atcvw-btn-sm:hover { border-color:#e53e3e; color:#e53e3e; }\n\n  \/* Limit *\/\n  .atcvw-limit-row { display:flex; justify-content:space-between; font-size:11px; color:#718096; margin-bottom:4px; }\n  .atcvw-limit-bar { background:#f0f0f0; border-radius:4px; height:6px; margin-bottom:14px; }\n  .atcvw-limit-fill { background:#e53e3e; border-radius:4px; height:6px; transition:width .3s; }\n\n  \/* Abo-Liste *\/\n  .atcvw-abo-list { border:1px solid #e2e8f0; border-radius:8px; overflow:hidden; }\n  .atcvw-abo-item { display:flex; align-items:center; gap:10px; padding:9px 14px; border-bottom:1px solid #f0f0f0; font-size:12px; }\n  .atcvw-abo-item:last-child { border-bottom:none; }\n  .atcvw-abo-code { font-family:monospace; font-weight:700; color:#2b6cb0; min-width:80px; }\n  .atcvw-abo-stufe { font-size:10px; background:#ebf8ff; color:#2b6cb0; padding:2px 7px; border-radius:8px; white-space:nowrap; }\n  .atcvw-abo-empty { padding:14px; color:#a0aec0; font-size:12px; text-align:center; }\n  .atcvw-btn-del { padding:3px 10px; font-size:11px; border-radius:5px; border:none; cursor:pointer; font-weight:600; background:#fff5f5; color:#c53030; }\n  .atcvw-btn-del:hover { background:#fed7d7; }\n\n  \/* Baum *\/\n  .atcvw-baum-title { font-size:14px; font-weight:700; color:#1a202c; margin-bottom:10px; }\n  .atcvw-tier-info { font-size:12px; color:#718096; background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:8px 12px; margin-bottom:12px; }\n\n  \/* Breadcrumb *\/\n  .atcvw-breadcrumb { display:flex; gap:4px; align-items:center; flex-wrap:wrap; margin-bottom:8px; font-size:11px; }\n  .atcvw-bc-item { color:#2b6cb0; cursor:pointer; font-weight:600; }\n  .atcvw-bc-item:hover { text-decoration:underline; }\n  .atcvw-bc-sep { color:#a0aec0; }\n\n  \/* Baum-Container *\/\n  .atcvw-baum { border:1.5px solid #e2e8f0; border-radius:10px; overflow:hidden; }\n  .atcvw-baum-head { padding:8px 14px; background:#f8fafc; border-bottom:1px solid #e2e8f0; font-size:11px; font-weight:700; color:#718096; text-transform:uppercase; letter-spacing:.4px; }\n  .atcvw-baum-items { max-height:260px; overflow-y:auto; }\n  .atcvw-baum-item { display:flex; align-items:center; gap:10px; padding:8px 14px; border-bottom:1px solid #f7fafc; cursor:default; transition:background .1s; font-size:12px; }\n  .atcvw-baum-item:last-child { border-bottom:none; }\n  .atcvw-baum-item:hover { background:#fafafa; }\n  .atcvw-baum-item.is-abo { background:#f0fff4; }\n  .atcvw-baum-code { font-family:monospace; font-weight:600; color:#2b6cb0; min-width:75px; font-size:11px; }\n  .atcvw-baum-text { flex:1; color:#4a5568; line-height:1.3; }\n  .atcvw-btn-nav { padding:3px 9px; font-size:10px; border-radius:5px; border:1px solid #e2e8f0; background:#fff; cursor:pointer; color:#718096; white-space:nowrap; }\n  .atcvw-btn-nav:hover { border-color:#2b6cb0; color:#2b6cb0; }\n  .atcvw-btn-add { padding:3px 9px; font-size:10px; border-radius:5px; border:none; background:#e53e3e; color:#fff; cursor:pointer; font-weight:600; white-space:nowrap; }\n  .atcvw-btn-add:hover { background:#c53030; }\n  .atcvw-abo-check { color:#276749; font-size:11px; font-weight:700; white-space:nowrap; }\n\n  \/* Alerts *\/\n  .atcvw-alert { border-radius:8px; padding:9px 13px; margin-bottom:10px; font-size:12px; line-height:1.5; }\n  .atcvw-alert-ok   { background:#f0fff4; border:1px solid #9ae6b4; color:#1a4731; }\n  .atcvw-alert-err  { background:#fff5f5; border:1px solid #feb2b2; color:#742a2a; }\n  .atcvw-alert-info { background:#ebf8ff; border:1px solid #90cdf4; color:#1a365d; }\n\n  \/* Suche *\/\n  .atcvw-search-wrap { display:flex; gap:8px; margin-bottom:12px; }\n  .atcvw-search-input { flex:1; padding:9px 12px; border:1.5px solid var(--border,#e2e8f0); border-radius:8px; font-size:13px; outline:none; }\n  .atcvw-search-input:focus { border-color:#e53e3e; }\n  .atcvw-search-btn { padding:9px 16px; background:#e53e3e; color:#fff; border:none; border-radius:8px; font-size:13px; font-weight:600; cursor:pointer; white-space:nowrap; }\n  .atcvw-search-btn:hover { background:#c53030; }\n  .atcvw-search-results { border:1.5px solid #e2e8f0; border-radius:8px; overflow:hidden; margin-bottom:12px; display:none; }\n  .atcvw-search-result { display:flex; align-items:center; gap:10px; padding:8px 14px; border-bottom:1px solid #f0f0f0; font-size:12px; }\n  .atcvw-search-result:last-child { border-bottom:none; }\n  .atcvw-search-result:hover { background:#fafafa; }\n  .atcvw-search-stufe { font-size:10px; background:#ebf8ff; color:#2b6cb0; padding:2px 6px; border-radius:8px; white-space:nowrap; }\n\n  \/* Loading *\/\n  .atcvw-loading { text-align:center; padding:40px; color:#718096; }\n  .atcvw-spinner { display:inline-block; width:28px; height:28px; border:3px solid #e2e8f0; border-top-color:#e53e3e; border-radius:50%; animation:atcvwspin .7s linear infinite; margin-bottom:10px; }\n  .atcvw-spinner-sm { display:inline-block; width:12px; height:12px; border:2px solid #e2e8f0; border-top-color:#e53e3e; border-radius:50%; animation:atcvwspin .7s linear infinite; vertical-align:middle; margin-right:4px; }\n  @keyframes atcvwspin { to { transform:rotate(360deg); } }\n\n  \/* Ung\u00fcltig *\/\n  .atcvw-invalid { text-align:center; padding:40px 20px; }\n  .atcvw-invalid-icon { font-size:40px; margin-bottom:12px; }\n<\/style>\n\n<div id=\"atcvw-outer\">\n  <!-- Loading -->\n  <div id=\"atcvw-loading\" class=\"atcvw-loading\">\n    <div class=\"atcvw-spinner\"><\/div><br>Wird geladen\u2026\n  <\/div>\n\n  <!-- Ung\u00fcltiger Token -->\n  <div id=\"atcvw-invalid\" style=\"display:none;\" class=\"atcvw-card atcvw-invalid\">\n    <div class=\"atcvw-invalid-icon\">&#x1f517;<\/div>\n    <div style=\"font-size:15px;font-weight:700;color:#c53030;margin-bottom:8px;\">Link ung\u00fcltig oder abgelaufen<\/div>\n    <p style=\"font-size:13px;color:#718096;margin-bottom:16px;\">Bitte fordern Sie einen neuen Magic Link an.<\/p>\n    <a href=\"\/index.php\/atc-abonnement\/\" style=\"display:inline-block;padding:10px 22px;background:#e53e3e;color:#fff;border-radius:8px;font-weight:600;text-decoration:none;\">Neuen Link anfordern \u2192<\/a>\n  <\/div>\n\n  <!-- Verwaltung -->\n  <div id=\"atcvw-content\" style=\"display:none;\">\n\n    <!-- Meine Abos -->\n    <div class=\"atcvw-card\">\n      <div class=\"atcvw-header\">\n        <div>\n          <div class=\"atcvw-title\">&#x1f514; Meine ATC-Abonnements<\/div>\n          <div class=\"atcvw-user\" id=\"atcvw-user-info\"><\/div>\n        <\/div>\n        <button class=\"atcvw-btn-sm\" onclick=\"atcvwAbmelden()\">&#x21a9; Abmelden<\/button>\n      <\/div>\n\n      <div id=\"atcvw-alert-main\"><\/div>\n\n      <!-- Limit -->\n      <div class=\"atcvw-limit-row\">\n        <span>Abonnierte Codes<\/span>\n        <span id=\"atcvw-limit-text\">0 \/ 3<\/span>\n      <\/div>\n      <div class=\"atcvw-limit-bar\">\n        <div class=\"atcvw-limit-fill\" id=\"atcvw-limit-fill\" style=\"width:0%\"><\/div>\n      <\/div>\n\n      <!-- Liste -->\n      <div class=\"atcvw-abo-list\" id=\"atcvw-abo-list\">\n        <div class=\"atcvw-abo-empty\">Noch keine Abonnements<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- ATC-Baum -->\n    <div class=\"atcvw-card\">\n      <div class=\"atcvw-baum-title\">ATC-Code hinzuf\u00fcgen<\/div>\n      <div class=\"atcvw-tier-info\" id=\"atcvw-tier-info\"><\/div>\n      <div id=\"atcvw-alert-baum\"><\/div>\n\n      <!-- Breadcrumb -->\n      <div class=\"atcvw-breadcrumb\" id=\"atcvw-breadcrumb\">\n        <span class=\"atcvw-bc-item\" onclick=\"atcvwLade(1,'')\">ATC<\/span>\n      <\/div>\n\n      <!-- Suche -->\n      <div class=\"atcvw-search-wrap\">\n        <input type=\"text\" class=\"atcvw-search-input\" id=\"atcvw-search-input\"\n          placeholder=\"ATC-Code oder Substanzname suchen (z.B. N02BE01 oder Paracetamol)...\"\n          onkeydown=\"if(event.key==='Enter')atcvwSuche()\">\n        <button class=\"atcvw-search-btn\" onclick=\"atcvwSuche()\">&#x1f50d; Suchen<\/button>\n      <\/div>\n      <div class=\"atcvw-search-results\" id=\"atcvw-search-results\"><\/div>\n\n      <!-- Baum -->\n      <div class=\"atcvw-baum\">\n        <div class=\"atcvw-baum-head\" id=\"atcvw-baum-head\">Ebene 1 \u2013 Anatomische Hauptgruppe<\/div>\n        <div class=\"atcvw-baum-items\" id=\"atcvw-baum-items\">\n          <div style=\"padding:14px;color:#a0aec0;\"><span class=\"atcvw-spinner-sm\"><\/span> Wird geladen\u2026<\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/div>\n\n<script>\nconst ATCVW_BASE = \"https:\/\/www.drugshortage.ch\/ds.php\";\nconst ATCVW_A    = \"a=abo_registrierung\";\nconst ATCVW_API  = ATCVW_BASE + \"?\" + ATCVW_A;\nconst AMP = String.fromCharCode(38);\nfunction atcUrl(action, extra) {\n  return ATCVW_BASE + \"?\" + ATCVW_A + AMP + \"action=\" + action + (extra || \"\").replace(\/&\/g, AMP);\n}\nconst STUFE_LABELS = ['','Anatomisch','Therapeutisch','Pharmakologisch','Chemisch','Wirkstoff'];\n\nlet atcvwSession = { email:'', token:'', tier:'free', limits:{maxCodes:3, minStufe:5} };\nlet atcvwAbos    = [];\nlet atcvwCrumbs  = [];\n\n\/\/ \u2500\u2500 Suche \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function atcvwSuche() {\n  const q       = document.getElementById('atcvw-search-input').value.trim();\n  const results = document.getElementById('atcvw-search-results');\n  if (q.length < 2) { results.style.display='none'; return; }\n\n  results.style.display = 'block';\n  results.innerHTML     = \"<div style='padding:10px;color:#a0aec0;'><span class='atcvw-spinner-sm'><\/span> Suche...<\/div>\";\n\n  const minStufe = (atcvwSession && atcvwSession.limits && atcvwSession.limits.minStufe) ? atcvwSession.limits.minStufe : 5;\n  const stufe    = minStufe <= 3 ? 3 : (minStufe <= 4 ? 4 : 5);\n\n  try {\n    const res = await fetch(atcUrl(\"atc_suche\", AMP + \"q=\" + encodeURIComponent(q) + AMP + \"stufe=\" + stufe), {headers: {\"X-Requested-With\": \"XMLHttpRequest\"}});\n    const d = await res.json();\n\n    if (!d.ok) {\n      results.innerHTML = \"<div style='padding:10px;color:#c53030;'>&#x274c; \" + (d.fehler||'Fehler') + \"<\/div>\";\n      return;\n    }\n\n    if (!d.results || !d.results.length) {\n      results.innerHTML = '<div style=\"padding:10px;color:#a0aec0;\">Keine Treffer fuer: ' + q + '<\/div>';\n      return;\n    }\n\n    const aboCodes = atcvwAbos.map(function(a) { return a.ATCCode; });\n    results.innerHTML = d.results.map(function(r) {\n      const istAbo  = aboCodes.indexOf(r.code) >= 0;\n      const kannAbo = r.stufe >= minStufe;\n      return \"<div class='atcvw-search-result'>\" +\n        \"<span class='atcvw-abo-code'>\" + r.code + \"<\/span>\" +\n        \"<span class='atcvw-search-stufe'>Stufe \" + r.stufe + \"<\/span>\" +\n        \"<span style='flex:1;color:#4a5568;'>\" + r.text + \"<\/span>\" +\n        (istAbo\n          ? \"<span class='atcvw-abo-check'>\u2713 Abonniert<\/span>\"\n          : (kannAbo\n              ? \"<button class='atcvw-btn-add' onclick='atcvwHinzufuegen(\\\"\" + r.code + \"\\\",\" + r.stufe + \",event)'>+ Abo<\/button>\"\n              : \"<span style='font-size:11px;color:#a0aec0;'>Upgrade n\u00f6tig<\/span>\"\n            )\n        ) +\n      \"<\/div>\";\n    }).join('');\n  } catch(e) {\n    results.innerHTML = \"<div style='padding:10px;color:#c53030;'>Fehler: \" + e + \"<\/div>\";\n  }\n}\n\n\/\/ \u2500\u2500 Init \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function atcvwInit() {\n  const params = new URLSearchParams(window.location.search);\n  const token  = params.get('token');\n  const email  = params.get('email');\n\n  if (!token || !email) {\n    document.getElementById('atcvw-loading').style.display = 'none';\n    document.getElementById('atcvw-invalid').style.display = 'block';\n    return;\n  }\n\n  try {\n    const res = await fetch(\n      atcUrl(\"atc_verify\", AMP + \"token=\" + encodeURIComponent(token) + AMP + \"email=\" + encodeURIComponent(email)),\n      {headers: {\"X-Requested-With\": \"XMLHttpRequest\"}}\n    );\n    const d = await res.json();\n\n    if (!d.ok) {\n      document.getElementById('atcvw-loading').style.display = 'none';\n      document.getElementById('atcvw-invalid').style.display = 'block';\n      return;\n    }\n\n    atcvwSession.email = d.email;\n    atcvwSession.token = token;\n    atcvwSession.tier  = d.tier;\n\n    document.getElementById('atcvw-loading').style.display = 'none';\n    document.getElementById('atcvw-content').style.display = 'block';\n\n    await atcvwLadeAbos();\n    await atcvwLade(1, '');\n\n  } catch(e) {\n    document.getElementById('atcvw-loading').innerHTML =\n      \"<div style='color:#c53030;'>Fehler: \" + e + \"<\/div>\";\n  }\n}\n\n\/\/ \u2500\u2500 Abos laden \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function atcvwLadeAbos() {\n  try {\n    const res = await fetch(\n      atcUrl(\"atc_meine\", AMP + \"email=\" + encodeURIComponent(atcvwSession.email) + AMP + \"token=\" + encodeURIComponent(atcvwSession.token)),\n      {headers: {\"X-Requested-With\": \"XMLHttpRequest\"}}\n    );\n    const d = await res.json();\n    if (!d.ok) return;\n\n    atcvwAbos = d.abos || [];\n    atcvwSession.limits = d.limits;\n\n    \/\/ User-Info\n    const tierNames = {free:'Free',basic:'Basic',pro:'Pro'};\n    document.getElementById('atcvw-user-info').textContent =\n      atcvwSession.email + ' \u00b7 ' + (tierNames[d.tier]||d.tier) +\n      ' \u00b7 Stufe ' + d.limits.minStufe + '+ (' + STUFE_LABELS[d.limits.minStufe] + ')';\n\n    \/\/ Tier-Info f\u00fcr Baum\n    document.getElementById('atcvw-tier-info').innerHTML =\n      '&#x1f4cb; <strong>' + (tierNames[d.tier]||d.tier) + '<\/strong>: ' +\n      'max. ' + d.limits.maxCodes + ' Codes \u00b7 ' +\n      'Ab Stufe ' + d.limits.minStufe + ' (' + STUFE_LABELS[d.limits.minStufe] + ') abonnierbar';\n\n    \/\/ Limit-Bar\n    const pct = Math.min(100, (atcvwAbos.length \/ d.limits.maxCodes) * 100);\n    document.getElementById('atcvw-limit-text').textContent = atcvwAbos.length + ' \/ ' + d.limits.maxCodes;\n    document.getElementById('atcvw-limit-fill').style.width = pct + '%';\n\n    \/\/ Liste\n    const list = document.getElementById('atcvw-abo-list');\n    if (!atcvwAbos.length) {\n      list.innerHTML = \"<div class='atcvw-abo-empty'>Noch keine Abonnements \u2013 w\u00e4hlen Sie ATC-Codes aus dem Baum.<\/div>\";\n    } else {\n      list.innerHTML = atcvwAbos.map(function(a) {\n        return \"<div class='atcvw-abo-item'>\" +\n          \"<span class='atcvw-abo-code'>\" + a.ATCCode + \"<\/span>\" +\n          \"<span class='atcvw-abo-stufe'>Stufe \" + a.ATCStufe + \" \u00b7 \" + (STUFE_LABELS[a.ATCStufe]||'') + \"<\/span>\" +\n          \"<span style='flex:1'><\/span>\" +\n          \"<button class='atcvw-btn-del' onclick='atcvwEntferne(\\\"\" + a.ATCCode + \"\\\")'>\u2715 Entfernen<\/button>\" +\n        \"<\/div>\";\n      }).join('');\n    }\n  } catch(e) {}\n}\n\n\/\/ \u2500\u2500 Baum-Ebene laden \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function atcvwLade(stufe, parentCode) {\n  const container = document.getElementById('atcvw-baum-items');\n  const head      = document.getElementById('atcvw-baum-head');\n\n  container.innerHTML = \"<div style='padding:12px;color:#a0aec0;'><span class='atcvw-spinner-sm'><\/span> Wird geladen\u2026<\/div>\";\n  head.textContent    = 'Ebene ' + stufe + ' \u2013 ' + (STUFE_LABELS[stufe] || '');\n\n  try {\n    const res = await fetch(\n      ATCVW_BASE + \"?a=atc_baum\" + AMP + \"stufe=\" + stufe + AMP + \"parent=\" + encodeURIComponent(parentCode),\n      {headers: {\"X-Requested-With\": \"XMLHttpRequest\"}}\n    );\n    const d = await res.json();\n\n    if (!d.ok || !d.items || !d.items.length) {\n      container.innerHTML = \"<div style='padding:12px;color:#a0aec0;text-align:center;'>Keine Eintr\u00e4ge auf dieser Ebene<\/div>\";\n      return;\n    }\n\n    const minStufe = atcvwSession.limits.minStufe || 5;\n    const aboCodes = atcvwAbos.map(function(a) { return a.ATCCode; });\n\n    container.innerHTML = d.items.map(function(item) {\n      const kannAbo   = stufe >= minStufe;\n      const istAbo    = aboCodes.indexOf(item.code) >= 0;\n      const hatKinder = stufe < 5;\n\n      return \"<div class='atcvw-baum-item\" + (istAbo ? ' is-abo' : '') + \"'>\" +\n        \"<span class='atcvw-baum-code'>\" + item.code + \"<\/span>\" +\n        \"<span class='atcvw-baum-text'>\" + (item.text || '') + \"<\/span>\" +\n        (istAbo\n          ? \"<span class='atcvw-abo-check'>\u2713 Abonniert<\/span>\"\n          : (kannAbo\n              ? \"<button class='atcvw-btn-add' onclick='atcvwHinzufuegen(\\\"\" + item.code + \"\\\",\" + stufe + \",event)'>+ Abo<\/button>\"\n              : ''\n            )\n        ) +\n        (hatKinder && !istAbo\n        ? \"<button class='atcvw-btn-nav' onclick='atcvwNavigiere(\\\"\" + item.code + \"\\\",\\\"\" + encodeURIComponent(item.text||\"\") + \"\\\",\" + (stufe+1) + \",event)'> \u00d6ffnen<\/button>\"\n          : ''\n        ) +\n      \"<\/div>\";\n    }).join('');\n\n  } catch(e) {\n    container.innerHTML = \"<div style='padding:12px;color:#c53030;'>Fehler: \" + e + \"<\/div>\";\n  }\n}\n\n\/\/ \u2500\u2500 Navigation \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function atcvwNavigiere(code, textEnc, stufe, event) {\n  event.stopPropagation();\n  atcvwCrumbs = atcvwCrumbs.slice(0, stufe - 2);\n  atcvwCrumbs.push({stufe: stufe-1, code: code, text: decodeURIComponent(textEnc)});\n  atcvwRenderCrumbs();\n  await atcvwLade(stufe, code);\n}\n\nfunction atcvwRenderCrumbs() {\n  let html = \"<span class='atcvw-bc-item' onclick='atcvwReset()'>ATC<\/span>\";\n  atcvwCrumbs.forEach(function(b) {\n    html += \"<span class='atcvw-bc-sep'> \u203a <\/span>\";\n    html += \"<span class='atcvw-bc-item' onclick='atcvwLade(\" + (b.stufe+1) + \",\\\"\" + b.code + \"\\\")'>\" + b.code + \"<\/span>\";\n  });\n  document.getElementById('atcvw-breadcrumb').innerHTML = html;\n}\n\nasync function atcvwReset() {\n  atcvwCrumbs = [];\n  atcvwRenderCrumbs();\n  await atcvwLade(1, '');\n}\n\n\/\/ \u2500\u2500 Hinzuf\u00fcgen \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function atcvwHinzufuegen(code, stufe, event) {\n  event.stopPropagation();\n  const alertEl = document.getElementById('atcvw-alert-baum');\n\n  if (atcvwAbos.length >= atcvwSession.limits.maxCodes) {\n    alertEl.innerHTML = \"<div class='atcvw-alert atcvw-alert-err'>&#x26a0;&#xfe0f; Maximum \" + atcvwSession.limits.maxCodes + \" Codes erreicht.<\/div>\";\n    return;\n  }\n\n  try {\n    const res = await fetch(atcUrl(\"atc_add\"), {\n      method: \"POST\",\n      headers: {\"Content-Type\": \"application\/json\", \"X-Requested-With\": \"XMLHttpRequest\"},\n      body: JSON.stringify({email: atcvwSession.email, token: atcvwSession.token, atcCode: code, stufe: stufe})\n    });\n    const d = await res.json();\n\n    if (d.ok) {\n      alertEl.innerHTML = \"<div class='atcvw-alert atcvw-alert-ok'>&#x2705; <strong>\" + code + \"<\/strong> abonniert<\/div>\";\n      await atcvwLadeAbos();\n      \/\/ Baum neu laden\n      const lastCrumb = atcvwCrumbs[atcvwCrumbs.length - 1];\n      await atcvwLade(stufe, lastCrumb ? lastCrumb.code : '');\n    } else {\n      alertEl.innerHTML = \"<div class='atcvw-alert atcvw-alert-err'>&#x274c; \" + (d.fehler || 'Fehler') + \"<\/div>\";\n    }\n  } catch(e) {\n    alertEl.innerHTML = \"<div class='atcvw-alert atcvw-alert-err'>&#x274c; \" + e + \"<\/div>\";\n  }\n  setTimeout(function() { alertEl.innerHTML = ''; }, 4000);\n}\n\n\/\/ \u2500\u2500 Entfernen \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nasync function atcvwEntferne(code) {\n  if (!confirm(code + ' wirklich abbestellen?')) return;\n  try {\n    const res = await fetch(atcUrl(\"atc_remove\"), {\n      method: \"POST\",\n      headers: {\"Content-Type\": \"application\/json\", \"X-Requested-With\": \"XMLHttpRequest\"},\n      body: JSON.stringify({email: atcvwSession.email, token: atcvwSession.token, atcCode: code})\n    });\n    const d = await res.json();\n    if (d.ok) {\n      document.getElementById('atcvw-alert-main').innerHTML =\n        \"<div class='atcvw-alert atcvw-alert-ok'>&#x2705; \" + code + \" abbestellt<\/div>\";\n      await atcvwLadeAbos();\n      setTimeout(function() { document.getElementById('atcvw-alert-main').innerHTML = ''; }, 3000);\n    }\n  } catch(e) {}\n}\n\n\/\/ \u2500\u2500 Abmelden \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction atcvwAbmelden() {\n  history.replaceState({}, '', window.location.pathname);\n  document.getElementById('atcvw-content').style.display = 'none';\n  document.getElementById('atcvw-invalid').style.display = 'block';\n  document.querySelector('.atcvw-invalid div:nth-child(2)').textContent = 'Abgemeldet';\n}\n\ndocument.addEventListener('DOMContentLoaded', atcvwInit);\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Wird geladen\u2026 &#x1f517; Link ung\u00fcltig oder abgelaufen Bitte fordern Sie einen neuen Magic Link an. Neuen Link anfordern \u2192 &#x1f514; Meine ATC-Abonnements &#x21a9; Abmelden Abonnierte Codes 0 \/ 3 Noch keine Abonnements ATC-Code hinzuf\u00fcgen ATC &#x1f50d; Suchen Ebene 1 \u2013 Anatomische Hauptgruppe Wird geladen\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-21615","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/comments?post=21615"}],"version-history":[{"count":11,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21615\/revisions"}],"predecessor-version":[{"id":21631,"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/pages\/21615\/revisions\/21631"}],"wp:attachment":[{"href":"https:\/\/www.drugshortage.ch\/index.php\/wp-json\/wp\/v2\/media?parent=21615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}