{"id":16174,"date":"2026-09-19T18:46:59","date_gmt":"2026-09-19T15:46:59","guid":{"rendered":"https:\/\/foatennis.gr\/site\/?page_id=16174"},"modified":"2026-09-26T18:58:17","modified_gmt":"2026-09-26T15:58:17","slug":"programma-agonon","status":"publish","type":"page","link":"https:\/\/foatennis.gr\/site\/programma-agonon\/","title":{"rendered":"\u03a0\u03c1\u03cc\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03b1\u03b3\u03ce\u03bd\u03c9\u03bd"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"16174\" class=\"elementor elementor-16174\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bc7cb69 e-flex e-con-boxed e-con e-parent\" data-id=\"bc7cb69\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5de9106 elementor-widget elementor-widget-shortcode\" data-id=\"5de9106\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">        <div class=\"short-auto-program\" id=\"short-auto-program-713519\"\n             data-ajax-url=\"https:\/\/foatennis.gr\/site\/wp-admin\/admin-ajax.php\"\n             data-app-url=\"\"\n             data-return-url=\"https:\/\/foatennis.gr\/site\/34o-open-andron-gynaikon-2026\/\">\n            <style>\n                .short-auto-program{width:100%;font-family:inherit;color:inherit}\n                .short-auto-program__return{margin:0 0 14px 0}\n                .short-auto-program__return a{\n                    display:inline-flex;\n                    align-items:center;\n                    gap:8px;\n                    padding:9px 14px;\n                    border:1px solid #dce6f2;\n                    border-radius:999px;\n                    background:#fff;\n                    color:#1f5fae;\n                    font-weight:700;\n                    text-decoration:none!important;\n                    box-shadow:0 4px 14px rgba(15,23,42,.05);\n                    transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease\n                }\n                .short-auto-program__return a:hover,\n                .short-auto-program__return a:focus{\n                    transform:translateY(-1px);\n                    border-color:#bfd2e8;\n                    box-shadow:0 7px 18px rgba(15,23,42,.09);\n                    color:#164a89\n                }\n                .short-auto-program__return-icon{font-size:1.15em;line-height:1}\n                .short-auto-program__filters{display:flex;flex-wrap:wrap;align-items:end;gap:12px;margin:0 0 16px;padding:14px;border:1px solid #d9dee7;border-radius:10px;background:#f8fafc}\n                .short-auto-program__filter{display:flex;flex-direction:column;gap:5px;min-width:155px}\n                .short-auto-program__filter label{font-size:14px;font-weight:700;color:#334155}\n                .short-auto-program__filter input[type=\"date\"]{width:100%;min-height:40px;box-sizing:border-box;padding:7px 10px;border:1px solid #cbd5e1;border-radius:7px;background:#fff;color:#111827;font:inherit}\n                .short-auto-program__clear{min-height:40px;padding:8px 14px;border:1px solid #cbd5e1;border-radius:7px;background:#fff;color:#1f5fae;font:inherit;font-weight:700;cursor:pointer}\n                .short-auto-program__clear:hover{background:#eef4fb}\n                .short-auto-program__filter-error{width:100%;margin:0;color:#b91c1c;font-size:14px}\n                .short-auto-program__table-wrap{width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}\n                .short-auto-program table{width:100%;border-collapse:collapse;border-spacing:0;background:#fff;color:#111827}\n                .short-auto-program th,.short-auto-program td{padding:11px 12px;border:1px solid #d9dee7;text-align:left;vertical-align:middle;white-space:nowrap}\n                .short-auto-program .sap-center{text-align:center}\n                .short-auto-program th{font-weight:700;background:#f3f5f8}\n                .short-auto-program tbody tr:nth-child(even){background:#fafbfc}\n                .short-auto-program__empty{padding:18px;border:1px solid #d9dee7;background:#fff;color:#4b5563;text-align:center}\n                .short-auto-program__updated{margin-top:8px;text-align:right;font-size:.88em;color:#6b7280}\n                @media (max-width:700px){.short-auto-program th,.short-auto-program td{padding:9px 10px;font-size:14px}}\n            <\/style>\n\n            <div class=\"short-auto-program__return\">\n                <a href=\"#\" onclick=\"if (window.history.length > 1) { window.history.back(); } else { window.location.href = 'https:\/\/foatennis.gr\/site\/'; } return false;\">\n                    <span class=\"short-auto-program__return-icon\" aria-hidden=\"true\">\u2190<\/span>\n                    <span>\u0395\u03c0\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ae<\/span>\n                <\/a>\n            <\/div>\n\n            <div class=\"short-auto-program__filters\" role=\"group\" aria-label=\"\u03a6\u03af\u03bb\u03c4\u03c1\u03b1 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03b9\u03ce\u03bd \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2\">\n                <div class=\"short-auto-program__filter\">\n                    <label for=\"short-auto-program-713519-from\">\u0391\u03c0\u03cc<\/label>\n                    <input type=\"date\" id=\"short-auto-program-713519-from\" class=\"short-auto-program__date-from\">\n                <\/div>\n                <div class=\"short-auto-program__filter\">\n                    <label for=\"short-auto-program-713519-to\">\u0388\u03c9\u03c2<\/label>\n                    <input type=\"date\" id=\"short-auto-program-713519-to\" class=\"short-auto-program__date-to\">\n                <\/div>\n                <button type=\"button\" class=\"short-auto-program__clear\">\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2<\/button>\n                <p class=\"short-auto-program__filter-error\" role=\"status\" hidden><\/p>\n            <\/div>\n\n            <div class=\"short-auto-program__content\">\n                <div class=\"short-auto-program__empty\">\u03a6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2\u2026<\/div>\n            <\/div>\n        <\/div>\n        <script>\n        (function () {\n            const root = document.getElementById(\"short-auto-program-713519\");\n            if (!root) return;\n\n            const content = root.querySelector('.short-auto-program__content');\n            const ajaxUrl = root.dataset.ajaxUrl || '';\n            const appUrl = root.dataset.appUrl || '';\n            const configuredReturnUrl = root.dataset.returnUrl || '';\n            const returnBox = root.querySelector('.short-auto-program__return');\n            const returnLink = returnBox ? returnBox.querySelector('a') : null;\n            const dateFrom = root.querySelector('.short-auto-program__date-from');\n            const dateTo = root.querySelector('.short-auto-program__date-to');\n            const clearButton = root.querySelector('.short-auto-program__clear');\n            const filterError = root.querySelector('.short-auto-program__filter-error');\n            let scheduleData = null;\n\n            function toISODate(value) {\n                const raw = String(value == null ? '' : value).trim();\n                let match = raw.match(\/^(\\d{4})-(\\d{2})-(\\d{2})(?:$|[ T])\/);\n                let year, month, day;\n                if (match) {\n                    year = Number(match[1]); month = Number(match[2]); day = Number(match[3]);\n                } else {\n                    \/\/ The feed can return a Greek weekday before the date.\n                    match = raw.match(\/(?:^|\\s)(\\d{1,2})[\\\/-](\\d{1,2})[\\\/-](\\d{4})(?:$|\\s)\/);\n                    if (!match) return '';\n                    day = Number(match[1]); month = Number(match[2]); year = Number(match[3]);\n                }\n                const parsed = new Date(Date.UTC(year, month - 1, day));\n                if (parsed.getUTCFullYear() !== year || parsed.getUTCMonth() !== month - 1 || parsed.getUTCDate() !== day) return '';\n                return String(year).padStart(4, '0') + '-' + String(month).padStart(2, '0') + '-' + String(day).padStart(2, '0');\n            }\n\n            function rowDate(row, columns) {\n                if (!row) return '';\n                const keys = ['match_date', 'date', 'match_date_display'];\n                columns.forEach(function (column) {\n                    if (String(column.label || '').trim() === '\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1') keys.push(String(column.key || ''));\n                });\n                for (const key of keys) {\n                    if (key && row[key] != null) {\n                        const parsed = toISODate(row[key]);\n                        if (parsed) return parsed;\n                    }\n                }\n                return '';\n            }\n\n            function applyFilters() {\n                if (!scheduleData) return;\n                const from = dateFrom.value;\n                const to = dateTo.value;\n                const invalid = Boolean(from && to && from > to);\n                filterError.hidden = !invalid;\n                filterError.textContent = invalid ? '\u0397 \u03b7\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1 \u00ab\u0391\u03c0\u03cc\u00bb \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03bc\u03b5\u03c4\u03ac \u03c4\u03b7\u03bd \u00ab\u0388\u03c9\u03c2\u00bb.' : '';\n                if (invalid) return;\n                const columns = Array.isArray(scheduleData.columns) ? scheduleData.columns : [];\n                const rows = Array.isArray(scheduleData.rows) ? scheduleData.rows : [];\n                const filtered = rows.filter(function (row) {\n                    if (!from && !to) return true;\n                    const date = rowDate(row, columns);\n                    return date && (!from || date >= from) && (!to || date <= to);\n                });\n                render(Object.assign({}, scheduleData, { rows: filtered }), Boolean(from || to));\n            }\n\n            dateFrom.addEventListener('change', applyFilters);\n            dateTo.addEventListener('change', applyFilters);\n            clearButton.addEventListener('click', function () {\n                dateFrom.value = '';\n                dateTo.value = '';\n                applyFilters();\n            });\n\n            function setReturnUrl(feedReturnUrl) {\n                if (!returnBox || !returnLink) return;\n                const url = configuredReturnUrl || String(feedReturnUrl || '').trim();\n                const safe = \/^https?:\\\/\\\/\/i.test(url) || \/^\\\/(?!\\\/)\/.test(url);\n                if (!url || !safe) {\n                    returnBox.hidden = true;\n                    returnLink.removeAttribute('href');\n                    return;\n                }\n                returnLink.setAttribute('href', url);\n                returnBox.hidden = false;\n            }\n\n            function esc(value) {\n                return String(value == null ? '' : value)\n                    .replace(\/&\/g, '&amp;')\n                    .replace(\/<\/g, '&lt;')\n                    .replace(\/>\/g, '&gt;')\n                    .replace(\/\"\/g, '&quot;')\n                    .replace(\/'\/g, '&#039;');\n            }\n\n            function formatDate(value) {\n                const raw = String(value == null ? '' : value).trim();\n                const match = raw.match(\/^(\\d{2})\\\/(\\d{2})\\\/(\\d{4})$\/);\n                if (!match) return raw;\n                const date = new Date(Number(match[3]), Number(match[2]) - 1, Number(match[1]));\n                const days = ['\u039a\u03c5\u03c1\u03b9\u03b1\u03ba\u03ae', '\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03b1', '\u03a4\u03c1\u03af\u03c4\u03b7', '\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03b7', '\u03a0\u03ad\u03bc\u03c0\u03c4\u03b7', '\u03a0\u03b1\u03c1\u03b1\u03c3\u03ba\u03b5\u03c5\u03ae', '\u03a3\u03ac\u03b2\u03b2\u03b1\u03c4\u03bf'];\n                return days[date.getDay()] + ' ' + raw;\n            }\n\n            function render(data, filtering) {\n                const columns = Array.isArray(data.columns) ? data.columns : [];\n                const rows = Array.isArray(data.rows) ? data.rows : [];\n                const updated = data.updated_display ? String(data.updated_display) : '';\n\n                if (!columns.length) {\n                    content.innerHTML = '<div class=\"short-auto-program__empty\">\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b5\u03c2 \u03c3\u03c4\u03ae\u03bb\u03b5\u03c2 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2.<\/div>';\n                    return;\n                }\n\n                if (!rows.length) {\n                    content.innerHTML = '<div class=\"short-auto-program__empty\">' + (filtering ? '\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03b1\u03b3\u03ce\u03bd\u03b5\u03c2 \u03c3\u03c4\u03bf \u03b5\u03c0\u03b9\u03bb\u03b5\u03b3\u03bc\u03ad\u03bd\u03bf \u03b4\u03b9\u03ac\u03c3\u03c4\u03b7\u03bc\u03b1.' : '\u0394\u03b5\u03bd \u03c5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03ba\u03b1\u03c4\u03b1\u03c7\u03c9\u03c1\u03af\u03c3\u03b5\u03b9\u03c2.') + '<\/div>' +\n                        (updated ? '<div class=\"short-auto-program__updated\">\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7: ' + esc(updated) + '<\/div>' : '');\n                    return;\n                }\n\n                let html = '<div class=\"short-auto-program__table-wrap\"><table><thead><tr>';\n                columns.forEach(function (column) {\n                    const label = String(column.label || '');\n                    const key = String(column.key || '');\n                    const centered = label === '\u038f\u03c1\u03b1' || label === '\u0393\u03ae\u03c0\u03b5\u03b4\u03bf';\n                    const athlete = key === 'athletes' || label === '\u0391\u03b8\u03bb\u03b7\u03c4\u03ae\u03c2\/\u03b5\u03c2';\n                    html += '<th scope=\"col\"' + (centered ? ' class=\"sap-center\"' : '') + '>' + esc(label) + '<\/th>';\n                    if (athlete) html += '<th scope=\"col\" class=\"sap-center\">#<\/th>';\n                });\n                html += '<\/tr><\/thead><tbody>';\n\n                rows.forEach(function (row) {\n                    html += '<tr>';\n                    columns.forEach(function (column) {\n                        const key = String(column.key || '');\n                        const label = String(column.label || '');\n                        const centered = label === '\u038f\u03c1\u03b1' || label === '\u0393\u03ae\u03c0\u03b5\u03b4\u03bf';\n                        const athlete = key === 'athletes' || label === '\u0391\u03b8\u03bb\u03b7\u03c4\u03ae\u03c2\/\u03b5\u03c2';\n                        let value = row && row[key] != null ? row[key] : '';\n                        if (key === 'date' || key === 'match_date_display' || label === '\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1') value = formatDate(value);\n                        html += '<td' + (centered ? ' class=\"sap-center\"' : '') + '>' + esc(value) + '<\/td>';\n                        if (athlete) html += '<td class=\"sap-center\">vs<\/td>';\n                    });\n                    html += '<\/tr>';\n                });\n\n                html += '<\/tbody><\/table><\/div>';\n                if (updated) html += '<div class=\"short-auto-program__updated\">\u0395\u03bd\u03b7\u03bc\u03ad\u03c1\u03c9\u03c3\u03b7: ' + esc(updated) + '<\/div>';\n                content.innerHTML = html;\n            }\n\n            function load() {\n                const params = new URLSearchParams();\n                params.set('action', 'short_auto_program_feed');\n                params.set('_ts', String(Date.now()));\n                if (appUrl) params.set('app_url', appUrl);\n\n                fetch(ajaxUrl + '?' + params.toString(), {\n                    method: 'GET',\n                    credentials: 'same-origin',\n                    cache: 'no-store',\n                    headers: { 'Accept': 'application\/json' }\n                })\n                .then(function (response) {\n                    if (!response.ok) throw new Error('HTTP ' + response.status);\n                    return response.json();\n                })\n                .then(function (data) {\n                    if (!data || !data.ok) throw new Error((data && data.error) || 'Invalid response');\n                    scheduleData = data;\n                    applyFilters();\n                })\n                .catch(function () {\n                    content.innerHTML = '<div class=\"short-auto-program__empty\">\u0394\u03b5\u03bd \u03ae\u03c4\u03b1\u03bd \u03b4\u03c5\u03bd\u03b1\u03c4\u03ae \u03b7 \u03c6\u03cc\u03c1\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03c0\u03c1\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03b1\u03b3\u03ce\u03bd\u03c9\u03bd.<\/div>';\n                });\n            }\n\n            load();\n        }());\n        <\/script>\n        <\/div>\n\t\t\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>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-16174","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/pages\/16174","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/comments?post=16174"}],"version-history":[{"count":23,"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/pages\/16174\/revisions"}],"predecessor-version":[{"id":16223,"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/pages\/16174\/revisions\/16223"}],"wp:attachment":[{"href":"https:\/\/foatennis.gr\/site\/wp-json\/wp\/v2\/media?parent=16174"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}