{"id":3929,"date":"2024-12-11T00:00:33","date_gmt":"2024-12-10T23:00:33","guid":{"rendered":"https:\/\/www.toyotacz.com\/about-us\/prohlidka-tovarny\/"},"modified":"2026-10-04T23:13:42","modified_gmt":"2026-10-04T21:13:42","slug":"factory-tour","status":"publish","type":"page","link":"https:\/\/www.toyotacz.com\/en\/about-us\/factory-tour\/","title":{"rendered":"Factory tour"},"content":{"rendered":"<p>Would you like to see how a&nbsp;car is made? How coils of steel sheet become a&nbsp;new, reliable vehicle? How many processes it takes to create this symphony of human hands and robots? Book a&nbsp;tour of our factory and step into the world of automotive production for a&nbsp;while!<\/p>\n<p>Together we will set out on the journey of creating our unique cars \u2014 from the very first component to the finished product.<\/p>\n<div class=\"comp_content_box\">\n<p><strong>How does it work?<\/strong><\/p>\n<p><strong>1.<\/strong> Please read the <a class=\"fancybox-default\" href=\"#prohlidka-tovarny-podminky-prohlidky\">tour conditions<\/a> carefully.<br \/>\nBy booking a&nbsp;tour, you confirm that you have read the conditions and will follow them.<\/p>\n<p><strong>2.<\/strong> Choose a&nbsp;date and time that suits you in the calendar and fill in the tour reservation form.<br \/>\nIf you would like a&nbsp;tour in a&nbsp;language other than Czech or English, you must arrange an interpreter for your group who will accompany you throughout the entire tour.<\/p>\n<p><strong>3.<\/strong> If you are travelling to us by public transport, please check the current timetables, for example <a href=\"https:\/\/idos.cz\/vlakyautobusymhdvse\/spojeni\/vysledky\/?f=Kol\u00edn,,n\u00e1dra\u017e\u00ed&amp;t=Kol\u00edn,,PZKO-TOYOTA\" target=\"_blank\" rel=\"noopener\">HERE<\/a>.<\/p>\n<\/div>\n<p>We will send all important information about the tour to the e-mail address you provide in the reservation form.<\/p>\n<p><strong>Don&#8217;t forget:<\/strong><br \/>\nFor safety reasons, all visitors must wear <strong>closed shoes and long trousers<\/strong>.<br \/>\nDuring the tour, all visitors must wear high-visibility vests, which will be provided before the tour begins.<br \/>\nBe prepared for an approximately <strong>2-kilometre walk between the production lines, including stairs and suspended walkways.<\/strong><\/p>\n<p>We look forward to your visit!<\/p>\n\n        <div class=\"ftb-booking-wrapper\">\n\n            <p>You are booking an English tour.<\/p>\n\n            <div class=\"ftb-lang-switch\">\n                                    <a href=\"https:\/\/www.toyotacz.com\/o-nas\/prohlidka-tovarny\/\">Zm\u011bnit prohl\u00eddku na \u010de\u0161tinu.<\/a>\n                            <\/div>\n\n                            <div class=\"ftb-message-error\">There are no available tour slots at this time. Please check back later.<\/div>\n            \n        <\/div>\n\n                    <style>\n                #prohlidka-tovarny-podminky-prohlidky,\n                #prohlidka-tovarny-gdpr-souhlas { display: none; }\n                .ftb-conditions { max-width: 700px; padding: 20px; font-size: 15px; line-height: 1.6; color: #222; }\n                .ftb-conditions h2 { font-size: 22px; margin: 24px 0 10px; color: #cc0033; }\n                .ftb-conditions h2:first-child { margin-top: 0; }\n                .ftb-conditions h3 { font-size: 17px; margin: 18px 0 8px; }\n                .ftb-conditions ul, .ftb-conditions ol { padding-left: 22px; margin: 8px 0; }\n                .ftb-conditions li { margin-bottom: 6px; }\n                .ftb-conditions p { margin: 0 0 10px; }\n                .ftb-conditions a { color: #cc0033; }\n                .ftb-conditions em { color: #555; }\n            <\/style>\n        \n                    <div id=\"prohlidka-tovarny-podminky-prohlidky\">\n                <div class=\"ftb-conditions\">\n                    <h2>General information on the factory tour<\/h2>\n<p><strong>Toyota Motor Manufacturing Czech Republic, Ltd.<\/strong><\/p>\n<h3>Information about the tour:<\/h3>\n<ul>\n<li>The tour is free of charge<\/li>\n<li>The duration is approximately 2 hours<\/li>\n<li>Tours are conducted in Czech or English language<br \/>\n<em>(If another foreign language is required, visitors must arrange their own interpreter.)<\/em><\/li>\n<\/ul>\n<h3>Tour program:<\/h3>\n<ol>\n<li><strong>Introductory video<\/strong> \u2013 basic information about production in TMMCZ \u2013 7 minutes<\/li>\n<li><strong>Virtual factory tour<\/strong> \u2013 30 minutes (cannot be translated into another language)<br \/>\n<em>(The tour may be ended at this point in case of limited physical condition.)<\/em><\/li>\n<li><strong>Guided walking tour of the production area<\/strong> \u2013 60 min<br \/>\nThis walking tour is approximately 2 km long and includes staircases and suspension footbridges. For safety reasons, the tour is not suitable for people with reduced mobility, and <strong>access for wheelchair users is not possible<\/strong>.<\/li>\n<li><strong>Q&amp;A session<\/strong> \u2013 approximately 20 minutes, depending on the number of questions<\/li>\n<\/ol>\n<h3>Contact:<\/h3>\n<p><strong>Veronika \u0160obotn\u00edkov\u00e1<\/strong><br \/>\ntel: +420 736 526 279<br \/>\ne-mail: <a href=\"mailto:veronika.sobotnikova@toyotacz.com\">veronika.sobotnikova@toyotacz.com<\/a><\/p>\n<h2>Tour conditions<\/h2>\n<p>We kindly ask visitors to arrive at the TMMCZ Main Gate \/ Personnel Gate at least <strong>15 minutes<\/strong> prior to the scheduled start of the tour.<\/p>\n<p>For safety reasons, all visitors to the TMMCZ premises are required to ensure and comply with the following:<\/p>\n<ul>\n<li>Not enter the premises under the influence of alcohol and\/or narcotic or psychotropic substances. In case of suspicion, a visitor may be requested to undergo a test; if the result is positive, entry will be denied.<\/li>\n<li>Wear footwear with a solid toe and heel, i.e. fully enclosed shoes (slippers, sandals, high-heel shoes, etc. are not permitted).<\/li>\n<li>Wear long trousers. The following are not permitted in production areas: shorts, three-quarter length trousers, and skirts.<\/li>\n<li>Not bring onto or consume alcoholic beverages or other narcotic or psychotropic substances on the premises.<\/li>\n<li>Not bring any items that could endanger the life or health of company employees or third parties on the company premises (e.g. firearms, ammunition, pyrotechnics). Prior to entry, visitors may be requested to allow an inspection of personal belongings being brought onto the premises and, by participating in the tour, agree to undergo such inspection.<\/li>\n<\/ul>\n<p>In the event of late arrival or failure to comply with the above conditions, TMMCZ reserves the right, without any compensation, to refuse entry to the TMMCZ premises and deny participation in the tour.<\/p>\n<p>Visitors acknowledge that the company premises are monitored by a CCTV system with recording capability. Recording and storage of such footage are carried out in accordance with Regulation (EU) 2016\/679 of the European Parliament and of the Council of 27 April 2016 on the protection of natural persons with regard to the processing of personal data and on the free movement of such data and repealing Directive 95\/46\/EC (General Data Protection Regulation), as well as applicable personal data protection legislation.<\/p>\n<h3>Minimum age of visitors<\/h3>\n<p>Access to the production plant is permitted only to persons over 6 years of age.<\/p>\n<h3>Minors and supervision<\/h3>\n<p>Persons under 18 years of age (hereinafter referred to as \u201cMinors\u201d) may enter the plant premises only under the following conditions:<\/p>\n<ul>\n<li><strong>Children aged 6\u20139.99 years<\/strong>\n<ul>\n<li>may enter only when accompanied by an adult (18+),<\/li>\n<li>a maximum of 2 children in this age category may be supervised by one accompanying adult,<\/li>\n<li>the accompanying adult is required to provide continuous supervision of the children throughout the visit.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Minors aged 10\u201317.99 years<\/strong>\n<ul>\n<li>may enter the plant premises:\n<ul>\n<li>when accompanied by an adult, or<\/li>\n<li>as part of an organised group (e.g. a school excursion).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Unaccompanied entry of minors without an accompanying adult is not permitted.<\/p>\n<h3>Organised groups (schools, etc.)<\/h3>\n<p>In the case of organised groups of minors, the following rules apply:<\/p>\n<ul>\n<li>the group must be accompanied by a responsible adult (e.g. a teacher or group supervisor),<\/li>\n<li>the minimum supervision ratio is 1 adult per maximum of 19 minors,<\/li>\n<li>accompanying adults are responsible for:\n<ul>\n<li>organisation of the group,<\/li>\n<li>ensuring compliance with instructions,<\/li>\n<li>the safety of the persons under their supervision throughout the visit.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>Responsibility for minors<\/h3>\n<ul>\n<li>During the visit, responsibility for minors lies with:\n<ul>\n<li>their legal guardian, or<\/li>\n<li>the person supervising them.<\/li>\n<\/ul>\n<\/li>\n<li>The operator shall not be liable for damages resulting from:\n<ul>\n<li>insufficient supervision by the accompanying person,<\/li>\n<li>violation of the tour conditions, rules, or instructions provided by employees.<\/li>\n<\/ul>\n<\/li>\n<li>Liability for damages shall be governed by the relevant provisions of the Civil Code.<\/li>\n<\/ul>\n<h2>All participants are required to strictly comply with the following rules during the tour<\/h2>\n<h3>Rules applicable throughout the TMMCZ premises:<\/h3>\n<ul>\n<li>follow the guide\u2019s instructions and comply with all safety regulations,<\/li>\n<li>always remain with the group and do not wander off or enter other production areas on your own initiative,<\/li>\n<li>do not touch any equipment, products, or packaging,<\/li>\n<li>wear the high-visibility vest provided by the guide,<\/li>\n<li>use of mobile phones while walking is prohibited (including making calls, reading or sending messages); mobile phones must not be used during the tour,<\/li>\n<li>hold the handrail when using stairways,<\/li>\n<li>pay increased attention to moving machinery,<\/li>\n<li>keep your hands out of your pockets during the tour, walk safely and do not run,<\/li>\n<li>allow factory employees to pass freely,<\/li>\n<li>photography and video recording are prohibited (except in the meeting room where the introductory session and final Q&amp;A take place),<\/li>\n<li>smoking is strictly prohibited (including electronic cigarettes, IQOS devices, etc.),<\/li>\n<li>if it is necessary to leave the tour, this must be reported to the guide, who will ensure safe escort from the premises.<\/li>\n<\/ul>\n<p><strong>Failure to comply with the above conditions may result in termination of or refusal to participate in the tour.<\/strong><\/p>\n                <\/div>\n            <\/div>\n        \n                    <div id=\"prohlidka-tovarny-gdpr-souhlas\">\n                <div class=\"ftb-conditions\">\n                    <h2>Consent to the processing of personal data for factory tour registration<\/h2>\n<p>By granting this consent to the processing of personal data, you agree that, within the meaning of Regulation (EU) No 2016\/679 of the European Parliament and of the Council on the protection of natural persons with regard to the processing of personal data and on the free movement of such data, and repealing Directive 95\/46\/EC (General Data Protection Regulation) (hereinafter the \"Regulation\"), the company Toyota Motor Manufacturing Czech Republic, s.r.o., with its registered office at Na Hradb\u00e1ch 126, Kol\u00edn II, 280 02, company registration number 265 13 528, registered in the Commercial Register kept by the Municipal Court in Prague, file no. C 86913 (hereinafter also the \"Controller\" or \"TMMCZ\"), as the operator of the website at <a href=\"https:\/\/www.toyotacz.com\/\">https:\/\/www.toyotacz.com\/<\/a>, may process the following personal data as part of the factory tour registration:<\/p>\n<ul>\n<li>Name and surname<\/li>\n<li>Company (employer) \/ TMMCZ employee ID number<\/li>\n<li>Telephone number<\/li>\n<li>E-mail address<\/li>\n<\/ul>\n<h3>Scope of the personal data processed by the Controller<\/h3>\n<p>The personal data will be processed by the Controller to the extent that you have voluntarily provided it to the Controller in connection with registration for the factory tour on the TMMCZ website at <a href=\"https:\/\/www.toyotacz.com\/\">https:\/\/www.toyotacz.com\/<\/a> in the Tours section operated by the Controller, namely to the extent of your identification data (name and surname) and contact data (telephone number and e-mail address).<\/p>\n<h3>Legal basis for the processing of personal data<\/h3>\n<p>The legal basis for the processing is this consent granted by you.<\/p>\n<h3>Purpose of the processing of personal data<\/h3>\n<p>Your personal data will be processed by the Controller for the purpose of factory tour registration and for the Controller's internal statistical and reporting purposes in anonymised form.<\/p>\n<h3>Period of processing and withdrawal of consent to the processing of personal data<\/h3>\n<p>For the above purposes, your personal data will be processed by the Controller from your voluntary registration for a period of 6 months from the date of completion of the TMMCZ factory tour. If this consent is withdrawn, your personal data will be erased by the Controller without undue delay.<\/p>\n<p>Your consent to the processing of personal data is granted voluntarily; you are under no obligation to provide it and no penalty applies if you do not provide it to the Controller. However, without granting this consent it will not be possible to provide the relevant factory tour.<\/p>\n<p>You may withdraw this consent at any time free of charge, by sending an e-mail message to <a href=\"mailto:info@toyotacz.com\">info@toyotacz.com<\/a> or a written notice addressed to the Controller at its place of business, Pr\u016fmyslov\u00e1 z\u00f3na Ov\u010d\u00e1ry 280, 280 02 Kol\u00edn. The withdrawal of consent does not, however, affect the lawfulness of the processing of personal data based on the consent given before its withdrawal.<\/p>\n<h3>Rights in connection with the protection of personal data<\/h3>\n<p>In relation to your personal data, you have in particular the following rights:<\/p>\n<ul>\n<li>the right of access to the personal data;<\/li>\n<li>the right to rectification of the personal data;<\/li>\n<li>the right to erasure of the personal data;<\/li>\n<li>the right to restriction of the processing of the personal data;<\/li>\n<li>the right to the portability of the personal data;<\/li>\n<li>the right not to be subject to automated individual decision-making and profiling;<\/li>\n<li>the right to withdraw consent to the processing of personal data;<\/li>\n<li>the right to be informed of a personal data breach where it is likely that the breach will result in a high risk to your rights and freedoms.<\/li>\n<\/ul>\n<p>All of the above rights may be exercised by electronic mail (e-mail) sent to <a href=\"mailto:info@toyotacz.com\">info@toyotacz.com<\/a>. This address may also be used in connection with a request for further supplementary information regarding the above rights. These rights may likewise be exercised by post to the Controller's place of business at Pr\u016fmyslov\u00e1 z\u00f3na Ov\u010d\u00e1ry 280, 280 02 Kol\u00edn.<\/p>\n<h3>Right to lodge a complaint with a supervisory authority<\/h3>\n<p>You have the right to contact the Office for Personal Data Protection (\u00da\u0159ad pro ochranu osobn\u00edch \u00fadaj\u016f) as the supervisory authority at any time if you believe that the rules for the protection of personal data have been infringed in the processing of your personal data.<\/p>\n<h3>Access to the personal data and its security<\/h3>\n<p>Your personal data will be accessible to the Controller, to its employees who need it for the above purposes in order to perform their work duties, and possibly also to third parties \u2013 processors (IT providers \/ operators of web services) who provide appropriate guarantees, whose processing meets all the requirements of the legislation and who will sufficiently protect your rights and personal data; their access to the personal data will, however, be permitted only to the necessary extent and for the strictly necessary period.<\/p>\n<p>All personal data provided to the Controller is stored in a secure database and protected by standard procedures (password protection, access by authorised persons, etc.).<\/p>\n<h3>Final provisions<\/h3>\n<p>You hereby confirm that the personal data provided is complete and accurate and that you have been informed that the provision of personal data is voluntary. At the same time, you confirm that you grant this consent freely, specifically, on an informed basis and unambiguously.<\/p>\n                <\/div>\n            <\/div>\n        \n        <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            var ftbSlots = [];\n            var ftbLang = 'en';\n            var ajaxUrl = 'https:\/\/www.toyotacz.com\/wp-admin\/admin-ajax.php';\n            var formId = 'ftb_booking_form_en';\n\n            var form         = document.getElementById(formId);\n            var dateDisplay  = document.getElementById('ftb_tour_date_display_' + ftbLang);\n            var dateHidden   = document.getElementById('ftb_tour_date_' + ftbLang);\n            var timeSelect   = document.getElementById('ftb_tour_time_' + ftbLang);\n            var capacityInfo = document.getElementById('ftb_capacity_info_' + ftbLang);\n\n            var firstNameInput   = document.getElementById('ftb_first_name_' + ftbLang);\n            var lastNameInput    = document.getElementById('ftb_last_name_' + ftbLang);\n            var phoneInput       = document.getElementById('ftb_phone_' + ftbLang);\n            var emailInput       = document.getElementById('ftb_email_' + ftbLang);\n            var personsInput     = document.getElementById('ftb_persons_' + ftbLang);\n\n            if (!dateDisplay || !dateHidden || !timeSelect || !capacityInfo || !form) return;\n\n            function clearFieldError(field) { if (field) field.classList.remove('ftb-error'); }\n            function setFieldError(field)   { if (field) field.classList.add('ftb-error'); }\n            function resetAllErrors() {\n                var fields = form.querySelectorAll('.ftb-error');\n                for (var i = 0; i < fields.length; i++) fields[i].classList.remove('ftb-error');\n            }\n\n            function ftbIsEmailValid(email) {\n                return \/^(([^<>()[\\]\\\\.,;:\\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,}))$\/.test(email);\n            }\n            function ftbIsPhoneValid(phone) {\n                return phone.replace(\/\\D\/g, '').length >= 9;\n            }\n\n            \/**\n             * Populate the time <select> with only times available for the chosen date.\n             *\/\n            function updateTimesForDate(isoDate) {\n                \/\/ Remove all options except the placeholder.\n                while (timeSelect.options.length > 1) {\n                    timeSelect.remove(1);\n                }\n                timeSelect.selectedIndex = 0;\n                capacityInfo.textContent = '';\n\n                var slotsForDate = ftbSlots[isoDate];\n                if (!slotsForDate || slotsForDate.length === 0) return;\n\n                for (var i = 0; i < slotsForDate.length; i++) {\n                    var s = slotsForDate[i];\n                    if (s.remaining <= 0) continue; \/\/ skip full slots\n\n                    var opt = document.createElement('option');\n                    opt.value = s.time;\n                    opt.textContent = s.time;\n                    timeSelect.appendChild(opt);\n                }\n            }\n\n            function updateCapacityInfo() {\n                var date = dateHidden.value;\n                var time = timeSelect.value;\n                if (!date || !time) { capacityInfo.textContent = ''; return; }\n\n                var slotsForDate = ftbSlots[date] || [];\n                for (var i = 0; i < slotsForDate.length; i++) {\n                    if (slotsForDate[i].time === time) {\n                        var s = slotsForDate[i];\n                        if (ftbLang === 'en') {\n                            capacityInfo.textContent = 'Available seats: ' + s.remaining + ' \/ ' + s.capacity;\n                        } else {\n                            capacityInfo.textContent = 'Dostupn\u00fdch m\u00edst: ' + s.remaining + ' z ' + s.capacity;\n                        }\n                        return;\n                    }\n                }\n                capacityInfo.textContent = '';\n            }\n\n            \/\/ Init jQuery UI datepicker.\n            if (window.jQuery) {\n                (function($) {\n                    var $display = $('#ftb_tour_date_display_' + ftbLang);\n                    var $hidden  = $('#ftb_tour_date_' + ftbLang);\n\n                    if ($display.length && $hidden.length) {\n                        var minDateStr = $display.data('mindate');\n                        var maxDateStr = $display.data('maxdate');\n                        var minDate = null, maxDate = null;\n\n                        try {\n                            if (minDateStr) minDate = $.datepicker.parseDate('yy-mm-dd', minDateStr);\n                            if (maxDateStr) maxDate = $.datepicker.parseDate('yy-mm-dd', maxDateStr);\n                        } catch (e) {}\n\n                        $display.datepicker({\n                            dateFormat: 'dd. mm. yy',\n                            minDate: minDate,\n                            maxDate: maxDate,\n                            beforeShowDay: function(date) {\n                                var y = date.getFullYear();\n                                var m = ('0' + (date.getMonth() + 1)).slice(-2);\n                                var d = ('0' + date.getDate()).slice(-2);\n                                var iso = y + '-' + m + '-' + d;\n\n                                var slotsForDate = ftbSlots[iso];\n                                if (!slotsForDate || slotsForDate.length === 0) {\n                                    return [false, '', ''];\n                                }\n\n                                \/\/ Check if at least one slot has remaining capacity.\n                                var hasAvailable = false;\n                                for (var i = 0; i < slotsForDate.length; i++) {\n                                    if (slotsForDate[i].remaining > 0) {\n                                        hasAvailable = true;\n                                        break;\n                                    }\n                                }\n\n                                if (hasAvailable) {\n                                    return [true, 'ftb-date-available', ''];\n                                }\n                                \/\/ Slots exist but all full.\n                                var fullTip = ftbLang === 'en'\n                                    ? 'Fully booked'\n                                    : 'Pln\u011b obsazeno';\n                                return [false, 'ftb-date-full', fullTip];\n                            },\n                            onSelect: function(dateText, inst) {\n                                var dateObj = $display.datepicker('getDate');\n                                if (!dateObj) { $hidden.val(''); updateTimesForDate(''); return; }\n\n                                var y = dateObj.getFullYear();\n                                var m = ('0' + (dateObj.getMonth() + 1)).slice(-2);\n                                var d = ('0' + dateObj.getDate()).slice(-2);\n                                var iso = y + '-' + m + '-' + d;\n                                $hidden.val(iso);\n                                updateTimesForDate(iso);\n                            }\n                        });\n\n                        \/\/ Manual typing \u2013 try to parse.\n                        $display.on('change', function() {\n                            var val = $display.val().trim();\n                            if (!val) { $hidden.val(''); updateTimesForDate(''); return; }\n\n                            var parts = val.match(\/^(\\d{1,2})\\.\\s*(\\d{1,2})\\.\\s*(\\d{2,4})$\/);\n                            if (!parts) {\n                                $display.val(''); $hidden.val(''); updateTimesForDate('');\n                                if (typeof Swal !== 'undefined') {\n                                    Swal.fire({\n                                        icon: 'error',\n                                        title: ftbLang === 'en'\n                                            ? 'Invalid date format'\n                                            : 'Neplatn\u00fd form\u00e1t data',\n                                        text: ftbLang === 'en'\n                                            ? 'Please use the date picker to select a date.'\n                                            : 'Pou\u017eijte pros\u00edm kalend\u00e1\u0159 pro v\u00fdb\u011br data.'\n                                    });\n                                }\n                                return;\n                            }\n\n                            var day = parseInt(parts[1], 10);\n                            var month = parseInt(parts[2], 10);\n                            var year = parseInt(parts[3], 10);\n                            if (year < 100) year += 2000;\n\n                            var dateObj = new Date(year, month - 1, day);\n                            if (isNaN(dateObj.getTime())) { $display.val(''); $hidden.val(''); updateTimesForDate(''); return; }\n\n                            var y2 = dateObj.getFullYear();\n                            var m2 = ('0' + (dateObj.getMonth() + 1)).slice(-2);\n                            var d2 = ('0' + dateObj.getDate()).slice(-2);\n                            var iso = y2 + '-' + m2 + '-' + d2;\n\n                            if (!ftbSlots[iso] || ftbSlots[iso].length === 0) {\n                                $display.val(''); $hidden.val(''); updateTimesForDate('');\n                                if (typeof Swal !== 'undefined') {\n                                    Swal.fire({\n                                        icon: 'error',\n                                        title: ftbLang === 'en'\n                                            ? 'No available time slots'\n                                            : '\u017d\u00e1dn\u00e9 voln\u00e9 term\u00edny',\n                                        text: ftbLang === 'en'\n                                            ? 'There are no available time slots on this day. Please choose another date.'\n                                            : 'Pro tento den nejsou k dispozici \u017e\u00e1dn\u00e9 voln\u00e9 term\u00edny. Vyberte pros\u00edm jin\u00e9 datum.'\n                                    });\n                                }\n                                return;\n                            }\n\n                            $hidden.val(iso);\n                            updateTimesForDate(iso);\n                        });\n                    }\n                })(jQuery);\n            }\n\n            timeSelect.addEventListener('change', updateCapacityInfo);\n\n            function validateForm() {\n                resetAllErrors();\n                var requiredFields = form.querySelectorAll('.required');\n                var hasEmpty = false;\n                for (var i = 0; i < requiredFields.length; i++) {\n                    var f = requiredFields[i];\n                    if ((f.value || '').trim() === '') { setFieldError(f); hasEmpty = true; }\n                }\n                if (hasEmpty) return false;\n\n                var gdprBox = form.querySelector('input[name=\"gdpr_consent\"]');\n                if (gdprBox && !gdprBox.checked) {\n                    setFieldError(gdprBox);\n                    if (typeof Swal !== 'undefined') {\n                        Swal.fire({\n                            icon: 'error',\n                            title: ftbLang === 'en'\n                                ? 'Consent required'\n                                : 'Souhlas vy\u017eadov\u00e1n',\n                            text: ftbLang === 'en'\n                                ? 'You must agree to the processing of personal data to submit the booking.'\n                                : 'Pro odesl\u00e1n\u00ed rezervace mus\u00edte souhlasit se zpracov\u00e1n\u00edm osobn\u00edch \u00fadaj\u016f.'\n                        });\n                    }\n                    return false;\n                }\n\n                var phoneVal = phoneInput.value.trim();\n                if (phoneVal && !ftbIsPhoneValid(phoneVal)) {\n                    setFieldError(phoneInput);\n                    if (typeof Swal !== 'undefined') {\n                        Swal.fire({\n                            icon: 'error',\n                            title: ftbLang === 'en'\n                                ? 'Invalid phone number'\n                                : 'Neplatn\u00e9 telefonn\u00ed \u010d\u00edslo',\n                            text: ftbLang === 'en'\n                                ? 'Please enter a valid phone number (at least 9 digits).'\n                                : 'Zadejte, pros\u00edm, spr\u00e1vn\u00e9 telefonn\u00ed \u010d\u00edslo (min. 9 \u010d\u00edslic).'\n                        });\n                    }\n                    return false;\n                }\n\n                var emailVal = emailInput.value.trim();\n                if (emailVal && !ftbIsEmailValid(emailVal)) {\n                    setFieldError(emailInput);\n                    if (typeof Swal !== 'undefined') {\n                        Swal.fire({\n                            icon: 'error',\n                            title: ftbLang === 'en'\n                                ? 'Invalid e-mail'\n                                : 'Neplatn\u00fd e-mail',\n                            text: ftbLang === 'en'\n                                ? 'Please enter a valid e-mail address.'\n                                : 'Zadejte, pros\u00edm, platnou e-mailovou adresu.'\n                        });\n                    }\n                    return false;\n                }\n\n                if (personsInput) {\n                    var pVal = parseInt(personsInput.value.trim(), 10);\n                    if (isNaN(pVal) || pVal < 1) {\n                        setFieldError(personsInput);\n                        if (typeof Swal !== 'undefined') {\n                            Swal.fire({\n                                icon: 'error',\n                                title: ftbLang === 'en'\n                                    ? 'Invalid number of persons'\n                                    : 'Neplatn\u00fd po\u010det osob',\n                                text: ftbLang === 'en'\n                                    ? 'Number of persons must be at least 1.'\n                                    : 'Po\u010det osob mus\u00ed b\u00fdt alespo\u0148 1.'\n                            });\n                        }\n                        return false;\n                    }\n                }\n\n                if (!dateHidden.value) { setFieldError(dateDisplay); return false; }\n\n                return true;\n            }\n\n            \/\/ AJAX submit.\n            if (form) {\n                form.addEventListener('submit', function(e) {\n                    e.preventDefault();\n                    if (!validateForm()) return;\n\n                    if (typeof Swal !== 'undefined') {\n                        Swal.fire({\n                            title: ftbLang === 'en'\n                                ? 'Sending booking...'\n                                : 'Odes\u00edl\u00e1m rezervaci...',\n                            html: ftbLang === 'en'\n                                ? 'Please wait while we process your request.'\n                                : 'Vy\u010dkejte pros\u00edm, ne\u017e zpracujeme va\u0161i \u017e\u00e1dost.',\n                            allowOutsideClick: false,\n                            allowEscapeKey: false,\n                            didOpen: function() { Swal.showLoading(); }\n                        });\n                    }\n\n                    var formData = new FormData(form);\n                    formData.append('action', 'ftb_submit_booking');\n\n                    fetch(ajaxUrl, { method: 'POST', body: formData, credentials: 'same-origin' })\n                    .then(function(r) { return r.json(); })\n                    .then(function(json) {\n                        if (json.success) {\n                            var msg = (json.data && json.data.message) ? json.data.message\n                                : (ftbLang === 'en'\n                                    ? 'Your booking has been submitted.'\n                                    : 'Va\u0161e rezervace byla odesl\u00e1na.');\n\n                            if (typeof Swal !== 'undefined') {\n                                Swal.fire({\n                                    icon: 'success',\n                                    title: ftbLang === 'en'\n                                        ? 'Booking sent'\n                                        : 'Rezervace odesl\u00e1na',\n                                    html: msg\n                                }).then(function() { window.location.reload(); });\n                            } else {\n                                alert(msg);\n                                window.location.reload();\n                            }\n                        } else {\n                            var message = '';\n                            if (json.data) {\n                                if (json.data.errors && json.data.errors.length) { message = json.data.errors.join('<br>'); }\n                                else if (json.data.message) { message = json.data.message; }\n                            }\n                            if (!message) {\n                                message = ftbLang === 'en'\n                                    ? 'There was an error submitting the booking.'\n                                    : 'Do\u0161lo k chyb\u011b p\u0159i odes\u00edl\u00e1n\u00ed rezervace.';\n                            }\n\n                            if (typeof Swal !== 'undefined') {\n                                Swal.fire({\n                                    icon: 'error',\n                                    title: ftbLang === 'en'\n                                        ? 'Error'\n                                        : 'Chyba',\n                                    html: message\n                                });\n                            } else {\n                                alert(message);\n                            }\n                        }\n                    })\n                    .catch(function() {\n                        var msg = ftbLang === 'en'\n                            ? 'Unexpected error. Please try again.'\n                            : 'Neo\u010dek\u00e1van\u00e1 chyba. Zkuste to pros\u00edm znovu.';\n\n                        if (typeof Swal !== 'undefined') {\n                            Swal.fire({\n                                icon: 'error',\n                                title: ftbLang === 'en'\n                                    ? 'Error'\n                                    : 'Chyba',\n                                text: msg\n                            });\n                        } else {\n                            alert(msg);\n                        }\n                    });\n                });\n            }\n        });\n        <\/script>\n\n        \n","protected":false},"excerpt":{"rendered":"<p>Would you like to see how a&nbsp;car is made? How coils of steel sheet become a&nbsp;new, reliable vehicle? How many processes it takes to create this symphony of human hands and robots? Book a&nbsp;tour of our factory and step into the world of automotive production for a&nbsp;while! Together we will set out on the journey [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":3003,"menu_order":40,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-3929","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/pages\/3929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/comments?post=3929"}],"version-history":[{"count":7,"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/pages\/3929\/revisions"}],"predecessor-version":[{"id":4103,"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/pages\/3929\/revisions\/4103"}],"up":[{"embeddable":true,"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/pages\/3003"}],"wp:attachment":[{"href":"https:\/\/www.toyotacz.com\/en\/wp-json\/wp\/v2\/media?parent=3929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}