$(document).ready(function () { // menu ShowMenu(); // click tab enableSmoothScroll("#tab a", 800); btnPricing(); showInput(); showSelect(); }) function ShowMenu() { $menu = $('#js-show-menu .item-menu a'); $box_menu = $('#box-menu'); $menu.on('click', function () { $data_menu = $(this).attr('data-menu'); $('.content-menu').addClass('hidden') $('#' + $data_menu).removeClass('hidden'); if ($(this).hasClass('active')) { $(this).removeClass('active'); $('#background-opacity').addClass('hidden'); $('#box-menu').addClass('translate-y-[-100%]'); $(this).find($('i')).removeClass('fa-sort-up mt-[10px]'); } else { $(this).addClass('active'); $('#background-opacity').removeClass('hidden'); $('#box-menu').removeClass('translate-y-[-100%]'); $(this).find($('i')).addClass('fa-sort-up mt-[10px]'); } }) } function closeBackgorund() { $('#background-opacity').addClass('hidden'); $('#box-menu').addClass('translate-y-[-100%]'); $('#js-show-menu .item-menu').find($('i')).removeClass('fa-sort-up mt-[10px]'); } function toggleFaq(el) { var $el = $(el); var $content = $el.next(".content-faq"); var $icon = $el.find("i"); if ($content.hasClass("open")) { // Đóng $content.removeClass("open").css("max-height", 0); $icon.removeClass("rotate-180"); } else { // Đóng các FAQ khác (nếu muốn accordion) $(".content-faq").removeClass("open").css("max-height", 0); $(".title i").removeClass("rotate-180"); // Mở $content.addClass("open").css("max-height", $content.prop("scrollHeight") + "px"); $icon.addClass("rotate-180"); } } function enableSmoothScroll(selector, speed) { $(selector).click(function (e) { e.preventDefault(); var target = $($(this).attr("href")); if (target.length) { $("html, body").animate( { scrollTop: target.offset().top - 100 }, speed ); } }); } function btnPricing() { $('#billingToggle').on('change', function () { if ($(this).is(':checked')) { // Annually $('#labelMonthly').removeClass('text-black').addClass('text-gray-500'); $('#labelAnnually').removeClass('text-gray-500').addClass('text-black'); $('#toggleBox').removeClass('border-gray-300').addClass('border-black') .addClass('after:translate-x-6'); } else { // Monthly $('#labelAnnually').removeClass('text-black').addClass('text-gray-500'); $('#labelMonthly').removeClass('text-gray-500').addClass('text-black'); $('#toggleBox').removeClass('border-black').addClass('border-gray-300') .removeClass('after:translate-x-6'); } }) } function showCompare() { $('.item-compare i').toggleClass('fa-plus fa-minus'); $('.content-compare').toggleClass('hidden mt-[15px] pt-[15px]'); } function showInput() { $('.form-input input').on('focus', function () { $lable = $(this).closest($('.form-input')).find($('label')); $error = $(this).closest($('.check-form')).find('.note-error'); $lable.toggleClass('top-[-1.75rem] text-[15px] text-[12px]'); $error.html(''); }) } function showSelect() { $('.form-select').on('click', function () { $(this).find($('label')).removeClass('text-[15px] top-[2px]') $(this).find($('label')).addClass('top-[-1.75rem] text-[12px]'); }) } function checkInputName() { var error = false; var check_name = document.getElementById('first_name').value; var $name = $('#first_name'); var item_name = $name.parents(".check-form"); if (check_name.length < 4) { item_name.find($('.note-error')).html("Tên quá ngắn"); error = true; } else if (check_name.indexOf(' -1) { item_name.find($('.note-error')).html("Họ tên chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại"); error = true; } else { item_name.find($('.note-error')).html(""); } return error } function checkInputPhone() { var number_regex1 = /^[0]\d{9}$/i; var number_regex2 = /^[0]\d{10}$/i; var check_tel = document.getElementById('phone').value; var $tel = $("#phone"); var item_tel = $tel.parents(".check-form"); if (check_tel.length < 4) { item_tel.addClass('error') item_tel.find($('.note-error')).html("Bạn chưa nhập SĐT"); error = true; } else if (!check_tel.match(number_regex1) && !check_tel.match(number_regex2)) { item_tel.addClass('error') item_tel.find($('.note-error')).html("Số điện thoại chưa chính xác"); error = true; } else { item_tel.removeClass('error'); item_tel.find($('.note-error')).html(""); } return error } function checkInputEmail() { var check_email = document.getElementById('email').value; var $email = $("#email"); var item_email = $email.parents(".check-form"); if (check_email.length < 4) { item_email.addClass('error') item_email.find($('.note-error')).html("Bạn chưa nhập Email"); error = true; } else if (!validateEmail(check_email)) { item_email.addClass('error') item_email.find($('.note-error')).html("Địa chỉ email chưa chính xác"); error = true; } else { item_email.removeClass('error'); item_email.find($('.note-error')).html(""); } return error } function checkProvince() { var check_province = document.getElementById('province').value; var $check_province = $('#province'); var item_province = $check_province.parents('.check-form'); if (check_province == 0) { item_province.addClass('error'); item_province.find($('.note-error')).html("Bạn chưa chọn Tỉnh/Thành phố"); error = true; } else { item_province.removeClass('error'); item_province.find($('.note-error')).html(""); } return error; } function checkInputShop() { var error = false; var check_shop = document.getElementById('shop').value; var $shop = $('#shop'); var item_shop = $shop.parents(".check-form"); if (check_shop.length < 4) { item_shop.find($('.note-error')).html("Tên quá ngắn"); error = true; } else if (check_shop.indexOf(' -1) { item_shop.find($('.note-error')).html("Tên chứa các ký tự không hợp lệ, bạn vui lòng kiểm tra lại"); error = true; } else { item_shop.find($('.note-error')).html(""); } return error } function checkformTrial() { var error = false; checkInputName(); checkInputPhone(); checkInputEmail(); checkInputShop(); checkProvince(); if (error) { alert('Vui lòng kiểm tra lại thông tin'); return false; } else { $(".button-send").css("pointer-events", "none"); $(".button-send").html("ĐANG XỬ LÝ..."); localStorage.getItem("Key_voucher"); return true; } } function validateEmail(sEmail) { var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/; if (filter.test(sEmail)) { return true; } else { return false; } } function initPasswordStrength() { const inputPassword = document.getElementById('password'); const toggleBtn = document.getElementById('togglePassword'); const strengthBar = document.getElementById('strengthBar'); const strengthText = document.getElementById('strengthText'); const submitBtn = document.getElementById('submitBtn'); // Đánh giá mật khẩu function evaluateStrength(password) { let score = 0; if (password.length >= 8) score++; if (/[A-Z]/.test(password)) score++; if (/\d/.test(password)) score++; if (/[^A-Za-z0-9]/.test(password)) score++; return score; // 0..4 } // Render UI function renderStrength(score) { let label = "—", color = "bg-gray-300", width = "0%"; if (score === 1) { label = "yếu"; color = "bg-red-500"; width = "25%"; } if (score === 2) { label = "trung bình"; color = "bg-yellow-500"; width = "50%"; } if (score === 3) { label = "khá"; color = "bg-lime-500"; width = "75%"; } if (score === 4) { label = "mạnh"; color = "bg-green-500"; width = "100%"; } const levels = [ { label: "—", color: "bg-gray-300", width: "0%" }, { label: "yếu", color: "bg-red-500", width: "25%" }, { label: "trung bình", color: "bg-yellow-500", width: "50%" }, { label: "khá", color: "bg-lime-500", width: "75%" }, { label: "mạnh", color: "bg-green-500", width: "100%" } ]; const level = levels[score]; strengthBar.className = "h-1 rounded transition-all " + level.color; strengthBar.style.width = width; strengthText.textContent = "Độ mạnh của mật khẩu: " + level.label; submitBtn.disabled = score < 3; } // Event nhập mật khẩu inputPassword.addEventListener('input', e => { $('#check-pass').removeClass('hidden'); const score = evaluateStrength(e.target.value); renderStrength(score); }); // Toggle hiển thị/ẩn mật khẩu toggleBtn.addEventListener('click', () => { inputPassword.type = inputPassword.type === 'password' ? 'text' : 'password'; }); renderStrength(0); // khởi tạo } initPasswordStrength();