function removeSelectBtn(){ $(".support-btn").each(function( index ) { if($(this).hasClass("btn-primary")){ $(this).removeClass("btn-primary"); $(this).addClass("btn-default"); $("."+$(this).attr("data-class")).hide(); } }); } function overlay(state) { var overlayEl = $('.overlay') if (state == 'show') { overlayEl.addClass('show') } else { overlayEl.removeClass('show') } } jQuery(document).ready(function(){ $(".support-btn").click(function(){ var sefl = $(this); removeSelectBtn(); sefl.removeClass("btn-default"); sefl.addClass("btn-primary"); $("."+$(this).attr("data-class")).show(); }); // validate form $.validator.addMethod( "regex", function(value, element, regexp) { var check = false; return this.optional(element) || regexp.test(value); }, "Please check your input." ); jQuery.validator.addMethod("email", function(value, element){ var $reg = /^[a-zA-Z0-9][a-zA-Z0-9\._]{2,62}[a-zA-Z0-9]@[a-z0-9\-]{3,}(\.[a-z]{2,20}){0,1}(\.[a-z]{2,4}){1,2}$/; return this.optional(element) || $reg.test(value); }, "Địa chỉ email không hợp lệ"); jQuery.validator.addMethod("phone", function(value, element){ var $reg1 = /^0[2-8]\d{8}$/, $reg2 = /^09\d{8}$/, $reg3 = /^0[2-8]\d{8}$/; return this.optional(element) || $reg1.test(value) || $reg2.test(value) || $reg3.test(value); }, "Số điện thoại không hợp lệ."); $("#sendpwtoemail").validate({ rules: { username: { required: true, minlength: 4, maxlength: 100, remote: { url: 'validate-field.php', type: 'POST', cache: false, dataType: 'JSON', data: { username: function() { return $('#username').val(); }, validate: 'usernameFound' } } }, email: { required: true, email: true } }, messages: { username: { required: "Bạn chưa nhập Tên đăng nhập.", minlength: "Tên đăng nhập phải có ít nhất 4 kí tự.", maxlength: "Tên đăng nhập phải ít hơn 100 kí tự." }, email: { required: "Địa chỉ Email không được để trống.", email : "Định dạng Email không hợp lệ." } } }); var otpForgotPasswordTime = 180; var countDownInterval; function countDownRegetOtp() { otpForgotPasswordTime = 180 if (countDownInterval) { clearInterval(countDownInterval) } countDownInterval = setInterval(function() { otpForgotPasswordTime--; $('#resendOtp').attr('disabled', true) $('#forgotPasswordWithSms #resendOtp').text('Gửi lại mã OTP (' + otpForgotPasswordTime + 's)') if (otpForgotPasswordTime <= 0) { $('#resendOtp').attr('disabled', false) $('#forgotPasswordWithSms #resendOtp').text('Gửi lại mã OTP') clearInterval(countDownInterval) } }, 1000) } $('#changePhone').click(function() { var step = $('#forgotPasswordWithSms').attr('step') if (step == 2) { $('#forgotPasswordWithSms').attr('step', 1) $('#forgotPasswordWithSms').find($('#phone')).attr('disabled', false); if (countDownInterval) { clearInterval(countDownInterval) } } }) $('#resendOtp').click(function() { $('#resendOtp').attr('disabled', true) var phone = $('#forgotPasswordWithSms #phone').val() sendOTP(phone) countDownRegetOtp() }) $('#forgotPasswordWithSms .confirm-button').click(function () { var phone = $('#forgotPasswordWithSms #phone').val() var step = $('#forgotPasswordWithSms').attr('step') if (step == 1) { var validatePhone = new RegExp(/(0)+([0-9]{9})\b/g) if (!phone || phone.trim() == '' || !validatePhone.test(phone) ) { $('#forgotPasswordWithSms #phone-error').removeClass('hidden') $('#forgotPasswordWithSms #phone').addClass('error') } else { $('#forgotPasswordWithSms #phone-error').addClass('hidden') $('#forgotPasswordWithSms #phone').removeClass('error') sendOTP(phone) } } if (step == 2) { var otp = $('#forgotPasswordWithSms #otp').val() if (otp.trim() != '') { checkOtpCode(phone, otp) } } if (step == 4) { var otp = $('#forgotPasswordWithSms #otp').val() var password = $('.passwordInput [name="password"]').val() var userid = $('.account-item[selected="selected"]').data('id') if (checkPassword() && checkRePassword()) { changePassword(userid, otp, password) } } }) function sendOTP (phone) { overlay('show'); $.ajax({ url: 'forgot_password_sms2.php', type: 'POST', data: { phone: phone, action: 'CHECK_PHONE' }, dataType: 'JSON', success: function (response) { overlay('hide'); $('#forgotPasswordWithSms').find('.alertMsg').html('') switch (response.status) { case 'success': localStorage.setItem('otpForgotPassword', new Date()) $('#forgotPasswordWithSms').find($('#phone')).attr('disabled', true); $('#forgotPasswordWithSms').attr('step', 2) countDownRegetOtp() break; case 'error': $('#forgotPasswordWithSms').find('.alertMsg').html('
' + response.message.replace(/\\/g, "") + '
'); break; } } }); } function changePassword (userid, otp, password) { overlay('show'); $.ajax({ url: 'forgot_password_sms2.php', type: 'POST', data: { userid: userid, code: otp, password: password, action: 'CHANGE_PASSWORD' }, dataType: 'JSON', success: function (response) { overlay('hide'); $('#forgotPasswordWithSms').find('.alertMsg').html('') switch (response.status) { case 'success': $('#forgotPasswordWithSms').attr('step', 5) $('.suggest').css('display', 'none') break; case 'error': $('#forgotPasswordWithSms').find('.alertMsg').html('
' + response.message.replace(/\\/g, "") + '
'); break; } } }); } function checkOtpCode (phone, otp) { overlay('show'); $.ajax({ url: 'forgot_password_sms2.php', type: 'POST', data: { phone: phone, code: otp, action: 'VERIFY_OTP' }, dataType: 'JSON', success: function (response) { overlay('hide'); $('#forgotPasswordWithSms').find('.alertMsg').html('') switch (response.status) { case 'success': var html = ''; if (response.data) { Object.keys(response.data).forEach(key => { var element = response.data[key] html += '
' html += '
' html += '' html += '' html += '
' html +='
' }) $('.account-select').html(html) $('#forgotPasswordWithSms').attr('step', 3) $('.suggest span').text('Các tài khoản có chung số điện thoại, chọn để đổi mật khẩu') } break; case 'error': $('#forgotPasswordWithSms').find('.alertMsg').html('
' + response.message.replace(/\\/g, "") + '
'); break; } } }); } $('.account-select').delegate('.account-item', 'click', function () { $('.account-item').attr('selected', false) var userid = $(this).data('id') $(this).attr('selected', true) var email = $('.account-item[data-id="' + userid + '"] .account-email').text() $('.suggest span').text('Đổi mật khẩu cho tài khoản ' + email) $('.action-panel .confirm-button').text('Đổi mật khẩu') if ($('.account-item').length > 1) { $('.action-panel .step-back').css('display', 'block') } $('#forgotPasswordWithSms').attr('step', 4) }) function checkPassword () { var element = $('.passwordInput [name="password"]') var alertElement = $('.form-text.alert[for="'+ $(element).attr('id') +'"]') var inputValue = $(element).val() alertElement.text('') if (inputValue.length < 8) { alertElement.text('Mật khẩu phải có ít nhất 8 ký tự') return false } return true } function checkRePassword () { var element = $('.passwordInput [name="re-password"]') var alertElement = $('.form-text.alert[for="'+ $(element).attr('id') +'"]') var rePasswordValue = $(element).val() var passwordValue = $('.passwordInput [name="password"]').val() alertElement.text('') if (rePasswordValue != passwordValue) { alertElement.text('Mật khẩu không khớp') return false } return true } $('.passwordInput [name="password"]').keyup(function () { checkPassword() checkRePassword() }) $('.passwordInput [name="re-password"]').keyup(function () { checkPassword() checkRePassword() }) $('#forgotPasswordWithSms .action-panel .step-back').click( function () { $('#forgotPasswordWithSms').attr('step', 3) }) $("#sendpwtosms").validate({ rules: { username: { required: true, minlength: 4, maxlength: 100, remote: { url: 'validate-field.php', type: 'POST', cache: false, dataType: 'JSON', data: { username: function() { return $('#username2').val(); }, validate: 'usernameEmailFound' } } }, phone: { required: true, phone: true } }, messages: { username: { required: "Bạn chưa nhập Tên đăng nhập.", minlength: "Tên đăng nhập phải có ít nhất 4 kí tự.", maxlength: "Tên đăng nhập phải ít hơn 100 kí tự." }, phone: { required: "Bạn chưa nhập số điện thoại.", phone: "Số điện thoại không hợp lệ." } }, submitHandler: function(form) { var thisForm = $(form); if (thisForm.valid()) { $.ajax({ url: thisForm.attr('action'), type: 'POST', data: thisForm.serialize(), dataType: 'JSON', success: function (response) { switch (response.status) { case 'success': $('#alertSMS').find('.modal-body').html(response.message); $('#alertSMS').modal('show'); thisForm.find('.alertMsg').html(''); thisForm.find($('#username2')).val(''); thisForm.find($('#phone')).val(''); break; case 'error': thisForm.find('.alertMsg').html('
' + response.message.replace(/\\/g, "") + '
'); break; } } }); } } }); $("#signupforms").validate({ rules: { name: { required: true, minlength: 4, maxlength: 100, regex: /^[a-zA-ZÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳýỵỷỹ]([-']?[a-zA-ZÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳýỵỷỹ]+)*( [a-zA-ZÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳýỵỷỹ]([-']?[a-zA-ZÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚĂĐĨŨƠàáâãèéêìíòóôõùúăđĩũơƯĂẠẢẤẦẨẪẬẮẰẲẴẶẸẺẼỀỀỂưăạảấầẩẫậắằẳẵặẹẻẽềềểỄỆỈỊỌỎỐỒỔỖỘỚỜỞỠỢỤỦỨỪễệỉịọỏốồổỗộớờởỡợụủứừỬỮỰỲỴÝỶỸửữựỳýỵỷỹ]+)*)+$/ }, emailtxt: { required: true, email: true, remote: { url: 'validate-field.php', type: 'POST', cache: false, dataType: 'JSON', data: { email: function() { return $('#emailtxt').val(); }, validate: 'email' } } }, phonetxt:{ required: true, phone: true, }, passwordtxt: { required: true, minlength: 8, maxlength: 100, regex : /.{8,100}$/ }, repaswordtxt: { equalTo: "#passwordtxt" } }, messages: { name: { required: "Họ và tên không được để trống.", minlength: "Họ và tên phải có ít nhất 4 kí tự.", maxlength: "Họ và tên không vượt quá 100 kí tự.", regex: "Họ và tên chỉ bao gồm chữ (viết hoa, viết thường) và có ít nhất hai từ tách biệt." }, emailtxt: { required: "Email không được để trống.", email: "Định dạng email không hợp lệ." }, phonetxt:{ required: "Số điện thoại không được để trống.", phone: "Định dạng số điện thoại không hợp lệ." }, passwordtxt: { required: "Mật khẩu không được để trống.", minlength: "Mật khẩu phải có ít nhất 8 kí tự.", maxlength: "Mật khẩu không vượt quá 100 kí tự.", regex : "Mật khẩu có độ dài từ 8 ký tự trở lên. Mật khẩu nên bao gồm cả chữ (viết hoa, viết thường), số và các ký tự đặc biệt như *, &, @..." }, repaswordtxt: { equalTo: "Xác nhận mật khẩu không khớp. Vui lòng nhập lại." } }, submitHandler: function(form) { var thisForm = $(form); if(thisForm.valid()) { $.ajax({ url: "register.php", method: "POST", data: { name : $("#name").val(), password : $("#passwordtxt").val(), email : $("#emailtxt").val(), phone : $("#phonetxt").val() }, dataType: "JSON", success: function(response) { switch (response.status) { case 'success': window.location.href = '/user/profile/confirm-phone.php?a=' + response.destination; break; case 'redirect': window.location.href = response.url; break; case 'error': thisForm.find('.alertMsg').html('
' + response.message + '
'); if(response.error_password === 1){ $('#password-error').html(response.message); $('.alertMsg').html(''); } break; } } }); } } }); function checkStrength(password) { //initial strength var strength = 0; //if the password length is less than 4, return message. if (password.length < 4) { return 'Quá ngắn'; } //if length is 8 characters or more, increase strength value if (password.length > 7) strength += 1; //if password contains both lower and uppercase characters, increase strength value if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/)) strength += 1; //if it has numbers and characters, increase strength value if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/)) strength += 1; //if it has one special character, increase strength value if (password.match(/([!,%,&,@,#,$,^,*,?,_,~])/)) strength += 1; //if it has two special characters, increase strength value if (password.match(/(.*[!,%,&,@,#,$,^,*,?,_,~].*[!,%,&,@,#,$,^,*,?,_,~])/)) strength += 1; //if value is less than 2 if (strength < 2 ) { return 'Yếu'; } else if (strength == 2 ) { return 'Khá tốt'; } else { return 'Mạnh'; } } $('#signupforms #passwordtxt').on('keyup', function(e){ var passInput = $(this).val(); var passStrength = $('#pass-strength'); var width = $(window).width(); if (passInput.length) { var strength = checkStrength(passInput); var title = 'Độ mạnh mật khẩu: ' + strength; var content = 'Mật khẩu có độ dài từ 8 ký tự trở lên. Mật khẩu nên bao gồm cả chữ (viết hoa, viết thường), số và các ký tự đặc biệt như *, &, @...'; var html; if (strength == 'Quá ngắn') { html = '
'; } else if (strength == 'Yếu') { html = '
'; } else if (strength == 'Khá tốt') { html = '
'; } else if (strength == 'Mạnh') { html = '
'; } if (width > 768) { passStrength.data('placement', 'left'); } else { passStrength.data('placement', 'bottom'); } passStrength.attr('data-original-title', title + html); passStrength.data('content', content); if(passStrength.data('bs.popover')) { passStrength.data('bs.popover').options.content = content; } passStrength.popover('show'); } else { passStrength.popover('hide'); } }); $('#signupforms #passwordtxt').focusout(function(){ $('#pass-strength').popover('destroy'); }); $('#signupforms #name').click(function(){ var content = 'Vui lòng nhập Họ và tên của bạn.'; var username = $(this); var width = $(window).width(); if (width <= 768) { username.data('placement', 'right'); } else { username.data('placement', 'left'); } username.data('content', content); username.popover('show'); }); $('#signupforms #name').focusout(function(){ $(this).popover('destroy'); }); $('#signupforms #emailtxt').click(function(){ var content = 'Chúng tôi sẽ sử dụng địa chỉ Email này cho những việc như bảo mật tài khoản của bạn, gửi thông báo cho bạn. Vui lòng nhập chính xác địa chỉ email của bạn.'; var email = $(this); var width = $(window).width(); if (width <= 768) { email.data('placement', 'right'); } else { email.data('placement', 'left'); } email.data('content', content); email.popover('show'); }); $('#signupforms #emailtxt').focusout(function(){ $(this).popover('destroy'); }); $('#signupforms #phonetxt').click(function(){ var content = 'Chúng tôi sẽ sử dụng số điện thoại này cho những việc như bảo mật tài khoản của bạn, gửi thông báo cho bạn. Vui lòng nhập chính xác số điện thoại của bạn của bạn.'; var phone = $(this); var width = $(window).width(); if (width <= 768) { phone.data('placement', 'right'); } else { phone.data('placement', 'left'); } phone.data('content', content); phone.popover('show'); }); $('#signupforms #phonetxt').focusout(function(){ $(this).popover('destroy'); }); $('#sso-form').validate({ rules: { username: { required: true }, password: { required: true } }, messages: { username: { required: 'Tên tài khoản không được để trống.' }, password: { required: 'Mật khẩu không được để trống.' } } }); $('#profile-form select').select2(); $('#profile-form').validate({ rules: { name: {required: true}, // ngay: {required: true}, // thang: {required: true}, // nam: {required: true}, banla: { required: true }, phone: { required: true, phone: true }, city: { required: true }, district: { required: true }, school_class: { required: true }, school: { required: true } }, messages: { name: { required: 'Bạn chưa nhập tên.' }, // ngay: { // required: 'Bạn chưa chọn ngày.' // }, // thang: { // required: 'Bạn chưa chọn tháng.' // }, // nam: { // required: 'Bạn chưa chọn năm.' // }, banla: { required: 'Bạn là học sinh, phụ huynh hay giáo viên?' }, phone: { required: 'Số điện thoại không được để trống.', phone: 'Số điện thoại không hợp lệ.' }, city: { required: 'Bạn chưa chọn tỉnh/thành phố.' }, district: { required: 'Bạn chưa chọn quận/huyện.' }, school_class: { required: 'Bạn chưa chọn lớp.' }, school: { required: 'Bạn chưa chọn trường.' } }, submitHandler: function(form) { var thisForm = $(form); $.ajax({ url: 'update-profile.php', method: 'post', data: thisForm.serialize(), dataType: 'json', success: function(response) { switch (response.status) { case 'success': window.location.href = 'comfirmsuccess.php'; break; case 'redirect': window.location.href = response.url; break; case 'error': thisForm.find('.alertMsg').html('
' + response.message.replace(/\\/g, "") + '
'); break; } } }) } }); function getDistrict(city, callback) { $.post('get-district.php', { city: city }, function(data) { if (typeof callback === 'function') { callback(data); } }, 'JSON'); } function getSchools (city, district, schoolClass, callback) { if (schoolClass == '') { schoolClass = 0; } if (district == '') { district = ''; } $.post('getschool.php', { city: city, district: district, schoolClass: schoolClass }, function(data) { if (typeof callback === 'function') { callback(data); } }, 'JSON'); } $('#banla').change(function(){ $('#schoolClass').val(''); $('#school').val(''); if ($(this).val() == 0) { $('#schoolClass').prop('disabled', false).trigger('change'); $('#school').prop('disabled', false).trigger('change'); $('#schoolClass-error').show(); $('#school-error').show(); } else { $('#schoolClass').prop('disabled', true).trigger('change'); $('#school').prop('disabled', true).trigger('change'); $('#schoolClass-error').hide(); $('#school-error').hide(); } }); $('#city').change(function() { var city = $(this).val(); $('#district').html('').trigger('change'); $('#schoolClass').val('').trigger('change'); $('#school').html('').trigger('change'); if($('#banla').val() == 0){ $('#schoolClass-error').show(); $('#school-error').show(); }else{ $('#schoolClass-error').hide(); $('#school-error').hide(); } if (city != '') { getDistrict(city, function (data) { var sl = $('#district'); sl.empty(); sl.append(''); if (data.status == 'success') { for (var i = 0; i < data.data.length; i++) { sl.append('') } } sl.select2(); if (districtShort) { sl.val(districtShort); sl.trigger('change'); districtShort = ''; } }); } }); $('#district').change(function() { var district = $(this).val(); var city = $('#city').val(); $('#schoolClass').val('').trigger('change'); $('#school').html('').trigger('change'); if($('#banla').val() == 0){ $('#schoolClass-error').show(); $('#school-error').show(); }else{ $('#schoolClass-error').hide(); $('#school-error').hide(); } if (city != '' && district != '') { var schoolClass = $('select[name="school_class"]'); var schoolClassData = schoolClass.val(); getSchools(city, district, schoolClassData, function (data) { var sl = $('select[name="school"]'); sl.empty(); sl.append(''); if (data.status == 'success') { for (var i = 0; i < data.data.length; i++) { sl.append('') } } sl.select2(); if (schoolId >0 ){ sl.val(schoolId); sl.trigger('change'); schoolId = 0; } }); } }); $('select[name="school_class"]').change(function() { var districtSelect = $('#district'); var district = districtSelect.val(); var citySelect = $('#city'); var city = citySelect.val(); var schoolClassData = $(this).val(); $('#school').html('').trigger('change'); if (city != '' && district != '' && schoolClassData != '') { getSchools(city, district, schoolClassData, function (data) { var sl = $('select[name="school"]'); sl.empty(); sl.append(''); if (data.status == 'success') { for (var i = 0; i < data.data.length; i++) { sl.append('') } } sl.select2(); }); } }); });