(function(){ try {const reservationMenu = {};reservationMenu.style=`data:text/css;base64,QG1lZGlhKG1pbi13aWR0aDo2NDFweCl7I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudXt3aWR0aDo2MDBweDtib3gtc2l6aW5nOmJvcmRlci1ib3h9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bntib3JkZXI6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjQ7d2lkdGg6NTAlO2Zsb2F0OmxlZnQ7bWFyZ2luLXRvcDoxMHB4O2ZvbnQtc2l6ZToxZW07cGFkZGluZzowO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcn0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuIC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuLWljb257cG9zaXRpb246YWJzb2x1dGV9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiMyMzUyN2N9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bjpob3ZlciAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bi10ZXh0e2NvbG9yOiNmZmY7dGV4dC1zaGFkb3c6MCAxcHggMCAjMjY0MzdhfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4gLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4tdGV4dHtjb2xvcjojMjY0MzdhO2ZvbnQtc2l6ZToxLjE0M2VtO2ZvbnQtZmFtaWx5OnJvYm90b1NsYWI7Zm9udC13ZWlnaHQ6NTAwO3BhZGRpbmctdG9wOjIwcHg7cGFkZGluZy1ib3R0b206MjBweDtjb2xvcjojMjY0MzdhO3RleHQtc2hhZG93OjAgMXB4IDAgI2ZmZjt0cmFuc2l0aW9uOmNvbG9yIC4zcyBlYXNlIDBzO2xpbmUtaGVpZ2h0OjFlbX0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuIC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuLW9mZmxpbmV7ZGlzcGxheTpub25lO2ZvbnQtZmFtaWx5OiJSb2JvdG8iLHNhbnMtc2VyaWY7Zm9udC1zaXplOi44OGVtfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG5bZGlzYWJsZWQ9IiJde2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsMjQ0LDI0NCwuNSk7Y3Vyc29yOm5vdC1hbGxvd2VkfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG5bZGlzYWJsZWQ9IiJdIC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuLXRleHR7cGFkZGluZy1ib3R0b206NXB4O29wYWNpdHk6LjU7dGV4dC1zaGFkb3c6bm9uZX0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuW2Rpc2FibGVkPSIiXTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjQ0LDI0NCwyNDQsLjUpfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG5bZGlzYWJsZWQ9IiJdOmhvdmVyIC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuLXRleHR7Y29sb3I6IzI2NDM3YTt0ZXh0LXNoYWRvdzpub25lfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG5bZGlzYWJsZWQ9IiJdIC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuLW9mZmxpbmV7ZGlzcGxheTpibG9jaztwYWRkaW5nLWJvdHRvbToyMHB4O2NvbG9yOiM1NzU3NTc7b3BhY2l0eTouNn0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51ICNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUtZXJyb3J7d2lkdGg6NjAwcHg7YmFja2dyb3VuZC1jb2xvcjojYzg2OTY5O2NvbG9yOiNmZmY7cGFkZGluZzoxMHB4O3BhZGRpbmctbGVmdDoyMHB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvcGFjaXR5OjA7LXdlYmtpdC10cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGVhc2UtaW4tb3V0Oy1tb3otdHJhbnNpdGlvbjpvcGFjaXR5IC40cyBlYXNlLWluLW91dDstbXMtdHJhbnNpdGlvbjpvcGFjaXR5IC40cyBlYXNlLWluLW91dDstby10cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGVhc2UtaW4tb3V0O3RyYW5zaXRpb246b3BhY2l0eSAuNHMgZWFzZS1pbi1vdXQ7Zm9udC1mYW1pbHk6UnViaWs7dmlzaWJpbGl0eTpoaWRkZW59I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1tZW51LXZpc2libGUtZXJyb3J7dmlzaWJpbGl0eTp2aXNpYmxlICFpbXBvcnRhbnQ7b3BhY2l0eToxICFpbXBvcnRhbnR9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAjaXgtbWVudS12aWRlb3ttYXJnaW46MzBweCBhdXRvO3dpZHRoOjYwMHB4O21hcmdpbi1sZWZ0OjB9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtbWVudS1vZmZsaW5lLWxpbmV7Zm9udC1zaXplOi45OGVtO3RvcDo5MHB4O2xlZnQ6NTAlO21hcmdpbi10b3A6NXB4O2Rpc3BsYXk6bm9uZX0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51ICNpeC1leHQtbWVudS1idG4tY29udGFpbmVyIC5peC1tZW51LWJ0bnt3aWR0aDoxMDAlO2JhY2tncm91bmQ6I2VmZWZlZiAhaW1wb3J0YW50O2JvcmRlcjpub25lO21hcmdpbi10b3A6MTBweDtib3JkZXI6MnB4IHNvbGlkICMyNjQzN2E7Y29sb3I6IzI2NDM3YSAhaW1wb3J0YW50O2ZvbnQtc2l6ZToxLjE0M2VtO2hlaWdodDoxMjBweDtmbG9hdDpsZWZ0O2N1cnNvcjpwb2ludGVyO2JveC1zaXppbmc6Ym9yZGVyLWJveH0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51ICNpeC1leHQtbWVudS1idG4tY29udGFpbmVyIC5peC1tZW51LWJ0bjpudGgtY2hpbGQoMm4pe21hcmdpbi1sZWZ0OjB9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAjaXgtZXh0LW1lbnUtYnRuLWNvbnRhaW5lciAuaXgtbWVudS1idG5bZGlzYWJsZWRde2N1cnNvcjpub3QtYWxsb3dlZDtvcGFjaXR5Oi40fSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgI2l4LWV4dC1tZW51LWJ0bi1jb250YWluZXIgLml4LW1lbnUtYnRuW2Rpc2FibGVkXSAuaXgtbWVudS1vZmZsaW5lLWxpbmV7ZGlzcGxheTpibG9ja30jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IGgze3BhZGRpbmctdG9wOjIwcHg7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlfX1AbWVkaWEobWF4LXdpZHRoOjY0MHB4KXsjaXgtYm9va2luZy1leHRlcm5hbC1tZW51e3dpZHRoOjEwMCU7Ym94LXNpemluZzpib3JkZXItYm94fSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG57Ym9yZGVyOm5vbmU7YmFja2dyb3VuZC1jb2xvcjojZjRmNGY0O3dpZHRoOjEwMCU7ZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjEwcHg7Zm9udC1zaXplOjFlbTtwYWRkaW5nOjA7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4gLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4taWNvbntwb3NpdGlvbjphYnNvbHV0ZX0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzIzNTI3Y30jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuOmhvdmVyIC5peC1ib29raW5nLWV4dGVybmFsLW1lbnUtYnRuLXRleHR7Y29sb3I6I2ZmZjt0ZXh0LXNoYWRvdzowIDFweCAwICMyNjQzN2F9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0biAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bi10ZXh0e2NvbG9yOiMyNjQzN2E7Zm9udC1zaXplOjEuMTQzZW07Zm9udC1mYW1pbHk6cm9ib3RvU2xhYjtmb250LXdlaWdodDo1MDA7cGFkZGluZy10b3A6MjBweDtwYWRkaW5nLWJvdHRvbToyMHB4O2NvbG9yOiMyNjQzN2E7dGV4dC1zaGFkb3c6MCAxcHggMCAjZmZmO3RyYW5zaXRpb246Y29sb3IgLjNzIGVhc2UgMHM7bGluZS1oZWlnaHQ6MWVtfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4gLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4tb2ZmbGluZXtkaXNwbGF5Om5vbmU7Zm9udC1mYW1pbHk6IlJvYm90byIsc2Fucy1zZXJpZjtmb250LXNpemU6Ljg4ZW19I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bltkaXNhYmxlZD0iIl17YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI0NCwyNDQsMjQ0LC41KTtjdXJzb3I6bm90LWFsbG93ZWR9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bltkaXNhYmxlZD0iIl0gLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4tdGV4dHtwYWRkaW5nLWJvdHRvbTo1cHg7b3BhY2l0eTouNTt0ZXh0LXNoYWRvdzpub25lfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG5bZGlzYWJsZWQ9IiJdOmhvdmVye2JhY2tncm91bmQtY29sb3I6cmdiYSgyNDQsMjQ0LDI0NCwuNSl9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bltkaXNhYmxlZD0iIl06aG92ZXIgLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4tdGV4dHtjb2xvcjojMjY0MzdhO3RleHQtc2hhZG93Om5vbmV9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAuaXgtYm9va2luZy1leHRlcm5hbC1tZW51LWJ0bltkaXNhYmxlZD0iIl0gLml4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1idG4tb2ZmbGluZXtkaXNwbGF5OmJsb2NrO3BhZGRpbmctYm90dG9tOjIwcHg7Y29sb3I6IzU3NTc1NztvcGFjaXR5Oi42fSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgI2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudS1lcnJvcnt3aWR0aDo2MDBweDtiYWNrZ3JvdW5kLWNvbG9yOiNjODY5Njk7Y29sb3I6I2ZmZjtwYWRkaW5nOjEwcHg7cGFkZGluZy1sZWZ0OjIwcHg7Ym94LXNpemluZzpib3JkZXItYm94O29wYWNpdHk6MDstd2Via2l0LXRyYW5zaXRpb246b3BhY2l0eSAuNHMgZWFzZS1pbi1vdXQ7LW1vei10cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGVhc2UtaW4tb3V0Oy1tcy10cmFuc2l0aW9uOm9wYWNpdHkgLjRzIGVhc2UtaW4tb3V0Oy1vLXRyYW5zaXRpb246b3BhY2l0eSAuNHMgZWFzZS1pbi1vdXQ7dHJhbnNpdGlvbjpvcGFjaXR5IC40cyBlYXNlLWluLW91dDtmb250LWZhbWlseTpSdWJpazt2aXNpYmlsaXR5OmhpZGRlbn0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IC5peC1ib29raW5nLW1lbnUtdmlzaWJsZS1lcnJvcnt2aXNpYmlsaXR5OnZpc2libGUgIWltcG9ydGFudDtvcGFjaXR5OjEgIWltcG9ydGFudH0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51ICNpeC1tZW51LXZpZGVve21hcmdpbjozMHB4IGF1dG87d2lkdGg6NjAwcHg7bWFyZ2luLWxlZnQ6MH0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51IC5peC1tZW51LW9mZmxpbmUtbGluZXtmb250LXNpemU6Ljk4ZW07dG9wOjkwcHg7bGVmdDo1MCU7bWFyZ2luLXRvcDo1cHg7ZGlzcGxheTpub25lfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgI2l4LWV4dC1tZW51LWJ0bi1jb250YWluZXIgLml4LW1lbnUtYnRue3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZWZlZmVmICFpbXBvcnRhbnQ7Ym9yZGVyOm5vbmU7bWFyZ2luLXRvcDoxMHB4O2JvcmRlcjoycHggc29saWQgIzI2NDM3YTtjb2xvcjojMjY0MzdhICFpbXBvcnRhbnQ7Zm9udC1zaXplOjEuMTQzZW07aGVpZ2h0OjEyMHB4O2Zsb2F0OmxlZnQ7Y3Vyc29yOnBvaW50ZXI7Ym94LXNpemluZzpib3JkZXItYm94fSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgI2l4LWV4dC1tZW51LWJ0bi1jb250YWluZXIgLml4LW1lbnUtYnRuOm50aC1jaGlsZCgybil7bWFyZ2luLWxlZnQ6MH0jaXgtYm9va2luZy1leHRlcm5hbC1tZW51ICNpeC1leHQtbWVudS1idG4tY29udGFpbmVyIC5peC1tZW51LWJ0bltkaXNhYmxlZF17Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6LjR9I2l4LWJvb2tpbmctZXh0ZXJuYWwtbWVudSAjaXgtZXh0LW1lbnUtYnRuLWNvbnRhaW5lciAuaXgtbWVudS1idG5bZGlzYWJsZWRdIC5peC1tZW51LW9mZmxpbmUtbGluZXtkaXNwbGF5OmJsb2NrfSNpeC1ib29raW5nLWV4dGVybmFsLW1lbnUgaDN7cGFkZGluZy10b3A6MjBweDtmbG9hdDpsZWZ0O3dpZHRoOjEwMCV9fQ==`;reservationMenu.settings=JSON.parse(`{"videoUrl":"https://www.youtube.com/embed/2BMAz8AshUk","buttons":[{"line1":"WIZYTA W CZYTELNI AKT","line2":" ","form":1,"active":true,"offlineMessage":"Formularz chwilowo nie czynny"}]}`); class ClientCalendar { constructor(passedGuid) { this.prepareHtml() ; (async () => { const DaysOfWeek = Object.freeze({ 0: 'Niedziela', 1: 'Poniedziałek', 2: 'Wtorek', 3: 'Środa', 4: 'Czwartek', 5: 'Piątek', 6: 'Sobota', Sunday: 0, Monday: 1, Tuesday: 2, Wednesday: 3, Thursday: 4, Friday: 5, Saturday: 6 }) const RoomType = Object.freeze({ 0: 'IncorrectType', 1: 'PaperSignature', 2: 'ElectronicSignature', IncorrectType: 0, PaperSignature: 1, ElectronicSignature: 2 }) class TimeManager { static toDate(date) { // date ma format 2023-06-27T00:00:00 const [datePart, timePart] = date.split('T') const [year, month, day] = datePart.split('-') return new Date(year, parseInt(month) - 1, day) //return new Date(parseInt(apiDate.replace('/Date(', '').split('+')[0])) } static toTimeString(timespan) { const [hours, minutes, seconds] = timespan.split(':'); return `${hours}:${minutes}` /* const normalize = apiTime.replace('PT', '').split('H') let hours = parseInt(normalize[0]) let minutes = parseInt(normalize[1]) || 0 if (hours < 10) hours = `0${hours}` if (minutes < 10) minutes = `0${minutes}` return `${hours}:${minutes}`*/ } static nextDays(date, days) { return new Date(date.getFullYear(), date.getMonth(), date.getDate() + days) } static shortDateString(date) { let day = date.getDate() let month = date.getMonth() day = (day < 10) ? `0${day}` : day month = monthsOfYear[month] return `${day} ${month}` } static toApiDate(date) { //return `/Date(${date.getTime()}+200)/` let year = date.getFullYear() let months = parseInt(date.getMonth()) + 1 let day = date.getDate() if (parseInt(months) < 10) months = `0${parseInt(months)}` if (parseInt(day) < 10) day = `0${parseInt(day)}` return `${year}-${months}-${day}T00:00:00` } } class DateRangeHistory { static get maxIndex() { return 5 } constructor() { this.history = [] this.index = -1 } get triple() { return this.history[this.index] } set triple(triple) { this.history[this.index] = triple } init(triple) { this.history = [triple] this.index = 0 } next() { this.index++ } previous() { this.index-- } isCurrentFirst() { return this.index === 0 } isCurrentLast() { return this.index == DateRangeHistory.maxIndex } } const baseUrl = `${ixMenu.homeURL}/`, url = `${ixMenu.homeURL}/ChangeReservationTerm`, infoUrl = `${ixMenu.homeURL}/GetReservationBasicInfo`, pureGuid = passedGuid, guid = `guid=${pureGuid}`, calendarHistory = new DateRangeHistory(), monthsOfYear = ['Stycznia', 'Lutego', 'Marca', 'Kwietnia', 'Maja', 'Czerwca', 'Lipca', 'Sierpnia', 'Września', 'Października', 'Listopada', 'Grudnia'], daysOfWeek = ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'] , $ix = 'ix-booking', // dom create helper objects $div = 'div', $input = 'input', $label = 'label', $form = 'form', $span = 'span', $select = 'select', $option = 'option', $button = 'button', $img = 'img', // dom request helper object $id = 'id', $cls = 'class', $query = 'query' ; let // main dom container container, /** form id */ formId, // dom object for form styles style, // added signatures selectedSignatures = [], // incremented id for selected signatures signaturesIID = 0, // max items u can add to signature table maxSignaturesCount, // references subformCtx, // TODO: add comennt to this variable apiUrl, // current slot set loaded for calendar slotSet, // currentWeek, // selectedRoomType = 1, // uzywany do historii przewijania jako punkt startowy firstWeek, // ilość przewininięć kalendarza calendarPage = 0, // selected slot currentSlot, // calendarPreloadDelay = 620, basicInfo ; const hide = (...nodes) => nodes.forEach(node => node.style.display = 'none') const show = (...nodes) => nodes.forEach(node => node.style.display = 'block') const spawn = namespace => dom => options => { let { id, cls, txt, val, on, src } = options || {} const element = document.createElement(dom) element.id = id ? (namespace ? `${namespace}-${id}` : id) : '' cls = cls ? (namespace ? `${namespace}-${cls}` : cls) : '' if (cls) element.classList.add(cls) element.innerText = txt || '' if ((val != undefined) && (val != null)) element.value = val if ((on != undefined) && (on != null)) element.disabled = !on if (src) element.src = src return element } const get = namespace => method => query => { switch (method) { case 'id': return document.getElementById(namespace ? `${namespace}-${query}` : query) break case 'class': return Array.from(document.getElementsByClassName(namespace ? `${namespace}-${query}` : query)) break case 'query': return Array.from(document.querySelectorAll(query)) break } } const getBasicInfo = async () => { console.log('getBasicInfo', infoUrl + '?' + guid) const res = await fetch(infoUrl + '?' + guid, { headers: { 'Content-Type': 'application/json' } }) return res.json() } const showMessage = msg => { document.getElementById('details').innerText = msg document.getElementById('details').style.display = 'block' document.getElementById('result-box').classList.remove('box-error') document.getElementById('result-box').classList.add('box-message') document.getElementById('result-box').innerText = 'Sukces' } const showError = err => { document.getElementById('details').innerText = err document.getElementById('details').style.display = 'block' document.getElementById('result-box').classList.add('box-error') document.getElementById('result-box').classList.remove('box-message') document.getElementById('result-box').innerText = 'Niepowodzenie' } const getFirstSlot = async (selectedRoomType, divisionId) => { let req = { RoomType: (selectedRoomType == RoomType.PaperSignature) ? null : selectedRoomType, DivisionId: divisionId } const res = await fetch(`${baseUrl}GetFirstFreeTimeWindow`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(req) }) return res.json() } const getSlots = async (start, end, roomType, devisionId) => { let req = { //DateFrom: `/Date(${start.getTime()}+200)/`, DateFrom: TimeManager.toApiDate(start), //DateTo: `/Date(${end.getTime()}+0200)/`, DateTo: TimeManager.toApiDate(end), RoomType: roomType === RoomType.PaperSignature ? null : roomType, DivisionId: devisionId } const res = await fetch(`${baseUrl}GetAvailableTimeWindows`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(req) }) return res.json() } const onFirstFreeSlot = (res, ok, nope) => { const date1 = TimeManager.toDate(res.dateValue) let date2 = TimeManager.nextDays(date1, 1) let date3 if (date2.getDay() === DaysOfWeek.Sunday) { date2 = TimeManager.nextDays(date1, 2) return ok([date1, date2, TimeManager.nextDays(date2, 1)]) } else if (date2.getDay() === DaysOfWeek.Saturday) { getSlots(date2, date2).then(data => { if (data.length == 0) { date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 2) return ok([date1, date2, new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 1)]) } else { date3 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 2) return ok([date1, date2, date3]) } }).catch(error => { nope(error) }) } date3 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 1) if (date3.getDay() == 0) { // niedziela return ok([date1, date2, new Date(date3.getFullYear(), date3.getMonth(), date3.getDate() + 1)]) } else if (date3.getDay() == 6) { // sobota getSlots(date3, date3).then(data => { if (data.length == 0) { // pusta sobota return ok([date1, date2, new Date(date3.getFullYear(), date3.getMonth(), date3.getDate() + 2)]) } else { // "pełna sobota" return ok([date1, date2, date3]) } }).catch(error => { nope(error) }) } return ok([date1, date2, date3]) } const assignSlotSet = set => { set.forEach(e => { e.DateValue = TimeManager.toDate(e.dateValue) e.EndTime = TimeManager.toTimeString(e.endTime) e.StartTime = TimeManager.toTimeString(e.startTime) }) slotSet = set } const existAsPaperSlot = reqSlot => slotSet.find(slot => { if (slot.RoomType === RoomType.ElectronicSignature) return false if (slot.DateValue.getTime() != reqSlot.DateValue.getTime()) return false if (slot.StartTime != reqSlot.StartTime) return false if (slot.EndTime != reqSlot.EndTime) return false return true }) const setSelectedSlot = slot => { get()($id)('ix-rmemct-btn-new-date').classList.remove('calendar-btn-disabled') const nodeSelectedLabel = get()($id)('ix-rmemct-new-date') currentSlot = slot const date = slot.DateValue nodeSelectedLabel.innerText = `Wybrano: ${DaysOfWeek[date.getDay()]}, ${date.getDate()} ${monthsOfYear[date.getMonth()]} ${date.getFullYear()}, ${slot.StartTime} - ${slot.EndTime}` } const getSelectedSlot = () => currentSlot const renderCalendar = (selectedRoomType) => { let properSlotSet = [] if (selectedRoomType == RoomType.PaperSignature) { slotSet.forEach(slot => { switch (slot.roomType) { case RoomType.ElectronicSignature: if (!existAsPaperSlot(slot)) { properSlotSet.push(slot) } break case RoomType.PaperSignature: properSlotSet.push(slot) break } }) } else { properSlotSet = slotSet } let today = new Date() today = new Date(today.getFullYear(), today.getMonth(), today.getDate()) //console.log(properSlotSet) //window.s = properSlotSet let [hours, minutes] = (new Date()).toLocaleTimeString('pl-PL').split(':') let time = `${hours}:${minutes}` properSlotSet = properSlotSet.filter(slot => (slot.DateValue.getTime() != today.getTime()) || (time < slot.StartTime)) let longColumnExist = false const triple = calendarHistory.triple const nodeColumnsBox = get()($id)('ix-rmemct-columns') const columns = [nodeColumnsBox.children[0], nodeColumnsBox.children[1], nodeColumnsBox.children[2]] for (let i = 0; i < 3; i++) { columns[i].children[0].innerText = DaysOfWeek[triple[i].getDay()] columns[i].children[1].innerText = TimeManager.shortDateString(triple[i]) const slotsForDay = [] properSlotSet.forEach(slot => { if (slot.DateValue.getTime() == triple[i].getTime()) slotsForDay.push(slot) }) columns[i].children[2].innerHTML = '' for (const slot of properSlotSet) { if (slot.DateValue.getTime() == triple[i].getTime()) { const currentSlot = slot const nodeSlot = spawn()($div)({ cls: 'ix-rmemct-slot', txt: `${slot.StartTime} - ${slot.EndTime}` }) columns[i].children[2].append(nodeSlot) nodeSlot.addEventListener('click', event => { if (event.target.disabled) return get()($cls)('datetime-box-active').forEach(node => node.classList.remove('datetime-box-active')) event.target.classList.add('datetime-box-active') setSelectedSlot(currentSlot) get()($id)('ix-rmemct-btn-new-date').scrollIntoView({ behavior: "smooth" }); }) // zanacznie const selectedSlot = getSelectedSlot() if ( selectedSlot && (selectedSlot.DateValue.getTime() === currentSlot.DateValue.getTime()) && (selectedSlot.WindowNumber === currentSlot.WindowNumber) ) { nodeSlot.classList.add('datetime-box-active') } } } } const nodeBtnBack = get()($id)('ix-rmemct-btn-back') const nodeBtnNext = get()($id)('ix-rmemct-btn-next') if (calendarHistory.isCurrentFirst()) { nodeBtnBack.disabled = true nodeBtnBack.classList.add('calendar-btn-disabled') nodeBtnNext.disabled = false nodeBtnNext.classList.remove('calendar-btn-disabled') } else if (calendarHistory.isCurrentLast()) { nodeBtnBack.disabled = false nodeBtnBack.classList.remove('calendar-btn-disabled') nodeBtnNext.disabled = true nodeBtnNext.classList.add('calendar-btn-disabled') } else { nodeBtnBack.disabled = false nodeBtnBack.classList.remove('calendar-btn-disabled') nodeBtnNext.disabled = false nodeBtnNext.classList.remove('calendar-btn-disabled') } setTimeout(() => { hide(get()($id)('ix-rmemct-pre-loader')) show(get()($id)('ix-rmemct-columns')) }, calendarPreloadDelay) } const iHaveNewTripple = (triple, callback) => { return callback(triple) } const onNewFreeSlot = (current, ok, nope) => { let date1 = new Date(current[2].getFullYear(), current[2].getMonth(), current[2].getDate() + 1) if (date1.getDay == 0) { date1 = new Date(current[2].getFullYear(), current[2].getMonth(), current[2].getDate() + 2) return iHaveNewTripple([ date1, new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 1), new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 2) ], ok) } else if (date1.getDay() == 6) { getSlots(date1, date1, basicInfo.FirstChoice, basicInfo.DivisionId).then(data => { if (data.length == 0) { // pusta sobota date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 2) return iHaveNewTripple([ date1, new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 1), new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 2) ], ok) } else { // "pełna" sobota return iHaveNewTripple([ date1, new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 2), new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 3) ], ok) } }).catch(error => { return nope(error) }) } let date2 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 1) let date3 if (date2.getDay() == 0) { // niedziela naley siłowo dodać jeden dzień date2 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate() + 2) return iHaveNewTripple([date1, date2, new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 1)], ok) } else if (date2.getDay() == 6) { // sobota getSlots(date2, date2, basicInfo.FirstChoice, basicInfo.DivisionId).then(data => { if (data.length == 0) { // pusta sobota date2 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 2) return iHaveNewTripple([date1, date2, new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 1)], ok) } else { // "pełna" sobota date3 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 2) return iHaveNewTripple([date1, date2, date3], ok) } }).catch(error => { return nope(error) }) } date3 = new Date(date2.getFullYear(), date2.getMonth(), date2.getDate() + 1) if (date3.getDay() == 0) { // niedziela return iHaveNewTripple([date1, date2, new Date(date3.getFullYear(), date3.getMonth(), date3.getDate() + 1)], ok) } else if (date3.getDay() == 6) { // sobota getSlots(date3, date3, basicInfo.FirstChoice, basicInfo.DivisionId).then(data => { if (data.length == 0) { // pusta sobota return iHaveNewTripple([date1, date2, new Date(date3.getFullYear(), date3.getMonth(), date3.getDate() + 2)], ok) } else { // "pełna sobota" return iHaveNewTripple([date1, date2, date3]) } }).catch(error => { return nope(error) }) } return iHaveNewTripple([date1, date2, date3], ok) } const nodeBtnBack = get()($id)('ix-rmemct-btn-back') const nodeBtnNext = get()($id)('ix-rmemct-btn-next') const nodeColumnsBox = get()($id)('ix-rmemct-columns') const nodePageLoader = get()($id)('ix-rmemct-pre-loader') nodeBtnBack.addEventListener('click', event => { if (event.target.disabled) return nodeBtnBack.disabled = true nodeBtnNext.disabled = true nodeBtnBack.classList.add('calendar-btn-disabled') nodeBtnNext.classList.add('calendar-btn-disabled') hide(nodeColumnsBox) show(nodePageLoader) calendarHistory.previous() getSlots(calendarHistory.triple[0], calendarHistory.triple[2], basicInfo.firstChoice, basicInfo.divisionId).then(slots => { assignSlotSet(slots) renderCalendar(basicInfo.firstChoice) }) }) nodeBtnNext.addEventListener('click', event => { if (event.target.disabled) return nodeBtnBack.disabled = true nodeBtnNext.disabled = true nodeBtnBack.classList.add('calendar-btn-disabled') nodeBtnNext.classList.add('calendar-btn-disabled') hide(nodeColumnsBox) show(nodePageLoader) const oldTriple = calendarHistory.triple calendarHistory.next() const load = () => { getSlots(calendarHistory.triple[0], calendarHistory.triple[2], basicInfo.firstChoice, basicInfo.divisionId).then(slots => { assignSlotSet(slots) renderCalendar(basicInfo.firstChoice) }) } if (calendarHistory.triple == undefined) { onNewFreeSlot(oldTriple, triple => { calendarHistory.triple = triple load() }) } else { load() } }) const nodeBtnAction = get()($id)('ix-rmemct-btn-new-date') const action = async (date, window) => { const req = { OperationGuid: pureGuid, NewTerm: TimeManager.toApiDate(date), TimeWindow: window }; const res = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(req) }); return res.json(); } nodeBtnAction.addEventListener('click', event => { action(getSelectedSlot().DateValue, getSelectedSlot().windowNumber).then(res => { const { success: Success, message: Message } = res hide(get()($id)('view-new-date')) ixMenu.showConfirmEmailResponse(Success, Message) }).catch(error => { console.error(error) hide(get()($id)('view-new-date')) ixMenu.showConfirmEmailResponse(false, 'Błąd systemu. Spróbuj ponownie później') }) }) const preLoader = get()($id)('ix-rmemct-pre-loader') //show(preLoader) const displayBasicInfo = () => { const infoDiv = get()($id)('ix-rmemct-old-date') const date = TimeManager.toDate(basicInfo.startDate) let str = `${daysOfWeek[date.getDay()]}, ${date.getDate()} ${monthsOfYear[date.getMonth()]} ${date.getFullYear()} - ${TimeManager.toTimeString(basicInfo.startTime)}` infoDiv.innerText = str //console.log('Koniec wyświetlania basicInfo') } // //console.log("Start: getBasicInfo") getBasicInfo().then(res => { basicInfo = res displayBasicInfo() //console.log("Run: getFirstSlot(", res.FirstChoice, res.DivisionId, ")") getFirstSlot(res.firstChoice, res.divisionId).then(firstSlot => { onFirstFreeSlot(firstSlot, triple => { getSlots(triple[0], triple[2], res.firstChoice, res.divisionId).then(slots => { assignSlotSet(slots) calendarHistory.init(triple) //hide(preLoader) renderCalendar(res.firstChoice) show(get()($id)('view-new-date')) }).catch(error => { console.error(error) showError('Nie udało się znaleść wolnych terminów. Spróbuj ponownie później') }) }, error => { console.error(error); showError('Nie udało się znaleść wolnych terminów. Spróbuj ponownie później') }) }).catch(error => { console.error(error); showError('Nie udało się znaleść wolnych terminów. Spróbuj ponownie później') }) }).catch(error => { console.error(error); showError('Coś poszło nie tak. Spróbuj ponownie później') }) })() } prepareHtml() { ixMenu.DOM._container.innerHTML = `
Obecny termin rezerwacji
Wybierz nowy termin
<
>
Nie wybrano terminu
Zmień termin
` } } class IRRouter { static get actions() { return Object.freeze({ default: 'm', menu: 'm', form: '0', confirmEmail: '1', cancelReservation: '2', qr: '3', acceptTerm: '4', changeTerm: '5' }) } static get route() { const { searchParams } = new URL(location.href) let [ action, ...content ] = searchParams.get('ixra') || this.actions.default content = content.join('') return { action, content } } } let ixMenu class MenuButton { constructor(settings) { this.settings = settings } render(_container, _parent, homeURL) { const { settings } = this const _span = document.createElement('span') const _line1 = ixMenu.constructor.domFromString(`${settings.line1}`) const _line2 = ixMenu.constructor.domFromString(`${settings.line2}`) const _line3 = ixMenu.constructor.domFromString(`${settings.offlineMessage}`) _span.append(_line1, document.createElement('br'), _line2, document.createElement('br'), _line3) const _btn = document.createElement('button') _btn.classList.add('ix-menu-btn') _btn.type = 'button' _btn.disabled = !settings.active _btn.append(_span) _btn.onclick = ev => { if (_btn.disabled) return _line1.innerText = "Łączenie..." ixMenu.loadFormScript(settings.form, _engine => { if (window.ixBookingLauncher) { ixMenu.DOM._menu.style.display = 'none' ixBookingLauncher(_parent, homeURL, settings.form) } else { if (_engine.remove instanceof Function) _engine.remove() _line1.innerText = settings.line1 ixMenu.DOM._errorMsg.innerText = 'Nie udało się połączyć z formularzem' ixMenu.constructor.showPeriod(ixMenu.DOM._errorMsg, 3000) } }, _engine => { if (_engine.remove instanceof Function) _engine.remove() _line1.innerText = settings.line1 ixMenu.DOM._errorMsg.innerText = 'Nie udało się połączyć z formularzem' ixMenu.constructor.showPeriod(ixMenu.DOM._errorMsg, 3000) }) } //_container.append(_li) _container.append(_btn) } } class Menu { static get ThisStaticFieldIsResultOfNotHavingEnoughTimeToDoneBetterJobOnRenderThisInterfaceSorryForEnyoneWhoWantOrWhatIsWarsedMustEditThisCode() { return `

Szybka instrukcja umawiania wizyty w sądzie

1. Naciśnij przycisk wyboru miejsca rezerwacji wizyty.

2. Wpisz swoje dane osobowe w wolnych polach.

2.1. Jeżeli wybrałeś opcję Czytelnia Akt, będziesz musiał wypełnić dodatkowe pola dotyczące interesujących Cię dokumentów.

3. Wybierz odpowiadający Ci termin wizyty w wyświetlonym kalendarzu.
UWAGA: Kalendarz pokazuje tylko dostępne terminy.

Dodatkowe informacje

Potwierdzenie wizyty przez interesanta

Po zakończeniu rezerwacji na podany przez Ciebie adres email zostanie wysłana wiadomość automatyczna.Potwierdź swoje dane, poprzez wybranie przycisku “Potwierdź email”.
Masz na to 60 minut, jeżeli tego nie zrobisz rezerwacja zostanie anulowana.

Potwierdzenie wizyty przez pracownika

Twoja rezerwacja zostaje przekazana do potwierdzenia przez pracownika sądu.
Jeżeli wybrany przez Ciebie termin zostanie ostatecznie zaakceptowany, na Twój adres email zostanie wysłana wiadomość potwierdzająca wraz ze specjalnym kodem QR.

Realizacja wizyty

Przyjdź w umówionym terminie do siedziby sądu, potwierdź swoją obecność, skanując kod QR lub wpisując numer rezerwacji - zrób to na urządzeniu - biletomacie.

By dowiedzieć się więcej o szczegółach rezerwacji, możesz obejrzeć ten film instruktażowy:

` } static get videoTags() { return [ `` ] } static insertAfter (target, node) { target.parentNode.insertBefore(node,target.nextSibling) } static insertBefore (target, node) { target.parentNode.insertBefore(node,target) } static showPeriod (_node, time) { _node.classList.add('ix-booking-menu-visible-error') setTimeout(() => { setTimeout(() => _node.classList.remove('ix-booking-menu-visible-error'), time) }, 10) } static initStyle (_container, href) { const _style = document.createElement('link') _style.rel = 'stylesheet' _style.href = href this.insertBefore(_container, _style) } static run(_container, homeURL) { const { actions, route: { action, content } } = IRRouter ixMenu = new Menu(_container, reservationMenu.style, reservationMenu.settings, homeURL) switch (action) { case actions.form: ixMenu.loadFormScript(content, _engine => ixBookingLauncher(_container, homeURL, content), () => { }) break case actions.confirmEmail: ixMenu.loadConfirmEmail(content) break case actions.qr: ixMenu.loadQr(content) break case actions.cancelReservation: ixMenu.loadCancel(content) break case actions.acceptTerm: ixMenu.loadAcceptTerm(content) break case actions.changeTerm: ixMenu.loadChangeTerm(content) break default: ixMenu.render() } } constructor(_container, style, settings, homeURL) { this.constructor.initStyle(_container, style) this.DOM = { _container } this.settings = settings this.homeURL = homeURL } loadFormScript(id, callbackReady, callbackError) { const { homeURL } = this const { _container } = this.DOM const scriptUrl = `${homeURL}/GetRestFormScript?formId=${id}&courtUnitId=${this.settings.courtUnit}&nocache=${parseInt(Math.random() * 1000000)}` const _engine = document.createElement('script') _engine.src = scriptUrl _engine.onload = () => callbackReady(_engine) _engine.onabort = _engine.oncancel = _engine.onerror = () => callbackError(_engine) this.constructor.insertAfter(_container, _engine) } static domFromString(htmlString) { const div = document.createElement('div') div.innerHTML = htmlString.trim() return div.firstChild } async confirmEmail(token) { const { homeURL } = this const res = await fetch(`${homeURL}/ConfirmReservationEmail?guid=${token}`, { headers: { 'Content-Type': 'application/json' } }) return await res.json() } showConfirmEmailResponse(Success, Message) { const { _container } = this.DOM const _status = document.createElement('div') _status.id = 'ix-ixra-confirm-e-status' _status.classList.add(Success ? 'ix-ixra-e-status-success' : 'ix-ixra-e-status-error') const _info = document.createElement('div') _info.id = 'ix-ixra-confirm-e-info' _info.innerText = Success ? 'Sukces' : 'Niepowodzenie' const _msg = document.createElement('div') _msg.id = 'ix-ixra-confirm-e-msg' _msg.innerText = Message _status.append(_info, _msg) _container.append(_status) } async loadConfirmEmail(token) { let Success, Message try { ({ success: Success, message: Message } = await this.confirmEmail(token)) } catch (ex) { log.e('loadConfirmEmail')(ex) Success = false Message = 'Nie dało się wykonać akcji' } this.showConfirmEmailResponse(Success, Message) } async loadQr(num) { const { homeURL } = this const { _container } = this.DOM const _qr = document.createElement('img') _qr.classList.add('ix-ixra-qr') _qr.src = `${homeURL}/GetQrCode?reservationNumber=${num}` _container.append(_qr) } async cancelReservation(token) { const { homeURL } = this const res = await fetch(`${homeURL}/CancelReservation?guid=${token}`, { headers: { 'Content-Type': 'application/json' } }) return await res.json() } async loadCancel(token) { const { _container } = this.DOM const _status = document.createElement('div') _status.id = 'ix-ixra-cancel-status' const _info = document.createElement('div') _info.id = 'ix-ixra-cancel-info' _info.innerText = 'ANULOWANIE REZERWACJI' const _msg = document.createElement('div') _msg.id = 'ix-ixra-cancel-msg' _msg.innerText = 'Proszę wcisnąć przycisk aby anulować rezerwację' const _btn = document.createElement('div') _btn.id = 'ix-ixra-cancel-btn' _btn.innerText = 'Anuluj rezerwację' _status.append(_info, _msg, _btn) _container.append(_status) _btn.onclick = async () => { let Success, Message try { ({ success: Success, message: Message } = await this.cancelReservation(token)) } catch (ex) { log.e('loadConfirmEmail')(ex) Success = false Message = 'Nie dało się wykonać akcji' } _status.remove() this.showConfirmEmailResponse(Success, Message) } } async acceptTerm(token) { const { homeURL } = this const res = await fetch(`${homeURL}/ConfirmReservationTerm?guid=${token}`, { headers: { 'Content-Type': 'application/json' } }) return await res.json() } async loadAcceptTerm(token) { const { _container } = this.DOM const _status = document.createElement('div') _status.id = 'ix-ixra-cancel-status' const _info = document.createElement('div') _info.id = 'ix-ixra-cancel-info' _info.innerText = 'POTWIERDZENIE TERMINU' const _msg = document.createElement('div') _msg.id = 'ix-ixra-cancel-msg' _msg.innerText = 'Czy na pewno chcesz potwierdzić termin ?' const _btn = document.createElement('div') _btn.id = 'ix-ixra-cancel-btn' _btn.innerText = 'Potwierdzam' _status.append(_info, _msg, _btn) _container.append(_status) _btn.onclick = async () => { let Success, Message try { ({ success: Success, message: Message } = await this.acceptTerm(token)) } catch (ex) { log.e('loadConfirmEmail')(ex) Success = false Message = 'Nie dało się wykonać akcji' } _status.remove() this.showConfirmEmailResponse(Success, Message) } } async loadChangeTerm(content) { setTimeout(() => new ClientCalendar(content), 100) } render() { const { settings, homeURL } = this const { _container } = this.DOM const _menu = document.createElement('div') _menu.id = 'ix-booking-external-menu' _menu.classList.add('main-text') const _errorMsg = document.createElement('div') _errorMsg.id = 'ix-booking-external-menu-error' _menu.append(_errorMsg) this.constructor.insertBefore(_container, _menu) const _buttonsContainerSupport = document.createElement('div') _buttonsContainerSupport.id = 'ix-ext-menu-support' const _buttonsContainer = document.createElement('div') _buttonsContainer.id = 'ix-ext-menu-btn-container' _buttonsContainerSupport.append(_buttonsContainer) settings.buttons.forEach(btn => { const button = new MenuButton(btn) button.render(_buttonsContainer, _container, homeURL) }) _menu.append(_buttonsContainerSupport) _menu.insertAdjacentHTML('beforeend', this.constructor.ThisStaticFieldIsResultOfNotHavingEnoughTimeToDoneBetterJobOnRenderThisInterfaceSorryForEnyoneWhoWantOrWhatIsWarsedMustEditThisCode) const [partOne, partTwo] = this.constructor.videoTags if (settings?.videoUrl) { _menu.insertAdjacentHTML('beforeend', `${partOne}${settings?.videoUrl}${partTwo}`) } else { document.getElementById('ix-video-label').style.display = 'none' } this.DOM.constructor.assign(this.DOM, { _menu, _errorMsg }) } } window.ixMenuLauncher = (...args) => Menu.run(...args); } catch(e){ console.error(e); }})()