{"id":48235,"date":"2026-03-20T18:18:24","date_gmt":"2026-03-20T10:18:24","guid":{"rendered":"https:\/\/flowtaipei.com\/?page_id=48235"},"modified":"2026-04-07T21:36:29","modified_gmt":"2026-04-07T13:36:29","slug":"level-audition","status":"publish","type":"page","link":"https:\/\/flowtaipei.com\/en\/level-audition\/","title":{"rendered":"Level Audition"},"content":{"rendered":"\r\n\r\n<link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\"\r\n      integrity=\"sha384-EVSTQN3\/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC\" crossOrigin=\"anonymous\">\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.0.2\/dist\/js\/bootstrap.bundle.min.js\"\r\n        integrity=\"sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn\/tWtIaxVXM\"\r\n        crossOrigin=\"anonymous\"><\/script>\r\n\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery-confirm\/3.3.2\/jquery-confirm.min.css\">\r\n<link href=\"https:\/\/code.jquery.com\/ui\/1.11.4\/themes\/smoothness\/jquery-ui.css\" rel=\"stylesheet\" type=\"text\/css\">\r\n\r\n<script src=\"https:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/3.6.0\/jquery.min.js\"><\/script>\r\n<script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jquery-confirm\/3.3.4\/jquery-confirm.min.js\"\r\n        integrity=\"sha512-zP5W8791v1A6FToy+viyoyUUyjCzx+4K8XZCKzW28AnCoepPNIXecxh9mvGuy3Rt78OzEsU+VCvcObwAMvBAww==\"\r\n        crossOrigin=\"anonymous\" referrerpolicy=\"no-referrer\"><\/script>\r\n\r\n<script src=\"https:\/\/code.jquery.com\/ui\/1.12.1\/jquery-ui.js\"><\/script>\r\n\r\n<script>\r\n    function openModal(profilepicture){\r\n        \/\/ Get the modal\r\n        let modal = document.getElementById(\"myModal\");\r\n        closeModal();\r\n\/\/ Get the image and insert it inside the modal - use its \"alt\" text as a caption\r\n        let img = document.getElementById(\"myImg\");\r\n        let modalImg = document.getElementById(\"img01\");\r\n        let captionText = document.getElementById(\"caption\");\r\n\r\n        \/\/modal.style.display = \"flex\";\r\n        modalImg.src = profilepicture;\r\n        modalImg.style=\"max-width:300px;max-height=300px\";\r\n        modal.style.display= \"inline-block\";\r\n        modal.style.vertical=\"align:middle\";\r\n\r\n        \/\/captionText.innerHTML = this.alt;\r\n\r\n\r\n    }\r\n\r\n    function closeModal(){\r\n        let modal = document.getElementById(\"myModal\");\r\n        modal.style.display = \"none\";\r\n\r\n    }\r\n<\/script>\r\n\r\n<div class=\"flow_container_90_500_center\">\r\n    <h3>Taiwan Zouk Festival 2026<br>\r\n        Level Audition Video Upload <\/h3>\r\n\r\n    <span style=\"color:blue;font-weight:bold;\">Read the instructions below before submitting<\/span>\r\n\r\n    <div style=\"padding:75% 0 0 0;position:relative;\"><iframe src=\"https:\/\/player.vimeo.com\/video\/1180454619?badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" style=\"position:absolute;top:0;left:0;width:100%;height:100%;\" title=\"TZF_2026_level_audition\"><\/iframe><\/div><script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script>\r\n    <br>\r\n    Song: Chocolat- Ya Levis (<a href=\"https:\/\/open.spotify.com\/track\/5DlEHbXTtsbmbRjcrv4xL8?si=3abebf3d9e624dbd\" target=\"new\">Spotify Link<\/a> | <a href=\"https:\/\/www.youtube.com\/watch?v=QLHEAsdj3cE\" target=\"new\">Youtube Link<\/a>)\r\n    <br>&nbsp;<br>\r\n    <b>Read the instructions below before submitting<\/b><br>\r\n    To upload your video, first enter your information below and click verify.  This will find your pass and list any levels you are already approved for.  You can find this info on the pass which was emailed to you.<br>\r\n\r\n<\/div>\r\n\r\n<div class=\"flow_container_90_500_center\">\r\n    <div id=\"audition_final_message\" style=\"display:none; margin-top:12px; padding:12px; border:2px solid #1b5e20; background:#e8f5e9; color:#1b5e20; font-weight:bold; text-align:center;\"><\/div>\r\n    <div id=\"audition_verify_message\" style=\"margin-top:10px;\"><\/div>\r\n\r\n    <div style=\"margin-top:10px; text-align:left;\">\r\n        <label for=\"audition_pass_id\"><b>PassID<\/b><\/label><br>\r\n        <input id=\"audition_pass_id\"\r\n               type=\"text\"\r\n               inputmode=\"numeric\"\r\n               pattern=\"[0-9]*\"\r\n               maxlength=\"6\"\r\n               style=\"display: inline-block;\r\n              width: 7ch !important;\r\n              padding: 0 5px;\r\n              font-family: monospace;\r\n              text-align: center;\">\r\n    <\/div>\r\n\r\n    <div style=\"margin-top:10px; text-align:left;\">\r\n        <label for=\"audition_flow_id\"><b>FlowID<\/b><\/label><br>\r\n        <input id=\"audition_flow_id\"\r\n               type=\"text\"\r\n               inputmode=\"numeric\"\r\n               pattern=\"[0-9]*\"\r\n               maxlength=\"6\"\r\n               style=\"display: inline-block;\r\n              width: 7ch !important;\r\n              padding: 0 5px;\r\n              font-family: monospace;\r\n              text-align: center;\">\r\n    <\/div>\r\n\r\n    <div style=\"margin-top:10px; text-align:left;\">\r\n        <label for=\"audition_email\"><b>Email Address<\/b><\/label><br>\r\n        <input id=\"audition_email\" type=\"email\" autocomplete=\"email\" style=\"width:100%;\" \/>\r\n    <\/div>\r\n\r\n    <div style=\"display:none;\">\r\n        <input id=\"audition_website\" type=\"text\" value=\"\" autocomplete=\"off\" \/>\r\n    <\/div>\r\n\r\n    <div style=\"margin-top:12px;\">\r\n        <button id=\"audition_verify_btn\" type=\"button\">Verify<\/button>\r\n        <button id=\"audition_clear_btn\" type=\"button\" style=\"margin-left:8px;\">Clear<\/button>\r\n        <span id=\"audition_verify_cooldown\" style=\"margin-left:10px;\"><\/span>\r\n    <\/div>\r\n\r\n    <div id=\"audition_upload_section\" style=\"display:none; margin-top:18px; text-align:left;\">\r\n        <div id=\"audition_upload_message\" style=\"margin-bottom:10px;\"><\/div>\r\n        <label for=\"audition_video_file\"><b>Upload Video<\/b> (.mp4 or .mov, 1 minute or less)<\/label><br>\r\n        <input id=\"audition_video_file\" type=\"file\" accept=\"video\/mp4,video\/quicktime,.mp4,.mov\" \/>\r\n        <div style=\"margin-top:12px;\">\r\n            <button id=\"audition_upload_btn\" type=\"button\" disabled>Upload<\/button>\r\n            <span id=\"audition_upload_progress\" style=\"margin-left:10px;\"><\/span>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<script>\r\n    (function($){\r\n        var verifyCooldownUntilMs = 0;\r\n        var verifyCooldownTimer = null;\r\n        var verifiedResponseId = 0;\r\n        var submitted = false;\r\n\r\n        function setVerifyMessage(html){\r\n            $('#audition_verify_message').html(html);\r\n        }\r\n\r\n        function setUploadMessage(html){\r\n            $('#audition_upload_message').html(html);\r\n        }\r\n\r\n        function showFinalMessage(text){\r\n            $('#audition_final_message').text(text).show();\r\n        }\r\n\r\n        function getInputs(){\r\n            return {\r\n                passid: parseInt($('#audition_pass_id').val(), 10) || 0,\r\n                flowid: parseInt($('#audition_flow_id').val(), 10) || 0,\r\n                email: ($('#audition_email').val() || '').trim(),\r\n                website: ($('#audition_website').val() || '').trim()\r\n            };\r\n        }\r\n\r\n        function startVerifyCooldown(seconds){\r\n            verifyCooldownUntilMs = Date.now() + (seconds * 1000);\r\n            $('#audition_verify_btn').prop('disabled', true);\r\n\r\n            if(verifyCooldownTimer){\r\n                clearInterval(verifyCooldownTimer);\r\n            }\r\n\r\n            verifyCooldownTimer = setInterval(function(){\r\n                var remainingMs = verifyCooldownUntilMs - Date.now();\r\n                if(remainingMs <= 0){\r\n                    clearInterval(verifyCooldownTimer);\r\n                    verifyCooldownTimer = null;\r\n                    $('#audition_verify_btn').prop('disabled', false);\r\n                    $('#audition_verify_cooldown').text('');\r\n                    return;\r\n                }\r\n                var remaining = Math.ceil(remainingMs \/ 1000);\r\n                $('#audition_verify_cooldown').text('Please wait ' + remaining + 's');\r\n            }, 250);\r\n        }\r\n\r\n        function validateVerifyInputs(inputs){\r\n            if(inputs.website !== ''){\r\n                return 'Invalid request.';\r\n            }\r\n            if(inputs.passid <= 0){\r\n                return 'PassID is required.';\r\n            }\r\n            if(inputs.flowid <= 0){\r\n                return 'FlowID is required.';\r\n            }\r\n            if(inputs.email === ''){\r\n                return 'Email Address is required.';\r\n            }\r\n            var emailOk = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(inputs.email);\r\n            if(!emailOk){\r\n                return 'Please enter a valid email address.';\r\n            }\r\n            return '';\r\n        }\r\n\r\n        function updateUploadButtonEnabled(){\r\n            var hasFile = ($('#audition_video_file')[0].files || []).length > 0;\r\n            $('#audition_upload_btn').prop('disabled', !(verifiedResponseId !== 0 && hasFile));\r\n        }\r\n\r\n        $('#audition_clear_btn').on('click', function(){\r\n            $('#audition_pass_id').val('');\r\n            $('#audition_flow_id').val('');\r\n            $('#audition_email').val('');\r\n            $('#audition_website').val('');\r\n            setVerifyMessage('');\r\n            setUploadMessage('');\r\n            $('#audition_upload_progress').text('');\r\n            $('#audition_video_file').val('');\r\n            $('#audition_upload_section').hide();\r\n            verifiedResponseId = 0;\r\n            updateUploadButtonEnabled();\r\n        });\r\n\r\n        $('#audition_video_file').on('change', function(){\r\n            setUploadMessage('');\r\n            $('#audition_upload_progress').text('');\r\n            updateUploadButtonEnabled();\r\n        });\r\n\r\n        $('#audition_verify_btn').on('click', function(){\r\n            if(submitted){\r\n                return;\r\n            }\r\n            var nowMs = Date.now();\r\n            if(nowMs < verifyCooldownUntilMs){\r\n                return;\r\n            }\r\n\r\n            var inputs = getInputs();\r\n            var err = validateVerifyInputs(inputs);\r\n            if(err !== ''){\r\n                setVerifyMessage('<span style=\"color:#b00020;\">' + err + '<\/span>');\r\n                return;\r\n            }\r\n\r\n            startVerifyCooldown(10);\r\n            verifiedResponseId = 0;\r\n            $('#audition_upload_section').hide();\r\n            updateUploadButtonEnabled();\r\n            setVerifyMessage('Verifying...');\r\n\r\n            $.ajax({\r\n                url: 'https:\/\/flowtaipei.com\/php\/functions\/requests.php',\r\n                method: 'POST',\r\n                data: {\r\n                    request: 'audition_verification',\r\n                    passid: inputs.passid,\r\n                    flowid: inputs.flowid,\r\n                    email: inputs.email\r\n                },\r\n                cache: false\r\n            }).done(function(resp){\r\n                var trimmed = (resp || '').toString().trim();\r\n                if(trimmed === '0'){\r\n                    setVerifyMessage('<span style=\"color:#b00020;\">No pass found with that information for any event currently accepting audition videos.<\/span>');\r\n                    return;\r\n                }\r\n\r\n                verifiedResponseId = 1;\r\n                setVerifyMessage('<span style=\"color:#1b5e20;\">Verified: ' + trimmed + '<\/span>');\r\n                $('#audition_upload_section').show();\r\n                updateUploadButtonEnabled();\r\n            }).fail(function(){\r\n                setVerifyMessage('<span style=\"color:#b00020;\">Verification failed. Please try again later.<\/span>');\r\n            });\r\n        });\r\n\r\n        $('#audition_upload_btn').on('click', function(){\r\n            if(submitted){\r\n                return;\r\n            }\r\n            var inputs = getInputs();\r\n            if(verifiedResponseId === 0){\r\n                setUploadMessage('<span style=\"color:#b00020;\">Please verify first.<\/span>');\r\n                return;\r\n            }\r\n\r\n            var fileInput = $('#audition_video_file')[0];\r\n            var file = (fileInput.files || [])[0];\r\n            if(!file){\r\n                setUploadMessage('<span style=\"color:#b00020;\">Please choose a video file.<\/span>');\r\n                return;\r\n            }\r\n\r\n            var name = (file.name || '').toLowerCase();\r\n            if(!(name.endsWith('.mp4') || name.endsWith('.mov'))){\r\n                setUploadMessage('<span style=\"color:#b00020;\">Only .mp4 or .mov files are allowed.<\/span>');\r\n                return;\r\n            }\r\n\r\n            $('#audition_upload_btn').prop('disabled', true);\r\n            setUploadMessage('Uploading...');\r\n            $('#audition_upload_progress').text('');\r\n\r\n            var formData = new FormData();\r\n            formData.append('request', 'audition_upload');\r\n            formData.append('passid', inputs.passid);\r\n            formData.append('flowid', inputs.flowid);\r\n            formData.append('email', inputs.email);\r\n            formData.append('file', file);\r\n\r\n            $.ajax({\r\n                url: 'https:\/\/flowtaipei.com\/php\/functions\/requests.php',\r\n                method: 'POST',\r\n                data: formData,\r\n                processData: false,\r\n                contentType: false,\r\n                cache: false,\r\n                xhr: function(){\r\n                    var xhr = new window.XMLHttpRequest();\r\n                    xhr.upload.addEventListener('progress', function(evt){\r\n                        if(evt.lengthComputable){\r\n                            var pct = Math.round((evt.loaded \/ evt.total) * 100);\r\n                            $('#audition_upload_progress').text(pct + '%');\r\n                        }\r\n                    }, false);\r\n                    return xhr;\r\n                }\r\n            }).done(function(resp){\r\n                var trimmed = (resp || '').toString().trim();\r\n                if(trimmed === ''){\r\n                    trimmed = 'Thank you! Your audition was submitted.';\r\n                }\r\n\r\n                submitted = true;\r\n                showFinalMessage(trimmed);\r\n\r\n                $('#audition_verify_message').hide();\r\n                $('#audition_upload_section').hide();\r\n                $('#audition_verify_btn').hide();\r\n                $('#audition_clear_btn').hide();\r\n                $('#audition_verify_cooldown').text('');\r\n\r\n                $('#audition_pass_id').prop('disabled', true).hide();\r\n                $('#audition_flow_id').prop('disabled', true).hide();\r\n                $('#audition_email').prop('disabled', true).hide();\r\n                $('label[for=\"audition_pass_id\"]').hide();\r\n                $('label[for=\"audition_flow_id\"]').hide();\r\n                $('label[for=\"audition_email\"]').hide();\r\n            }).fail(function(){\r\n                setUploadMessage('<span style=\"color:#b00020;\">Upload failed. Please try again later.<\/span>');\r\n            }).always(function(){\r\n                if(!submitted){\r\n                    $('#audition_upload_btn').prop('disabled', false);\r\n                    updateUploadButtonEnabled();\r\n                }\r\n            });\r\n        });\r\n    })(jQuery);\r\n<\/script>\r\n\n<div class=\"flow_container_90_1000_center\">\n<div class=\"flow_container_90_500_left\">\n<h3 class=\"flow_c\" style=\"text-align: center;\">Instructions<\/h3>\n<p style=\"text-align: center;\"><span style=\"color: #ff0000;\">** This year (2026) to save time at the event the level assessment is *** ONLY BY VIDEO **<br \/>\n** If you have any BZDC points you are already prequalified for 2026 and do not need to audition **<br \/>\n<\/span>You can check your competition points record on the <a href=\"https:\/\/www.brazilianzoukcouncil.com\/competitions?tab=dancers\" target=\"_blank\" rel=\"noopener\">BZDC website<\/a><\/p>\n<p>Learn the below sequence and record a video with a partner *using the same song at the original speed*. If both dancers are auditioning, please upload the video for each dancer separately.<\/p>\n<p><strong>Please do not send a social dance video, do not send a link to your social media, do not DM us videos on IG, etc. We will only consider submissions of the provided sequence.<\/strong><\/p>\n<p>A panel of 3 judges will evaluate auditions and decide whether to approve based on<\/p>\n<p>1) Following the pattern accurately (timing\/direction\/head movement)<br \/>\n2) Correct and consistent timing<br \/>\n3) Control and stability<\/p>\n<p><span style=\"color: #0000ff;\">* You must already have purchased a pass to upload an audition<\/span><br \/>\n<span style=\"color: #0000ff;\">* Auditions must be received by Monday 4\/27 ! Please do them earlier if possible.<\/span><br \/>\n<span style=\"color: #0000ff;\">* The results will be communicated directly by Thursday 4\/30<\/span><\/p>\n<h3 style=\"text-align: center;\">Background Info<\/h3>\n<p>This year (2026) Taiwan Zouk Festival has 3 classrooms with two categories of classes- Open Level and Int\/Adv. Every workshop hour has two Open Level classes and one Int\/Adv class. Everyone can join Open Level classes. Int\/Adv workshops are open to dancers who:<\/p>\n<p>a) have BZDC points (1+ novice points in 2026, 2027 requirement will be higher)<\/p>\n<p>OR<\/p>\n<p>b) pass a level audition.<\/p>\n<p>*We did not carry over the audition results from 2025. If you qualified by live audition in 2025 but do not have BZDC points, you will need to qualify again for 2026.<\/p>\n<p>Please note- Int\/Adv workshops don&#8217;t necessarily make you a better dancer compared to open level classes! They just teach more difficult figures and concepts. We limit access because these require stronger fundamentals for both leader and follower to be able to learn together. Open Level workshops teach broader concepts and variations that are useful for everyone.<\/p>\n<p>If you don&#8217;t qualify for Int\/Adv classes this year, it&#8217;s not a big deal. We have twice as many Open Level classes as Int\/Adv with the same amazing artists \ud83d\ude42 If you do qualify, we encourage you to also take Open Level classes as they will teach things that are more easily absorbed and used on the social dance floor.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p> [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"default","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"wf_page_folders":[],"class_list":["post-48235","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/pages\/48235","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/comments?post=48235"}],"version-history":[{"count":26,"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/pages\/48235\/revisions"}],"predecessor-version":[{"id":48434,"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/pages\/48235\/revisions\/48434"}],"wp:attachment":[{"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/media?parent=48235"}],"wp:term":[{"taxonomy":"wf_page_folders","embeddable":true,"href":"https:\/\/flowtaipei.com\/en\/wp-json\/wp\/v2\/wf_page_folders?post=48235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}