'use strict';const required_field = '\u042d\u0442\u043e \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430',incorrect_email = 'E-mail \u0432\u0432\u0435\u0434\u0435\u043d \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e';function popup(url, width, height) {return window.open(url, '', 'status=no,scrollbars=yes,resizable=yes,width=' + width + ',height=' + height + ',top=' + Math.floor((screen.height - height) / 2 - 14) + ',left=' + Math.floor((screen.width - width) / 2 - 5));}const vh = () => document.documentElement.style.setProperty('--vh', `${window.innerHeight * 0.01}px`); window.addEventListener('resize', vh), vh();const app = document.querySelector('.🦄'), header_noty = document.querySelector('.h-noty');if (header_noty) {const header_noty_resize = () => document.documentElement.style.setProperty('--h-noty-height', `${header_noty.getBoundingClientRect().height}px`);window.addEventListener('resize', header_noty_resize), header_noty_resize()}const header = document.querySelector('.h'), header_observer = new IntersectionObserver(([e]) => e.target.classList.toggle('hf', e.intersectionRatio < 1), {rootMargin: (header_noty ? `-${header_noty.getBoundingClientRect().height + 1}px` : '-1px') + ' 0px 0px 0px',threshold: [1],});header_observer.observe(header);const animation_observe = new IntersectionObserver(entries => entries.map(entry => {if (!entry.isIntersecting) return !1;const animation = entry.target;animation.classList.add('animation-start')}), {threshold: [0.5]});for (const animation of document.querySelectorAll('.animation')) animation_observe.observe(animation);const faq_list = document.querySelectorAll('.b-faq-item');if (faq_list)for (const faq of faq_list)faq.querySelector('.b-faq-header').addEventListener('click', () => faq.classList.toggle('b-faq-active'));const menu_button = document.querySelector('.h-memu__botton');if (menu_button)menu_button.addEventListener('click', () => {if (app.classList.contains('open-menu')) {document.body.style.overflow = 'auto',app.classList.remove('open-menu'),app.classList.remove('open-menu-profile')}else {document.body.style.overflow = 'hidden',app.classList.add('open-menu')}});document.querySelector('.h-back-button').addEventListener('click', () => app.classList.remove('open-menu-profile'));const go_top = document.querySelector('.f-arrow-top');if (go_top) {go_top.addEventListener('click', () =>app.scrollIntoView({behavior: 'smooth',block: 'start'})),document.addEventListener('scroll', () => {if (document.documentElement.scrollTop || document.body.scrollTop) {if (!go_top.classList.contains('f-arrow-active'))go_top.classList.add('f-arrow-active')}else go_top.classList.remove('f-arrow-active')})}const go_block = document.querySelectorAll('[data-go-block]');if (go_block) for (const link of go_block) link.addEventListener('click', () => window.scroll({ top: document.querySelector(`.${link.dataset.goBlock}`).offsetTop - header.clientHeight, behavior: 'smooth' }));const profile = document.querySelector('.h-profile');if (profile) {profile.querySelector('.h-profile__button a').addEventListener('click', e => {if (window.matchMedia('(max-width: 1279px)').matches) {e.preventDefault();app.classList.add('open-menu'), app.classList.add('open-menu-profile')}});}const send = (text = '\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0412\u0430\u0448\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435!', description = '') => {const modal = document.createElement('div');modal.classList = `m m-send`,modal.innerHTML = `<div class="m-wrapper"><div class="m-close"><svg viewBox="0 0 24 24"><use xlink:href="#m-close"></use></svg></div><div class="m-content"><div class="m-send-image"><img loading="lazy" src="/static/img/modal-send.svg" width="0" height="0" alt="@"></div><div class="m-send-title">${text}</div>${description ? description : ''}<div class="m-send-button"><span>\u0425\u043e\u0440\u043e\u0448\u043e</span></div></div></div>`,modal.addEventListener('click', e => {if (!modal.querySelector('.m-content').contains(e.target)) {modal.remove(),document.body.style.overflow = 'auto'}});for (const close of modal.querySelectorAll('.m-close, .m-send-button span'))close.addEventListener('click', () => {modal.remove(),document.body.style.overflow = 'auto'});document.body.style.overflow = 'hidden',app.insertAdjacentElement('beforeend', modal)},is_email = value => value.toLowerCase().match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/),open_password_recovery = (back = !1) => {const modal = document.createElement('div');modal.classList = `login`,modal.innerHTML = '<div class="login-wrapper"><div class="login-content"></div></div>',modal.querySelector('.login-content').appendChild(document.querySelector('#password_recovery').content.cloneNode(!0)),modal.addEventListener('click', e => {if (!modal.querySelector('.login-content').contains(e.target)) {modal.remove();if (back) open_login()}}),modal.querySelector('.login-close').addEventListener('click', () => {modal.remove();if (back) open_login()});const input = modal.querySelector('.login-recovery__item-input');input.querySelector('input').addEventListener('focus', () => {input.classList.add('focus'),input.classList.remove('error');const error_text = input.querySelector('.login-recovery__item-error'); if (error_text) error_text.remove();}),input.querySelector('input').addEventListener('blur', e => {e.currentTarget.value = e.currentTarget.value.trim();if (e.currentTarget.value) input.classList.add('not-empty'); else input.classList.remove('not-empty');input.classList.remove('focus')}),modal.querySelector('.login-recovery-block').addEventListener('submit', async e => {e.preventDefault();let errors = !1;input.classList.remove('error');const error_text = input.querySelector('.login-recovery__item-error'); if (error_text) error_text.remove();const value = input.querySelector('input').value;if (!value) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="login-recovery__item-error">${required_field}</div>`)}if (!errors && !is_email(value)) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="login-recovery__item-error">${incorrect_email}</div>`)}if (errors) return;let data = new FormData(e.currentTarget); data.append('action', 'password_recovery');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) {document.querySelector('.login-recovery-form').style.display = 'none',document.querySelector('.login-recovery-result').style.display = 'block'}else if (result.errorText) {input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="login-recovery__item-error">${result.errorText}</div>`)}}),document.body.style.overflow = 'hidden',app.insertAdjacentElement('beforeend', modal)},open_login = () => {const modal = document.createElement('div');modal.classList = `login`,modal.innerHTML = '<div class="login-wrapper"><div class="login-content"></div></div>',modal.querySelector('.login-content').appendChild(document.querySelector('#login').content.cloneNode(!0)),modal.addEventListener('click', e => {if (!modal.querySelector('.login-content').contains(e.target)) {modal.remove(),document.body.style.overflow = 'auto'}}),modal.querySelector('.login-close').addEventListener('click', () => {modal.remove(),document.body.style.overflow = 'auto'}),modal.querySelector('.login-forgot span').addEventListener('click', () => {modal.remove(),open_password_recovery(!0)});const inputs = modal.querySelectorAll('.login-fields__item-input');for (const input of inputs) {input.querySelector('input').addEventListener('focus', () => {input.classList.add('focus'),input.classList.remove('error');const error_text = input.querySelector('.login-fields__item-error'); if (error_text) error_text.remove();}),input.querySelector('input').addEventListener('blur', e => {if (e.currentTarget.name !== 'password') e.currentTarget.value = e.currentTarget.value.trim();if (e.currentTarget.value) input.classList.add('not-empty'); else input.classList.remove('not-empty');input.classList.remove('focus')})}modal.querySelector('.login-block').addEventListener('submit', async e => {e.preventDefault();const error = modal.querySelector('.login-error'); error.innerHTML = ''; let errors = !1;for (const input of inputs) {input.classList.remove('error');const error_text = input.querySelector('.login-fields__item-error'); if (error_text) error_text.remove();if (!input.querySelector('input').value) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="login-fields__item-error">${required_field}</div>`)}}if (errors) return;let data = new FormData(e.currentTarget); data.append('action', 'login');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) location.reload();else if (result.errorText) {for (const input of inputs) input.classList.add('error'),error.innerHTML = result.errorText}}),document.body.style.overflow = 'hidden',app.insertAdjacentElement('beforeend', modal)},login_button = document.querySelector('.h-login-button');if (login_button) login_button.addEventListener('click', open_login);for (const link of document.querySelectorAll('.m-link'))link.addEventListener('click', e => {e.preventDefault();const target = e.currentTarget, content = document.querySelector(`#m-${target.dataset.href}`);if (!content) return;const modal = document.createElement('div');modal.classList = `m m-${target.dataset.class || 'default'}`,modal.innerHTML = '<div class="m-wrapper"><div class="m-content"></div></div>',modal.querySelector('.m-content').appendChild(content.content.cloneNode(!0)),modal.addEventListener('click', e => {if (!modal.querySelector('.m-content').contains(e.target)) {modal.remove(),document.body.style.overflow = 'auto'}}),modal.querySelector('.m-close').addEventListener('click', () => {modal.remove(),document.body.style.overflow = 'auto'}),document.body.style.overflow = 'hidden';const event = target.dataset.event;if (event) {if (event == 'feedback') {modal.querySelector('form').addEventListener('submit', async e => {e.preventDefault();let data = new FormData(e.currentTarget); data.append('action', 'feedback');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) {modal.remove(),document.body.style.overflow = 'auto',send()}})}if (event == 'olympiad-reg') {const form = modal.querySelector('form');form.addEventListener('submit', async e => {e.preventDefault();let data = new FormData(e.currentTarget); data.append('action', 'olympiad-reg');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) {modal.remove(),document.body.style.overflow = 'auto',send('\u041c\u044b \u0442\u0435\u0431\u044f \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0438! \u0416\u0434\u0438 \u043f\u0438\u0441\u044c\u043c\u0430 ;)')}})}if (event == 'teachers-society') {const form = modal.querySelector('form');form.addEventListener('submit', async e => {e.preventDefault();let data = new FormData(e.currentTarget); data.append('action', 'teachers-society');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) {modal.remove(),document.body.style.overflow = 'auto',send('Спасибо за Ваше обращение!', '<div class="m-send-description">Уведомление о начале регистрации на проект ИИ Старт придёт на указанную почту.</div>')}})}if (event == 'review') {(async () => {let data = new FormData(); data.append('action', 'review'), data.append('id', target.dataset.id);const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.html) modal.querySelector('.m-review-content').innerHTML = result.html})()}if (event == 'award') {(async () => {let data = new FormData(); data.append('action', 'award'), data.append('id', target.dataset.id);const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.html) modal.querySelector('.m-award-content').innerHTML = result.html})()}if (event == 'award-en') {(async () => {let data = new FormData(); data.append('action', 'award-en'), data.append('id', target.dataset.id);const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.html) modal.querySelector('.m-award-content').innerHTML = result.html})()}}app.insertAdjacentElement('beforeend', modal)});for (const tabs of document.querySelectorAll('.t')) {const tt = tabs.querySelectorAll('.tt [data-tab]');const tc = tabs.querySelectorAll('.tc [data-tab]');for (const button of tt) {button.addEventListener('click', e => {const el = e.currentTarget;for (const a of tt) a.classList.remove('ta');for (const a of tc) {if (a.dataset.tab == el.dataset.tab) a.classList.add('ta');else a.classList.remove('ta')}el.classList.add('ta')})}}for (const video of document.querySelectorAll('[data-video]'))video.addEventListener('click', e => {constgetEmbed = url => {const match = url.match(/^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/);return (match && match[2].length === 11) ? match[2] : null},modal = document.createElement('div'),url = getEmbed(e.currentTarget.dataset.video);if (!url) return;e.preventDefault();modal.classList = 'video',modal.innerHTML = `<div class="video-container"><div class="video-wrapper"><iframe src="//www.youtube.com/embed/${url}?autoplay=1&rel=0" allow="autoplay" allowfullscreen></iframe></div></div><div class="video-close"><svg width="13" height="12" viewBox="0 0 13 12" fill="none"><rect x="1" y="10" width="13" height="2" rx="1" transform="rotate(-45 1 10)" fill="currentColor"/><rect x="2.41406" y="1" width="13" height="2" rx="1" transform="rotate(45 2.41406 1)" fill="currentColor"/></svg></div>`,modal.addEventListener('click', e => {if (!modal.querySelector('.video-container').contains(e.target)) {modal.remove(),document.body.style.overflow = 'auto'}}),modal.querySelector('.video-close').addEventListener('click', () => {modal.remove(),document.body.style.overflow = 'auto'}),document.body.style.overflow = 'hidden',document.body.insertAdjacentElement('beforeend', modal)});const partners_container = document.querySelector('.b-partners-slider__container');if (partners_container) {const partners_wrapper = document.querySelector('.b-partners-slider__wrapper'),partners_function = function partners_animation() {const partners_slide = partners_wrapper.querySelector('.b-partners-slider__slide:first-child');let rightSideOfFirstItem = partners_slide.getBoundingClientRect().right;if (rightSideOfFirstItem == document.querySelector('.b-partners-slider__container').getBoundingClientRect().left) {current_left_value = -1;partners_wrapper.appendChild(partners_slide);}partners_wrapper.style.marginLeft = `${current_left_value}px`;current_left_value--;};let current_left_value = 0, partners_interval = window.setInterval(partners_function, 30);partners_container.addEventListener('mouseover', () => {clearInterval(partners_interval), partners_interval = window.setInterval(partners_function, 50)}),partners_container.addEventListener('mouseout', () => {clearInterval(partners_interval), partners_interval = window.setInterval(partners_function, 30)})}const experts = document.querySelector('.b-experts');if (experts) for (const item of experts.querySelectorAll('.ss')) {const toggle = item.querySelector('.b-experts-text__toggle');if (item.querySelector('.b-experts-text__content').clientHeight > item.querySelector('.b-experts-text').clientHeight) {toggle.querySelector('.b-experts-text__toggle-open').addEventListener('click', () => item.classList.toggle('open')),toggle.querySelector('.b-experts-text__toggle-close').addEventListener('click', () => item.classList.toggle('open'))}else toggle.remove();}const events_filter = document.querySelector('.b-events-filter'),filter = async () => {let data = new FormData(events_filter), params = new URLSearchParams(data), params_empty = [];params.forEach((v, k) => {if (!v) params_empty.push(k);}),params_empty.forEach(k => params.delete(k));const params_url = params.toString(), clear = document.querySelector('.b-events-clear');params_url ? clear.classList.add('active') : clear.classList.remove('active'),history.replaceState(null, null, location.pathname + (params_url ? '?' + params_url : '')),data.append('action', 'events-filter');const response = await fetch(location.pathname, { method: 'post', body: data }), result = await response.json();document.querySelector('.b-events-list').innerHTML = result.html};if (events_filter) {const events_types = events_filter.querySelectorAll('.b-events-types input[name=type]'),events_search = events_filter.querySelector('.b-events-search__input input');events_search.addEventListener('input', () => filter());for (const type of events_types)type.addEventListener('change', () => filter());document.querySelector('.b-events-clear span').addEventListener('click', () => {for (const type of events_types)if (type.value == '')type.checked = !0;const events_date_select = document.querySelector('.b-events-date__select span'), events_date_input = document.querySelector('.b-events-date__datepicker input'), events_date_picker = events_date_input._flatpickr;if (events_date_picker) {events_date_picker.clear()}events_date_input.value = '', events_search.value = '', events_date_select.innerHTML = events_date_select.dataset.empty, filter()})}const selects = document.querySelectorAll('.select');if (selects) {document.addEventListener('click', e => {if (!e.target.closest('.select-dropbox')) for (const select of document.querySelectorAll('.select')) select.classList.remove('open');});for (const select of selects) {const search = select.querySelector('.select-search'), dropbox = select.querySelector('.select-dropbox'), val = select.querySelector('.select-val');select.querySelector('.select-panel').addEventListener('click', e => {if (val.disabled) return;for (const select_ of selects) if (select_ !== e.currentTarget.closest('.select')) select_.classList.remove('open');const error_text = select.querySelector('.select-error'); if (error_text) error_text.remove();select.classList.remove('error'),select.classList.add('open'),e.stopPropagation()});if (search) {const reset = () => {for (const vairable of dropbox.querySelectorAll('span')) vairable.style.display = 'block',dropbox.classList.remove('hide')};search.addEventListener('input', e => {let total = 0;for (const vairable of dropbox.querySelectorAll('span')) {if (vairable.textContent.toLowerCase().indexOf(e.currentTarget.value.toLowerCase()) >= 0) {total++, vairable.style.display = 'block'}else vairable.style.display = 'none';if (!total && e.currentTarget.value) dropbox.classList.add('hide');else dropbox.classList.remove('hide');}}),search.addEventListener('focus', e => {e.currentTarget.value = '',select.classList.add('focus'),select.classList.remove('error');const error_text = select.querySelector('.select-error'); if (error_text) error_text.remove();reset()}),search.addEventListener('blur', e => {e.currentTarget.value = e.currentTarget.value.trim();let find = !1;for (const vairable of dropbox.querySelectorAll('span')) if (e.currentTarget.value.toLowerCase() == vairable.textContent.toLowerCase()) {find = !0;e.currentTarget.value = e.currentTarget.dataset.last = vairable.textContent,val.value = vairable.dataset.value || vairable.textContent,val.dispatchEvent(new Event('change'))}if (!find) e.currentTarget.value = '';if (e.currentTarget.dataset.last) e.currentTarget.value = e.currentTarget.dataset.last;if (e.currentTarget.value) select.classList.add('not-empty'); else select.classList.remove('not-empty');select.classList.remove('focus')})}for (const vairable of dropbox.querySelectorAll('span'))vairable.addEventListener('click', e => {const value = select.querySelector('.select-value');if (value) value.innerHTML = e.currentTarget.textContent;if (search) {search.value = e.currentTarget.textContent,search.dataset.last = e.currentTarget.textContent}if (e.currentTarget.textContent) select.classList.add('not-empty');select.classList.remove('open'),val.value = e.currentTarget.dataset.value || e.currentTarget.textContent,val.dispatchEvent(new Event('change'))})}}const inputs = document.querySelectorAll('.b-reg-field__input');for (const input of inputs) {input.querySelector('input').addEventListener('focus', () => {input.classList.add('focus'),input.classList.remove('error');const error_text = input.querySelector('.b-reg-field__error'); if (error_text) error_text.remove();}),input.querySelector('input').addEventListener('blur', e => {if (e.currentTarget.name !== 'password') e.currentTarget.value = e.currentTarget.value.trim();if (e.currentTarget.value) input.classList.add('not-empty'); else input.classList.remove('not-empty');input.classList.remove('focus')})}const login_form = document.querySelector('.b-login-form');if (login_form) {if (login_form.dataset.backUrl) history.replaceState(null, null, login_form.dataset.backUrl);const inputs = login_form.querySelectorAll('.b-login-field__input');for (const input of inputs) {input.querySelector('input').addEventListener('focus', () => {input.classList.add('focus'),input.classList.remove('error');const error_text = input.querySelector('.b-login-field__error'); if (error_text) error_text.remove();}),input.querySelector('input').addEventListener('blur', e => {if (e.currentTarget.name !== 'password') e.currentTarget.value = e.currentTarget.value.trim();if (e.currentTarget.value) input.classList.add('not-empty'); else input.classList.remove('not-empty');input.classList.remove('focus')})}login_form.addEventListener('submit', async e => {e.preventDefault();const error = login_form.querySelector('.b-login-error'); error.innerHTML = ''; let errors = !1;for (const input of inputs) {input.classList.remove('error');const error_text = input.querySelector('.b-login-field__error'); if (error_text) error_text.remove();if (!input.querySelector('input').value) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="b-login-field__error">${required_field}</div>`)}}if (errors) return;let data = new FormData(e.currentTarget); data.append('action', 'login');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) location.reload();else if (result.errorText) {for (const input of inputs) input.classList.add('error'),error.innerHTML = result.errorText}}),login_form.querySelector('.b-login-forgot span').addEventListener('click', () => open_password_recovery())}const change_passwd_form = document.querySelector('.b-change-passwd-form');if (change_passwd_form) {const inputs = change_passwd_form.querySelectorAll('.b-change-passwd-field__input');for (const input of inputs) {input.querySelector('input').addEventListener('focus', () => {input.classList.add('focus'),input.classList.remove('error');const error_text = input.querySelector('.b-change-passwd-field__error'); if (error_text) error_text.remove();}),input.querySelector('input').addEventListener('blur', e => {if (e.currentTarget.name !== 'password') e.currentTarget.value = e.currentTarget.value.trim();if (e.currentTarget.value) input.classList.add('not-empty'); else input.classList.remove('not-empty');input.classList.remove('focus')})}change_passwd_form.addEventListener('submit', async e => {e.preventDefault();const error = change_passwd_form.querySelector('.b-change-passwd-error'); error.innerHTML = ''; let errors = !1;for (const input of inputs) {input.classList.remove('error');const error_text = input.querySelector('.b-change-passwd-field__error'); if (error_text) error_text.remove();if (!input.querySelector('input').value) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="b-change-passwd-field__error">${required_field}</div>`)}}if (errors) return;let data = new FormData(e.currentTarget); data.append('action', 'change-password');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) change_passwd_form.querySelector('.b-change-passwd-block').classList.add('result');else if (result.errorText) {for (const input of inputs) input.classList.add('error'),error.innerHTML = result.errorText}})}const reg_form = document.querySelector('.b-reg-form');if (reg_form) {const field_class = document.querySelector('.b-reg-field [name=class]').closest('.b-reg-field');document.querySelector('.b-reg-field [name=status]').addEventListener('change', e => {const follow_teacher = reg_form.querySelector('[name=follow-teacher]'), follow_teacher_wrapper = follow_teacher.closest('.b-reg-policy');e.currentTarget.value == 'school' ? field_class.classList.remove('hide') : field_class.classList.add('hide');if (e.currentTarget.value == 'teacher') {follow_teacher_wrapper.classList.remove('hide'),follow_teacher.checked = !0}else if (e.currentTarget.value == 'student' || e.currentTarget.value == 'other') {follow_teacher_wrapper.classList.remove('hide'),follow_teacher.checked = !1}else {follow_teacher_wrapper.classList.add('hide'),follow_teacher.checked = !1}});const input_country = document.querySelector('.b-reg-field [name=country]'), input_region = document.querySelector('.b-reg-field [name=region]');if (input_country) {const field_region = input_region.closest('.b-reg-field'), search_region = field_region.querySelector('.select-search'),input_city = document.querySelector('.b-reg-field [name=city]'), field_city = input_city.closest('.b-reg-field'), search_city = field_city.querySelector('.select-search');input_country.addEventListener('change', () => {field_region.classList.add('hide'), field_region.querySelector('.select').classList.remove('not-empty'), input_region.value = search_region.value = search_region.dataset.last = '',field_city.classList.add('hide'), field_city.querySelector('.select').classList.remove('not-empty'), input_city.value = search_city.value = search_city.dataset.last = '';if (input_country.value == '1') field_region.classList.remove('hide');})}if (input_region) {const input_city = document.querySelector('.b-reg-field [name=city]'), field_city = input_city.closest('.b-reg-field'), search_city = field_city.querySelector('.select-search');input_region.addEventListener('change', async () => {field_city.classList.add('hide'), field_city.querySelector('.select').classList.remove('not-empty'), input_city.value = search_city.value = search_city.dataset.last = '';let data = new FormData(); data.append('id', input_region.value), data.append('action', 'get-region');const response = await fetch('/data/', { method: 'post', body: data }), result = await response.json();if (result.cities && result.cities.length) {const list = field_city.querySelector('.b-reg-field__select-list'); list.innerHTML = '';for (const city of result.cities) list.insertAdjacentHTML('beforeend', `<span data-value="${city.id}">${city.name}</span>`);for (const vairable of list.querySelectorAll('span'))vairable.addEventListener('click', e => {const select = vairable.closest('.select'), value = select.querySelector('.select-value'), search = select.querySelector('.select-search'), val = select.querySelector('.select-val');if (value) value.innerHTML = e.currentTarget.textContent;if (e.currentTarget.textContent) select.classList.add('not-empty');search.value = e.currentTarget.textContent,search.dataset.last = e.currentTarget.textContent;select.classList.remove('open'),val.value = e.currentTarget.dataset.value || e.currentTarget.textContent,val.dispatchEvent(new Event('change'))});field_city.classList.remove('hide')}})}const policy = reg_form.querySelector('[for=b-reg-policy]'), policy_input = policy.querySelector('input');policy_input.addEventListener('change', () => policy.classList.remove('error'));reg_form.addEventListener('keydown', e => {if (e.keyCode == 13) e.preventDefault()}),reg_form.addEventListener('submit', async e => {e.preventDefault();const fields = reg_form.querySelectorAll('.b-reg-field:not(.hide)'),error = document.querySelector('.b-reg-error'); error.innerHTML = ''; let errors = !1;for (const field of fields) {const input = field.querySelector('.b-reg-field__input'),select = field.querySelector('.b-reg-field__select');if (input) {input.classList.remove('error');const error_text = input.querySelector('.b-reg-field__error'); if (error_text) error_text.remove();const val = input.querySelector('input');if (val.name == 'email') {if (!val.value) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="b-reg-field__error">${required_field}</div>`)}else if (!is_email(val.value)) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="b-reg-field__error">${incorrect_email}</div>`)}}else if (!val.value) {errors = !0,input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="b-reg-field__error">${required_field}</div>`)}}else if (select) {select.classList.remove('error');const error_text = select.querySelector('.b-reg-field__error'); if (error_text) error_text.remove();if (!select.querySelector('.select-val').value) {errors = !0,select.classList.add('error'),select.insertAdjacentHTML('beforeend', `<div class="b-reg-field__error select-error">${required_field}</div>`)}}}if (!policy_input.checked) {errors = !0,policy.classList.add('error')}if (errors) return;const inputs = reg_form.querySelectorAll('input'), button = reg_form.querySelector('button'), blockeds = reg_form.querySelectorAll('.hide input');for (const blocked of blockeds) blocked.disabled = !0; button.disabled = !0;let data = new FormData(e.currentTarget); for (const input of inputs) input.disabled = !0; data.append('action', 'register');const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.status) location.reload();else if (result.errorText) error.innerHTML = result.errorText;for (const input of inputs) input.disabled = !1;button.disabled = !1})};const review_template = item => {let photo = item.avatar;if (item.deleted) photo = '/static/img/deleted-ava.png';else if (item.isModerator) photo = '/static/img/moderator-ava.png';let name = '<div class="b-comment-item-name-deleted">\u0410\u0432\u0442\u043e\u0440 \u0443\u0434\u0430\u043b\u0438\u043b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439</div>';if (!item.deleted) {if (item.isModerator) name = '<div class="b-comment-item-moderator"><div class="b-comment-item-name-moderator">AI Academy</div><div class="b-comment-item-desc-moderator">\u041c\u043e\u0434\u0435\u0440\u0430\u0442\u043e\u0440</div></div>';else name = `<div class="b-comment-item-name">${item.authorName || ''}</div>`};let body = '<div class="b-comment-item-text-deleted">\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0443\u0434\u0430\u043b\u0451\u043d</div>';if (!item.deleted) {let images = '', liked = item.liked ? ' active' : '', likes = item.likes > 0 ? item.likes : '', answer = '', author = '';if (item.images.length) {images += '<div class="b-comment-item-images">';for (const image of item.images) images += `<img src="${image.src}?>" data-image-id="${image.id}">`;images += '</div>'}if (!item.answersNum) answer = ' style="display:none"';if (item.isAuthor) author = '<div class="b-comment-item-author"><div class="b-comment-item-author-element b-comment-item-edit"><svg x="0px" y="0px" width="30" height="30" viewBox="0,0,256,256"><g transform="translate(-25.6,-25.6) scale(1.2,1.2)"><g fill="currentColor" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(8.53333,8.53333)"><path d="M22.82813,3c-0.51175,0 -1.02356,0.19544 -1.41406,0.58594l-2.41406,2.41406l5,5l2.41406,-2.41406c0.781,-0.781 0.781,-2.04713 0,-2.82812l-2.17187,-2.17187c-0.3905,-0.3905 -0.90231,-0.58594 -1.41406,-0.58594zM17,8l-11.74023,11.74023c0,0 0.91777,-0.08223 1.25977,0.25977c0.342,0.342 0.06047,2.58 0.48047,3c0.42,0.42 2.64389,0.12436 2.96289,0.44336c0.319,0.319 0.29688,1.29688 0.29688,1.29688l11.74023,-11.74023zM4,23l-0.94336,2.67188c-0.03709,0.10544 -0.05623,0.21635 -0.05664,0.32813c0,0.55228 0.44772,1 1,1c0.11177,-0.00041 0.22268,-0.01956 0.32813,-0.05664c0.00326,-0.00128 0.00652,-0.00259 0.00977,-0.00391l0.02539,-0.00781c0.00196,-0.0013 0.00391,-0.0026 0.00586,-0.00391l2.63086,-0.92773l-1.5,-1.5z"></path></g></g></g></svg></div><div class="b-comment-item-author-element b-comment-item-delete"><svg x="0px" y="0px" width="30" height="30" viewBox="0,0,256,256"><g transform="translate(-25.6,-25.6) scale(1.2,1.2)"><g fill="currentColor" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(8.53333,8.53333)"><path d="M14.98438,2.48633c-0.55152,0.00862 -0.99193,0.46214 -0.98437,1.01367v0.5h-5.5c-0.26757,-0.00363 -0.52543,0.10012 -0.71593,0.28805c-0.1905,0.18793 -0.29774,0.44436 -0.29774,0.71195h-1.48633c-0.36064,-0.0051 -0.69608,0.18438 -0.87789,0.49587c-0.18181,0.3115 -0.18181,0.69676 0,1.00825c0.18181,0.3115 0.51725,0.50097 0.87789,0.49587h18c0.36064,0.0051 0.69608,-0.18438 0.87789,-0.49587c0.18181,-0.3115 0.18181,-0.69676 0,-1.00825c-0.18181,-0.3115 -0.51725,-0.50097 -0.87789,-0.49587h-1.48633c0,-0.26759 -0.10724,-0.52403 -0.29774,-0.71195c-0.1905,-0.18793 -0.44836,-0.29168 -0.71593,-0.28805h-5.5v-0.5c0.0037,-0.2703 -0.10218,-0.53059 -0.29351,-0.72155c-0.19133,-0.19097 -0.45182,-0.29634 -0.72212,-0.29212zM6,9l1.79297,15.23438c0.118,1.007 0.97037,1.76563 1.98438,1.76563h10.44531c1.014,0 1.86538,-0.75862 1.98438,-1.76562l1.79297,-15.23437z"></path></g></g></g></svg></div></div>';body = `<div class="b-comment-item-html"><div class="b-comment-item-text">${item.commentText}</div>${images}</div><div class="b-comment-item-buttons"><div class="b-comment-item-panel"><span class="b-comment-item-like${liked}"><span class="b-comment-item-like-button"><svg width="19" height="18" viewBox="0 0 19 18" fill="none"><path d="M5 8V16C5 16.2652 4.89464 16.5196 4.70711 16.7071C4.51957 16.8946 4.26522 17 4 17H2C1.73478 17 1.48043 16.8946 1.29289 16.7071C1.10536 16.5196 1 16.2652 1 16V9C1 8.73478 1.10536 8.48043 1.29289 8.29289C1.48043 8.10536 1.73478 8 2 8H5ZM5 8C6.06087 8 7.07828 7.57857 7.82843 6.82843C8.57857 6.07828 9 5.06087 9 4V3C9 2.46957 9.21071 1.96086 9.58579 1.58579C9.96086 1.21071 10.4696 1 11 1C11.5304 1 12.0391 1.21071 12.4142 1.58579C12.7893 1.96086 13 2.46957 13 3V8H16C16.5304 8 17.0391 8.21071 17.4142 8.58579C17.7893 8.96086 18 9.46957 18 10L17 15C16.8562 15.6135 16.5834 16.1402 16.2227 16.501C15.8619 16.8617 15.4328 17.0368 15 17H8C7.20435 17 6.44129 16.6839 5.87868 16.1213C5.31607 15.5587 5 14.7956 5 14" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round"/></svg></span><span class="b-comment-item-like-count">${likes}</span></span>${author}<span class="b-comment-item-reply">Ответить</span></div><div class="b-comment-item-subs"${answer}><span class="b-comment-subs-toggle"><span class="b-comment-subs-arrow"><svg width="14" height="8" viewBox="0 0 14 8" fill="none"><path d="M1 1L7 7L13 1" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></span><span class="b-comment-subs-text${item.isAuthor ? ' b-comment-subs-text-autor' : ''}"><span>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u044b</span><span>\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u044b</span></span></span></div></div>`};const div = document.createElement('div');div.classList = 'b-comment-item',div.dataset.commentId = item.id,div.innerHTML = `<div class="b-comment-item-info"><div class="b-comment-item-photo"><img src="${photo}"></div><div class="b-comment-item-wrapper"> ${name}<div class="b-comment-item-date">${item.creationDate}</div></div></div><div class="b-comment-item-body">${body}</div><div class="b-comment-subs b-comment-subs-hidden"></div>`;return div},load_couses_data = async url => {let data = new FormData(); data.append('loading_page', 'y');try {history.pushState({ url: url }, '', url);const response = await fetch(url, { method: 'post', body: data });return await response.json();}catch (e) {location.href = url}},load_couses_page = async url => {try {const result = await load_couses_data(url);document.querySelector('.b-welcome').innerHTML = result.welcome,document.querySelector('.b-menu').innerHTML = result.menu,document.querySelector('.b-content').innerHTML = result.content,app.classList.remove('open-dir'),window.scroll({ top: document.querySelector('.b-body').offsetTop - header.clientHeight, behavior: 'smooth' });events_couses_page()}catch (e) {location.href = url}},update_couses_data = async () => {try {const result = await load_couses_data(location.pathname);document.querySelector('.b-welcome').innerHTML = result.welcome,document.querySelector('.b-menu').innerHTML = result.menu;if (result.counts) document.querySelector('.b-content-header__detail-count').innerHTML = result.counts;events_couses_page(!0)}catch (e) {location.href = url}},events_couses_page = (update = !1) => {const menu_dir = document.querySelector('.b-menu-dir');if (menu_dir) {for (const link of menu_dir.querySelectorAll('.b-dir-arrow span'))link.onclick = e => {e.preventDefault(),e.stopPropagation(),e.target.closest('.b-dir-path').classList.toggle('open')};for (const link of menu_dir.querySelectorAll('.b-sub-arrow span'))link.onclick = e => {e.preventDefault(),e.stopPropagation(),e.target.closest('.b-sub').classList.toggle('open')};for (const link of menu_dir.querySelectorAll('a'))link.onclick = e => {e.preventDefault(),load_couses_page(link.getAttribute('href'))};for (const link of document.querySelectorAll('.b-content-item a'))link.onclick = e => {e.preventDefault(),load_couses_page(link.getAttribute('href'))};document.querySelector('.b-menu-button').onclick = () => app.classList.toggle('open-dir'),document.querySelector('.b-menu-close').onclick = () => app.classList.toggle('open-dir');};if (!update) {const faq_list = document.querySelectorAll('.b-content-faq__item');if (faq_list) for (const faq of faq_list) faq.querySelector('.b-content-faq__header').addEventListener('click', () => faq.classList.toggle('b-content-faq__active'));const next_button = document.querySelector('.b-content-button a');if (next_button) next_button.onclick = e => {e.preventDefault(),load_couses_page(e.target.getAttribute('href'))};for (const title of document.querySelectorAll('.b-content-detail .note b, .b-content-detail .note strong'))if (title.innerHTML.indexOf('\u0412\u0430\u0436\u043d\u043e') >= 0) title.classList.add('note-title');for (const task of document.querySelectorAll('.b-task-element')) {const task_start = task.querySelector('.b-task-start'),task_list = task.querySelector('.b-task-list');for (const task_frame of task.querySelectorAll('.b-task-item-frame')) {if (task_frame.dataset.docker) {task_frame.innerHTML = `<iframe src="/data/task/docker/${task_frame.dataset.docker}/"></iframe>`;} else {task_frame.innerHTML = `<iframe src="/data/task/?i=${task_frame.dataset.i}&l=${task_frame.dataset.l}&t=${task_frame.dataset.t}"></iframe>`;}}if (task_start) task_start.querySelector('.b-task-start-button span').onclick = () => {task_start.style.display = 'none',task_list.style.display = 'block'};};for (const test of document.querySelectorAll('.b-test-element')) {const test_start = test.querySelector('.b-test-start'),test_list = test.querySelector('.b-test-list'),test_end = test.querySelector('.b-test-end'),test_note = test.querySelector('.b-test-end-note'),test_restart = test.querySelector('.b-test-end-back');test_note.onclick = async e => {const modal = document.createElement('div');modal.classList = 'b-test-modal',modal.innerHTML = `<div class="b-test-modal-wrapper"><div class="b-test-modal-content"><div class="b-test-modal-label"><span>\u0422\u0435\u0441\u0442</span></div><div class="b-test-modal-title">\u041f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430</div><div class="b-test-modal-html"></div></div><div class="b-test-modal-close"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M6 6L18 18" stroke="#28343E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M18 6L6 18" stroke="#28343E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div>`,modal.addEventListener('click', e => {if (!modal.querySelector('.b-test-modal-content').contains(e.target)) {modal.remove(),document.body.style.overflow = 'auto'}}),modal.querySelector('.b-test-modal-close').addEventListener('click', () => {modal.remove(),document.body.style.overflow = 'auto'});const response = await fetch(`/ajax/getTestHelp.php?test_id=${e.target.dataset.testId}`),result = await response.json();modal.querySelector('.b-test-modal-html').innerHTML = result.content,document.body.style.overflow = 'hidden',app.insertAdjacentElement('beforeend', modal)},test_restart.onclick = () => {test_note.style.display = 'none',test_start.style.display = 'none',test_end.style.display = 'none',test_list.style.display = 'block',test_end.querySelector('.b-test-item-name span').innerHTML = '0',test_end.querySelector('.b-test-item-text').innerHTML = '';if (window.matchMedia('(max-width: 1279px)').matches) window.scroll({ top: test.offsetTop - header.clientHeight, behavior: 'smooth' })},test_start.querySelector('.b-test-start-button span').onclick = () => {test_start.style.display = 'none',test_end.style.display = 'none',test_list.style.display = 'block'};for (const checkbox of test_list.querySelectorAll('.b-test-item-checkbox-input'))checkbox.onchange = e => {const item = e.target.closest('.b-test-item');item.querySelectorAll('input:checked').length ? item.classList.add('b-test-item-validate') : item.classList.remove('b-test-item-validate')};for (const textarea of test_list.querySelectorAll('textarea'))textarea.oninput = e => {const item = e.target.closest('.b-test-item');e.target.value ? item.classList.add('b-test-item-validate') : item.classList.remove('b-test-item-validate')};for (const next of test_list.querySelectorAll('.b-test-item-button-next'))next.onclick = e => {const item = e.target.closest('.b-test-item');if (item.classList.contains('b-test-item-validate')) {const next_element = item.nextElementSibling;if (next_element) {item.style.display = 'none',next_element.style.display = 'block';if (window.matchMedia('(max-width: 1279px)').matches) window.scroll({ top: test.offsetTop - header.clientHeight, behavior: 'smooth' })}}};for (const prev of test_list.querySelectorAll('.b-test-item-button-back'))prev.onclick = e => {const item = e.target.closest('.b-test-item'),prev_element = item.previousElementSibling;if (prev_element) {item.style.display = 'none',prev_element.style.display = 'block';if (window.matchMedia('(max-width: 1279px)').matches) window.scroll({ top: test.offsetTop - header.clientHeight, behavior: 'smooth' })}};for (const button of test_list.querySelectorAll('.b-test-item-button-end'))button.onclick = async e => {const item = e.target.closest('.b-test-item');if (item.classList.contains('b-test-item-validate')) {test.style.pointerEvents = 'none';let data = new FormData(e.target.closest('form'));const response = await fetch('/ajax/checkTest.php', { method: 'post', body: data }),result = await response.json();test_start.style.display = 'none',test_list.style.display = 'none',test_end.style.display = 'block',test_end.querySelector('.b-test-item-name span').innerHTML = result.right_answers,test_end.querySelector('.b-test-item-text').innerHTML = result.feedback,test.style.pointerEvents = 'auto';for (const test_item of test_list.querySelectorAll('.b-test-item')) {test_item.style.display = 'none',test_item.classList.remove('b-test-item-validate');for (const input of test_item.querySelectorAll('input:checked')) input.checked = !1;for (const textarea of test_item.querySelectorAll('textarea')) textarea.value = '';};test_list.querySelector('.b-test-item-first').style.display = 'block';if (result.need_help) test_note.style.display = 'inline-block';if (window.matchMedia('(max-width: 1279px)').matches) window.scroll({ top: test.offsetTop - header.clientHeight, behavior: 'smooth' });update_couses_data()}}};for (const question of document.querySelectorAll('.b-question-element')) {const question_start = question.querySelector('.b-question-start'),question_list = question.querySelector('.b-question-list');if (question_start) question_start.querySelector('.b-question-start-button span').onclick = () => {question_start.style.display = 'none',question_list.style.display = 'block'};for (const item of question.querySelectorAll('.b-question-item')) {const input = item.querySelector('.b-question-input'), i = input.querySelector('input'), ask_button = item.querySelector('.b-question-ask');i.addEventListener('input', e => {e.currentTarget.value ? item.classList.add('b-question-item-validate') : item.classList.remove('b-question-item-validate');const error_text = input.querySelector('.b-question-input__error'); if (error_text) error_text.remove();}),i.addEventListener('focus', () => {input.classList.add('focus'),input.classList.remove('error');const error_text = input.querySelector('.b-question-input__error'); if (error_text) error_text.remove();}),i.addEventListener('blur', e => {if (e.currentTarget.name !== 'password') e.currentTarget.value = e.currentTarget.value.trim();if (e.currentTarget.value) input.classList.add('not-empty'); else input.classList.remove('not-empty');input.classList.remove('focus'),e.currentTarget.value ? item.classList.add('b-question-item-validate') : item.classList.remove('b-question-item-validate');const error_text = input.querySelector('.b-question-input__error'); if (error_text) error_text.remove();}),item.querySelector('.b-question-send').onclick = async () => {if (!item.classList.contains('b-question-item-validate')) return;input.classList.remove('error');const error_text = input.querySelector('.b-question-input__error'); if (error_text) error_text.remove();item.style.pointerEvents = 'none';let data = new FormData();data.append('action', 'sendAnswer'),data.append('answer', i.value),data.append('question_id', i.dataset.question);const response = await fetch('/ajax/openAnswer/', { method: 'post', body: data }),result = await response.json();item.style.pointerEvents = 'auto';if (result.success) {item.classList.add('b-question-item-done'),i.setAttribute('readonly', 'readonly'),input.insertAdjacentHTML('beforeend', `<div class="b-question-input-done">\u0412\u0435\u0440\u043d\u043e!</div>`)} else {if (result.showHint) ask_button.style.display = 'inline-block';input.classList.add('error'),input.insertAdjacentHTML('beforeend', `<div class="b-question-input__error">\u041d\u0435\u0432\u0435\u0440\u043d\u043e, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0442\u0432\u0435\u0442</div>`)}},ask_button.onclick = async () => {const modal = document.createElement('div');modal.classList = 'b-test-modal',modal.innerHTML = `<div class="b-test-modal-wrapper"><div class="b-test-modal-content"><div class="b-test-modal-label"><span>\u041e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441</span></div><div class="b-test-modal-title">\u041e\u0442\u0432\u0435\u0442</div><div class="b-test-modal-html test-result__question-main"></div></div><div class="b-test-modal-close"><svg width="24" height="24" viewBox="0 0 24 24" fill="none"><path d="M6 6L18 18" stroke="#28343E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M18 6L6 18" stroke="#28343E" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div>`,modal.addEventListener('click', e => {if (!modal.querySelector('.b-test-modal-content').contains(e.target)) {modal.remove(),document.body.style.overflow = 'auto'}}),modal.querySelector('.b-test-modal-close').addEventListener('click', () => {modal.remove(),document.body.style.overflow = 'auto'});const response = await fetch(`/ajax/openAnswer/?action=getHint&question_id=${i.dataset.question}`),result = await response.json();modal.querySelector('.b-test-modal-html').innerHTML = result.help,document.body.style.overflow = 'hidden',app.insertAdjacentElement('beforeend', modal)}}};const lesson_check = document.querySelector('.b-lesson-check');if (lesson_check) {setTimeout(() => {const lesson_check_observe = new IntersectionObserver(entries => entries.map(async entry => {if (!entry.isIntersecting) return !1;lesson_check_observe.disconnect();let data = new FormData();data.append('action', 'lesson-check'),data.append('one', lesson_check.dataset.one),data.append('two', lesson_check.dataset.two);const response = await fetch('/data/', { method: 'post', body: data });await response.json(),update_couses_data()}), { threshold: [1] });lesson_check_observe.observe(lesson_check)}, 1000)};const comment_form = document.querySelector('.b-comments-add form');if (comment_form) {const input = comment_form.querySelector('.b-comments-add-input input'),files_block = comment_form.querySelector('.b-comments-add-attachs'),file = comment_form.querySelector('.b-comments-add-file input'),error = comment_form.querySelector('.b-comments-add-error');comment_form.onsubmit = async e => {const files = files_block.querySelectorAll('.b-comments-add-attach');e.preventDefault(),error.innerHTML = '';if (!input.value && !files.length) return error.innerHTML = '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438';comment_form.style.pointerEvents = 'none';let data = new FormData(e.currentTarget); data.append('action', 'add');const response = await fetch('/ajax/comments/', { method: 'post', body: data }),result = await response.json();comment_form.style.pointerEvents = 'auto';if (result.errors) return error.innerHTML = result.errors.join('<br>');files_block.innerHTML = '',input.value = '';if (result.comments.length) for (const item of result.comments) document.querySelector('.b-comments-list').insertAdjacentElement('afterbegin', review_template(item))},input.oninput = () => error.innerHTML = '';file.onchange = async () => {error.innerHTML = '';if (!file.files.length) return;file.style.pointerEvents = 'none';for (const item of file.files) {const div = document.createElement('div'), div_input = document.createElement('input'), data = new DataTransfer(), reader = new FileReader();div.classList = 'b-comments-add-attach',div.innerHTML = `<div class="b-comments-add-attach-preview"><img src=""></div><div class="b-comments-add-attach-remove"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13 1L1 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>`,data.items.add(item),div_input.name = 'files[]',div_input.type = 'file',div_input.files = data.files,div.querySelector('.b-comments-add-attach-preview img').src = await new Promise(resolve => {reader.onloadend = () => resolve(reader.result),reader.readAsDataURL(item)}),div.insertAdjacentElement('beforeend', div_input),files_block.insertAdjacentElement('beforeend', div)};file.value = '',file.style.pointerEvents = 'auto';}}};document.querySelectorAll('[data-fn]:not(.installed-fn)').forEach(a => {katex.render(a.dataset.fn, a, {throwOnError: false});a.classList.add('installed')})};events_couses_page(),window.addEventListener('popstate', e => load_couses_page(e.state.url)),window.addEventListener('message', e => {if (e.data == 'update_couses_data') update_couses_data()});function set_cookie(name, value, days) {let expires = '';if (days) {let date = new Date();date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)),expires = '; expires=' + date.toUTCString()}document.cookie = name + '=' + (value || '') + expires + '; path=/';}function get_cookie(name) {name = name + '=';let ca = document.cookie.split(';');for (let i = 0; i < ca.length; i++) {let c = ca[i];while (c.charAt(0) == ' ') c = c.substring(1, c.length);if (c.indexOf(name) == 0) return c.substring(name.length, c.length)}return null;}if (!get_cookie('__cookie')) {const cookie_popup = app.querySelector('.b-cookies-popup');cookie_popup.style.display = 'block';cookie_popup.style.opacity = '1',cookie_popup.style.visibility = 'visible',cookie_popup.querySelector('span').onclick = () => {set_cookie('__cookie', !0, 365),cookie_popup.style.opacity = '0',cookie_popup.style.visibility = 'hidden',move(cookie_popup);}}if (!get_cookie('__minc')) {}function move(elem) {var height = elem.getBoundingClientRect().height / 1.3;function frame() {height--;elem.style.height = height + 'px';if (height <= 0) clearInterval(id)}var id = setInterval(frame, 1 / 1000)}document.addEventListener('click', async e => {const like = e.target.closest('.b-comment-item-like');if (like) {const count = like.querySelector('.b-comment-item-like-count');like.style.pointerEvents = 'none',like.classList.toggle('active');if (like.classList.contains('active')) count.innerHTML = Number(count.innerHTML) + 1;else {let value = Number(count.innerHTML) - 1;if (value < 1) value = '';count.innerHTML = value}let data = new FormData(); data.append('action', 'toggleLike'), data.append('comment_id', like.closest('.b-comment-item').dataset.commentId);const response = await fetch('/ajax/comments/', { method: 'post', body: data });await response.json(),like.style.pointerEvents = 'auto'}if (e.target.closest('.b-comments-toggle')) document.querySelector('.b-comments').classList.toggle('b-comments-show');const comment_arrach_remove = e.target.closest('.b-comments-add-attach-remove');if (comment_arrach_remove) {const attach = comment_arrach_remove.closest('.b-comments-add-attach'),remove = attach.querySelector('[data-remove-id]');if (remove) {const deleted_image = document.createElement('input');deleted_image.type = 'hidden',deleted_image.name = 'deleted_image',deleted_image.value = remove.dataset.removeId,attach.closest('form').append(deleted_image)};attach.remove()};const comment_reply = e.target.closest('.b-comment-item-reply');if (comment_reply) {const comment = comment_reply.closest('.b-comment-item'),body = comment_reply.closest('.b-comment-item-body'),subs = body.nextElementSibling;let comment_edit_block = body.querySelector('.b-comment-item-edit-block');if (comment_edit_block) comment_edit_block.remove();let comment_reply_block = body.querySelector('.b-comment-item-reply-block');if (comment_reply_block) return comment_reply_block.remove();const div = document.createElement('div');div.classList = 'b-comment-item-reply-block',div.append(document.querySelector('.b-comments-add').cloneNode(!0));const comment_form = div.querySelector('form'),input = comment_form.querySelector('.b-comments-add-input input'),files_block = comment_form.querySelector('.b-comments-add-attachs'),file = comment_form.querySelector('.b-comments-add-file input'),error = comment_form.querySelector('.b-comments-add-error'); dataseterror.innerHTML = '',files_block.innerHTML = '',input.value = '',comment_form.style.pointerEvents = 'auto';comment_form.onsubmit = async e => {const files = files_block.querySelectorAll('.b-comments-add-attach');e.preventDefault(),error.innerHTML = '';if (!input.value && !files.length) return error.innerHTML = '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438';comment_form.style.pointerEvents = 'none';let data = new FormData(e.currentTarget); data.append('action', 'add'), data.append('answerForId', comment.dataset.commentId);let response = await fetch('/ajax/comments/', { method: 'post', body: data }),result = await response.json();comment_form.style.pointerEvents = 'auto';if (result.errors) return error.innerHTML = result.errors.join('<br>');files_block.innerHTML = '',input.value = '';data = new FormData(); data.append('action', 'load'), data.append('parent_id', comment.dataset.commentId);response = await fetch('/ajax/comments/', { method: 'post', body: data }),result = await response.json();subs.innerHTML = '';for (const item of result.comments) subs.insertAdjacentElement('beforeend', review_template(item));subs.classList.add('b-comment-subs-loaded'),subs.classList.remove('b-comment-subs-hidden');const comment_toggle = body.querySelector('.b-comment-item-subs');comment_toggle.style.display = 'block',comment_toggle.querySelector('.b-comment-subs-toggle').classList.add('b-comment-subs-toggle-show'),div.remove()},input.oninput = () => error.innerHTML = '';file.onchange = async () => {error.innerHTML = '';if (!file.files.length) return;file.style.pointerEvents = 'none';for (const item of file.files) {const div = document.createElement('div'), div_input = document.createElement('input'), data = new DataTransfer(), reader = new FileReader();div.classList = 'b-comments-add-attach',div.innerHTML = `<div class="b-comments-add-attach-preview"><img src=""></div><div class="b-comments-add-attach-remove"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13 1L1 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>`,data.items.add(item),div_input.name = 'files[]',div_input.type = 'file',div_input.files = data.files,div.querySelector('.b-comments-add-attach-preview img').src = await new Promise(resolve => {reader.onloadend = () => resolve(reader.result),reader.readAsDataURL(item)}),div.insertAdjacentElement('beforeend', div_input),files_block.insertAdjacentElement('beforeend', div)};file.value = '',file.style.pointerEvents = 'auto';},body.insertAdjacentElement('beforeend', div),input.focus()};const comment_edit = e.target.closest('.b-comment-item-edit');if (comment_edit) {const comment = comment_edit.closest('.b-comment-item'),body = comment_edit.closest('.b-comment-item-body'),subs = body.nextElementSibling;let comment_reply_block = body.querySelector('.b-comment-item-reply-block');if (comment_reply_block) comment_reply_block.remove();let comment_edit_block = body.querySelector('.b-comment-item-edit-block');if (comment_edit_block) return comment_edit_block.remove();const div = document.createElement('div');div.classList = 'b-comment-item-edit-block',div.append(document.querySelector('.b-comments-add').cloneNode(!0));const comment_form = div.querySelector('form'),input = comment_form.querySelector('.b-comments-add-input input'),files_block = comment_form.querySelector('.b-comments-add-attachs'),file = comment_form.querySelector('.b-comments-add-file input'),error = comment_form.querySelector('.b-comments-add-error'),images = body.querySelectorAll('.b-comment-item-images img');comment_form.querySelector('.b-comments-add-button button').innerHTML = '\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c',error.innerHTML = '',files_block.innerHTML = '',input.value = body.querySelector('.b-comment-item-text').innerText || '',comment_form.style.pointerEvents = 'auto';if (images) for (const image of images) {const div = document.createElement('div');div.classList = 'b-comments-add-attach',div.innerHTML = `<div class="b-comments-add-attach-preview"><img src="${image.src}" data-remove-id="${image.dataset.imageId}"></div><div class="b-comments-add-attach-remove"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13 1L1 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>`,files_block.insertAdjacentElement('beforeend', div)};const deleted_images = document.createElement('input');deleted_images.type = 'hidden',deleted_images.name = 'deleted_images',comment_form.append(deleted_images),comment_form.onsubmit = async e => {const files = files_block.querySelectorAll('.b-comments-add-attach');e.preventDefault(),error.innerHTML = '';if (!input.value && !files.length) return error.innerHTML = '\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0442\u0435\u043a\u0441\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438';const deleted_image = comment_form.querySelectorAll('input[name=deleted_image]');if (deleted_image.length) {let deleted_image_array = [];for (const image of deleted_image) deleted_image_array.push(image.value);if (deleted_image_array.length) deleted_images.value = deleted_image_array.join(',');};comment_form.style.pointerEvents = 'none';let data = new FormData(e.currentTarget); data.append('action', 'update'), data.append('comment_id', comment.dataset.commentId);let response = await fetch('/ajax/comments/', { method: 'post', body: data }),result = await response.json();comment_form.style.pointerEvents = 'auto';if (result.errors) return error.innerHTML = result.errors.join('<br>');let images = '';if (result.comment.images.length) {images += '<div class="b-comment-item-images">';for (const image of result.comment.images) images += `<img src="${image.src}?>" data-image-id="${image.id}">`;images += '</div>'};body.querySelector('.b-comment-item-html').innerHTML = `<div class="b-comment-item-text">${result.comment.text}</div>${images}`,files_block.innerHTML = '',input.value = '',div.remove()},input.oninput = () => error.innerHTML = '';file.onchange = async () => {error.innerHTML = '';if (!file.files.length) return;file.style.pointerEvents = 'none';for (const item of file.files) {const div = document.createElement('div'), div_input = document.createElement('input'), data = new DataTransfer(), reader = new FileReader();div.classList = 'b-comments-add-attach',div.innerHTML = `<div class="b-comments-add-attach-preview"><img src=""></div><div class="b-comments-add-attach-remove"><svg width="14" height="14" viewBox="0 0 14 14" fill="none"><path d="M1 1L13 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><path d="M13 1L1 13" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/></svg></div>`,data.items.add(item),div_input.name = 'files[]',div_input.type = 'file',div_input.files = data.files,div.querySelector('.b-comments-add-attach-preview img').src = await new Promise(resolve => {reader.onloadend = () => resolve(reader.result),reader.readAsDataURL(item)}),div.insertAdjacentElement('beforeend', div_input),files_block.insertAdjacentElement('beforeend', div)};file.value = '',file.style.pointerEvents = 'auto';},body.insertAdjacentElement('beforeend', div),input.focus()};const comment_delete = e.target.closest('.b-comment-item-delete');if (comment_delete) {const comment = comment_delete.closest('.b-comment-item'),body = comment_delete.closest('.b-comment-item-body'),info = body.previousElementSibling,moderator = info.querySelector('.b-comment-item-moderator'),name = info.querySelector('.b-comment-item-name'),div = document.createElement('div');div.innerHTML = '\u0410\u0432\u0442\u043e\u0440 \u0443\u0434\u0430\u043b\u0438\u043b \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439',div.classList = 'b-comment-item-name-deleted';comment_delete.style.pointerEvents = 'none';let data = new FormData(); data.append('action', 'delete'), data.append('comment_id', comment.dataset.commentId);let response = await fetch('/ajax/comments/', { method: 'post', body: data });await response.json(),comment_delete.style.pointerEvents = 'auto';if (moderator) moderator.remove();if (name) name.remove();info.querySelector('.b-comment-item-photo img').src = '/static/img/deleted-ava.png',info.querySelector('.b-comment-item-wrapper').insertAdjacentElement('afterbegin', div),body.innerHTML = '<div class="b-comment-item-text-deleted">\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0443\u0434\u0430\u043b\u0451\u043d</div>',body.nextElementSibling.remove()};const comment_toggle = e.target.closest('.b-comment-subs-toggle');if (comment_toggle) {const comment = e.target.closest('.b-comment-item'),subs = comment.querySelector('.b-comment-subs');(async () => {if (!subs.classList.contains('b-comment-subs-loaded')) {comment_toggle.style.pointerEvents = 'none';let data = new FormData(); data.append('action', 'load'), data.append('parent_id', comment.dataset.commentId);const response = await fetch('/ajax/comments/', { method: 'post', body: data }),result = await response.json();for (const item of result.comments) subs.insertAdjacentElement('beforeend', review_template(item));comment_toggle.style.pointerEvents = 'auto'}comment_toggle.classList.toggle('b-comment-subs-toggle-show'),subs.classList.toggle('b-comment-subs-hidden'),subs.classList.add('b-comment-subs-loaded')})()}});document.addEventListener('click', (e) => {if (e.target.closest("#vk_community_messages")) {}});let asyncStatus; const asynchronous = () => {if (asyncStatus) return !1; asyncStatus = !0;const loading = document.querySelectorAll('[data-loading]');if (loading.length)for (const block of loading) {(async () => {let data = new FormData(); data.append('action', 'loading-' + block.dataset.loading);const response = await fetch('/data/', { method: 'post', body: data }),result = await response.json();if (result.html) {block.innerHTML = result.html,sliders()}})()};const sliders = async () => {const sliders = document.querySelectorAll('.s:not(.si)');if (sliders.length) {const swiper = (await import('./libs/swiper.min.js')).Swiper;for (const slider of sliders) {slider.classList.add('si');const pagination = slider.dataset.pagination ? {el: slider.querySelector('.sn'),type: 'fraction',} : {bulletClass: 'sni',bulletActiveClass: 'sna',el: slider.querySelector('.sn'),clickable: !0};let slider_params = {slidesPerView: 'auto',wrapperClass: 'sw',slideClass: 'ss',slideActiveClass: 'ssa',slidePrevClass: 'ssp',slideNextClass: 'ssn',grabCursor: !0,rewind: slider.dataset.norewind ? !1 : !0,navigation: {disabledClass: 'sad',lockClass: 'sal',prevEl: slider.querySelector('.sap'),nextEl: slider.querySelector('.san')},pagination: pagination};if (slider.dataset.autoplay) slider_params.autoplay = { delay: slider.dataset.autoplay };new swiper(slider.querySelector('.sc'), slider_params)}const slider_events = document.querySelector('.se:not(.si)');if (slider_events) {slider_events.classList.add('si');let slider_events_state = null;const slider_events_wrapper = slider_events.querySelector('.sw'),slider_events_default = slider_events_wrapper.innerHTML,slider_events_match = window.matchMedia('(min-width: 1280px)'), slider_events_event = () => {if (slider_events_state) slider_events_state.destroy(!0, !0);slider_events_wrapper.innerHTML = slider_events_match.matches ? slider_events_groups : slider_events_default,slider_events_state = new swiper(slider_events.querySelector('.sc'), {slidesPerView: 'auto',wrapperClass: 'sw',slideClass: 'ss',slideActiveClass: 'ssa',slidePrevClass: 'ssp',slideNextClass: 'ssn',grabCursor: !0,rewind: !0,navigation: {lockClass: 'sal',prevEl: slider_events.querySelector('.sap'),nextEl: slider_events.querySelector('.san')}})};let slider_events_groups = '', groups = [], group = [];for (const slide of slider_events.querySelectorAll('.ss')) {const el = slide.cloneNode(!0);el.classList.remove('ss');if (slide.classList.contains('b-events-slider__slide-full')) {if (group.length) {groups.push(group), group = []}groups.push([el.outerHTML]);}else {if (group.length > 2) {groups.push(group), group = []}group.push(el.outerHTML)}}if (group.length) groups.push(group);if (groups.length) for (const group of groups) slider_events_groups += `<div class="b-events-slider__slide-group ss">${group.join('')}</div>`;slider_events_match.addEventListener('change', slider_events_event), slider_events_event()}}}; sliders();if (events_filter) {(async () => {const events_date = document.querySelector('.b-events-date'),events_date_picker = events_date.querySelector('.b-events-date__datepicker input'),events_date_select = events_date.querySelector('.b-events-date__select');await import('./libs/flatpickr.min.js'), await import('./libs/flatpickr.ru.js'),flatpickr(events_date_picker, {inline: !0,disableMobile: !0,mode: 'range',locale: 'ru',monthSelectorType: 'static',dateFormat: 'd.m.Y',onReady: function () {const year = document.createElement('div'); year.classList.add('flatpickr-year'), year.innerHTML = ', ' + this.currentYear,this.monthNav.querySelector('.flatpickr-current-month').appendChild(year)},onYearChange: function () {this.monthNav.querySelector('.flatpickr-year').innerHTML = ', ' + this.currentYear},onChange: function (dates) {events_date_select.querySelector('span').innerHTML = events_date_picker.value;if (dates.length > 1) {if (typeof ym !== 'undefined') {ym(45562839, 'reachGoal', 'Академия ИИ', {'Академия ИИ': {'Мероприятия': {'Фильтр - Дата': events_date_picker.value}}});}events_date.classList.remove('active'), filter()}},prevArrow: '<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M10.3335 12.6668L5.66683 8.00016L10.3335 3.3335" stroke="#878B90" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>',nextArrow: '<svg width="16" height="16" viewBox="0 0 16 16" fill="none"><path d="M5.6665 3.33317L10.3332 7.99984L5.6665 12.6665" stroke="#878B90" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path></svg>'}),events_date_select.addEventListener('click', () => events_date.classList.toggle('active')),document.addEventListener('click', e => {if (!events_date.contains(e.target)) events_date.classList.remove('active')})})()}(async a => {if (!a) return;await import('./libs/imask.min.js'),a.forEach(a => IMask(a, {mask: '+{7} (000) 000-00-00',lazy: !0}))})(document.querySelectorAll('.tel'))};if (`; ${document.cookie}`.split(`; _async=`).length !== 2) {document.cookie = `_async=1; path=/; max-age=31536000;`;if (document.documentElement.scrollTop || document.body.scrollTop) asynchronous();else {document.addEventListener('mouseover', () => asynchronous()), document.addEventListener('scroll', () => asynchronous()),setTimeout(asynchronous, 5000)}}else asynchronous();if (document.querySelectorAll('.b-mail-modal').length) {document.querySelector('.b-mail-modal-form form').addEventListener('submit', async (e) => {e.preventDefault();const errors = document.querySelector('.b-mail-modal-error');const button = document.querySelector('.b-mail-modal-button button');errors.innerHTML = '';button.disabled = !0;let data = new FormData(e.currentTarget);data.append('action', 'change-gmail');const response = await fetch('/data/', {method: 'post',body: data}),result = await response.json();if (result.reload) {location.reload();} else if (result.errorText) {errors.innerHTML = result.errorText;button.disabled = !1;}});};