PageSourceSearch

https://umcoin.io/wp-content/themes/flatsome-child/inc/shortcodes/auth/j-register.js?ver=1791595029

js umcoin.io collected 2026-10-10 01:17:29 UTC 18,559 bytes, 565 lines download raw bytes

1/*
2 * aff_id
3 * */
4const trackingParams = ["a","utm_campaign","utm_source","utm_medium","utm_term","utm_content"];
5const urlParams = new URLSearchParams(window.location.search);
6const aValue = urlParams.get("a");
7let aff_id = "kqbd";
8if (aValue) {
9  localStorage.setItem("aff_id", aValue);
10  aff_id = aValue;
11} else if (localStorage.getItem("aff_id")) {
12  aff_id = localStorage.getItem("aff_id");
13}
14jQuery(document).ready(function ($) {
15  if (aff_id) {
16    let affIdMetaTag = $('meta[name="affId"]');
17    if (affIdMetaTag.length === 0) {
18      $("head").append('<meta name="affId" content="">');
19      affIdMetaTag = $('meta[name="affId"]');
20    }
21    affIdMetaTag.attr("content", aff_id);
22    if ($("form#loginForm").length) {
23      $("form#loginForm").append(
24        '<input type="hidden" name="aff_id" value="' + aff_id + '">'
25      );
26    }
27    if ($("form#registerForm").length) {
28      $("form#registerForm").append(
29        '<input type="hidden" name="aff_id" value="' + aff_id + '">'
30      );
31    }
32  }
33  $("form#registerForm").append(
34    '<input type="hidden" name="doibong" value="">'
35  );
36  var dbArray = [];
37  $item = 1;
38  $('.doibong option').each(function(){
39    var img = $(this).attr("data-thumbnail");
40    var text = this.innerText;
41    var value = $(this).val();
42    var item = '<li><img src="'+ img +'" alt="" value="'+value+'"/><span>'+ text +'</span></li>';
43    dbArray.push(item);
44    if ( $item == 1 ) {
45      $("#registerForm").find('input[name="doibong"]').val(value);
46    }
47    $item += 1;
48  })
49
50  $('#a').html(dbArray);
51
52  //Set the button value to the first el of the array
53  $('.btn-select').html(dbArray[0]);
54  $('.btn-select').attr('value', 'en');
55
56  //change button stuff on click
57  $('#a li').click(function(){
58    var img = $(this).find('img').attr("src");
59    var value = $(this).find('img').attr('value');
60    var text = this.innerText;
61    var item = '<li><img src="'+ img +'" alt="" /><span>'+ text +'</span></li>';
62    $('.btn-select').html(item);
63    $('.btn-select').attr('value', value);
64    $("#registerForm").find('input[name="doibong"]').val(value);
65    $(".b").toggle();
66    //console.log(value);
67  });
68
69  $(".btn-select").click(function(){
70      $(".b").toggle();
71  });
72
73  //check local storage for the lang
74  var sessionLang = localStorage.getItem('lang');
75  if (sessionLang){
76    //find an item with value of sessionLang
77    var langIndex = dbArray.indexOf(sessionLang);
78    $('.btn-select').html(dbArray[langIndex]);
79    $('.btn-select').attr('value', sessionLang);
80  } else {
81    var langIndex = dbArray.indexOf('ch');
82    console.log(langIndex);
83    $('.btn-select').html(dbArray[langIndex]);
84    //$('.btn-select').attr('value', 'en');
85  }
86});
87
88var utm_campaign = "";
89var utm_source = "";
90var utm_medium = "";
91var utm_term = "";
92var utm_content = "form";
93const dynamic_params = true; // Change to true if want to use the tracking params from url
94const linkClassName = '.btn-utm-link a'; // Add links class to replace dynamic params
95for (const trackingParam of trackingParams) {
96  let fieldParam = (trackingParam == 'a') ? 'aff_id' : trackingParam;
97  const aValue = dynamic_params ? urlParams.get(trackingParam) : window[fieldParam];
98  if (aValue) {
99    localStorage.setItem(fieldParam, aValue);
100    window[fieldParam] = dynamic_params ? aValue : window[fieldParam];
101  } else if (localStorage.getItem(fieldParam)) {
102    window[fieldParam] = dynamic_params ? localStorage.getItem(fieldParam) : window[fieldParam];
103  }
104}
105if (linkClassName.length > 0) {
106  let utmLinks = document.querySelectorAll(linkClassName);
107  if (utmLinks.length > 0) {
108    for (const utmLink of utmLinks) {
109      const linkUrl = new URL(utmLink.href);
110      const linkHref = linkUrl.origin + linkUrl.pathname;
111      let linkParams = new URLSearchParams(linkUrl.search);
112      for (const trackingParam of trackingParams) {
113        let fieldParam = trackingParam == 'a' ? 'aff_id' : trackingParam;
114        if (trackingParam != 'utm_content' && window[fieldParam] && window[fieldParam] != 'null') {
115          linkParams.set(trackingParam,window[fieldParam]);
116        }
117      }
118      const dymamicLink = linkHref + '?' + linkParams.toString();
119      utmLink.setAttribute('href', dymamicLink);
120    }  
121  }
122}
123
124/*
125 * Register Form
126 * */
127jQuery(document).ready(function ($) {
128  /* $("#email").on({
129      keyup: function() {
130       $(this).val($(this).val().replace(/"|'| /g, ''));
131      },
132      mouseout: function() {
133        $(this).val($(this).val().replace(/"|'| /g, ''));
134      }
135  });
136  $("#phone, #dudoan").on({
137      keyup: function() {
138       $(this).val($(this).val().replace(/[^0-9]/g, ''));
139      },
140      mouseout: function() {
141       $(this).val($(this).val().replace(/[^0-9]/g, ''));
142      }
143  }); /**/
144  $(".j-register-form .show-pass").on("click", function (e) {
145      const inputEl = $(this).closest(".form-group").find("input");
146      $(this).hasClass("fa-eye-slash")
147      ? ($(this).removeClass("fa-eye-slash"), $(this).addClass("fa-eye"), inputEl.attr("type", "password"))
148      : ($(this).removeClass("fa-eye"), $(this).addClass("fa-eye-slash"), inputEl.attr("type", "text"));
149  });
150  $('.j-register-bg, .j-register-x').click(function() {
151      $('.j-register').hide();
152  });
153  $('.j-show-form').click(function() {
154      $('.j-register').show();
155  });
156  $('.tablinks').click(function() {
157    const dataTab = $(this).attr("data-tab")
158    $('.tablinks').removeClass("active");
159    $(".tabCont").hide();
160    $(this).addClass("active")
161    $("." + dataTab).show();
162    if(dataTab == 'vip') {
163    	$(".errors").hide();
164    } else {
165    	$(".errors").show();
166    }
167  });
168  // $('.btnsubmit').click(function() {
169  //   $(".j-otp").attr("disabled", "disabled");
170  //   $(".otp-error").html('OTP đang được gửi, vui lòng chờ trong giây lát.');
171  //   $(".otp-error").removeClass('hidden');
172  //   let min = Math.ceil(100);
173  //   let max = Math.floor(6000);
174  //   let randomNumber = Math.floor(Math.random() * (max - min) + min);
175  //   setTimeout(function() {
176  //     // Function to be executed after the delay
177  //     console.log (randomNumber);
178  //     onRegister();
179  //   }, randomNumber);
180  //   return !1;
181  // });
182  $.validator.addMethod(
183      "regex",
184      function (n, e, t) {
185      var r = new RegExp(t);
186      return this.optional(e) || r.test(n);
187      },
188      ""
189  ),
190  onRegisterFrmSubmit();
191});
192var showErrors = function () {
193  if (!jQuery(".phone-error").hasClass('hidden')) {
194    jQuery(".phone-error").addClass('hidden');
195  }
196  if (!jQuery(".otp-error").hasClass('hidden')) {
197    jQuery(".otp-error").addClass('hidden');
198  }
199  jQuery(".phone-error, .otp-error").html('');
200  if ((!jQuery('#phone-error').length || (jQuery('#phone-error').length && jQuery('#phone-error').is(":hidden"))) && jQuery('#phone').val()
201  && (!jQuery('#email-error').length || (jQuery('#email-error').length && jQuery('#email-error').is(":hidden"))) && jQuery('#email').val()
202  && (!jQuery('#username-error').length || (jQuery('#username-error').length && jQuery('#username-error').is(":hidden"))) && jQuery('#username').val()) {
203    jQuery(".j-otp").removeAttr("disabled");
204  } else {
205    jQuery(".j-otp").attr("disabled", "disabled");
206  }
207};
208var onRegisterFrmSubmit = function () {
209  jQuery.validator.addMethod(
210    "phoneVN",
211    function (phone_number, element) {
212      phone_number = phone_number.replace(/\s+/g, "");
213      return (
214        this.optional(element) ||
215        (phone_number.length >= 10 && phone_number.match(/^\+?[0-9]+$/))
216      );
217    },
218    "Số điện thoại không hợp lệ."
219  );
220  jQuery.validator.addMethod(
221    "pwdSpecial",
222    function (pwd, element) {
223      pwd = pwd.replace(/\s+/g, "");
224      return (
225        this.optional(element) ||
226        (pwd.match(/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d@$!%*?&-_]{6,32}$/g))
227      );
228    },
229    "Mật khẩu chứa ít nhất 1 ký tự số, 1 ký tự chữ."
230  );
231  jQuery("#registerForm").validate({
232    rules: {
233      phone: {
234        required: !0,
235        regex: /^0[0-9]*$/g,
236        minlength: 10,
237        maxlength: 10,
238        phoneVN: true,
239      },
240      username: {
241        required: !0,
242        regex: /^[A-Za-zÀ-ỹ ]*$/g,
243        minlength: 6,
244        maxlength: 29,
245      },
246      password: {
247        required: !0,
248        minlength: 8,
249        maxlength: 29,
250        regex: /^[A-Za-z\d@$!%*?&-_]{6,32}$/g,
251        pwdSpecial: true,
252      },
253      repeat_pwd: {
254        required: !0,
255        equalTo: "#pwd",
256      },
257      email: {
258        required: !0,
259        // regex: /^[^\s@]+@[^\s@]+\.[^\s@]{2,}$/g,
260        regex: /^[A-Za-z\d]+@[A-Za-z\d]+\.[A-Za-z\d\.]{2,}$/g,
261        minlength: 6,
262      },
263      otp: {
264        required: !0,
265        regex: /^[A-Za-z0-9]*$/g,
266        minlength: 6,
267        maxlength: 20,
268      },
269      dudoan: {
270        required: !0,
271        regex: /^[1-9][0-9]*$/g,
272        minlength: 1,
273        maxlength: 10,
274      },
275    },
276    messages: {
277      phone: {
278        required: "Nhập số điện thoại.",
279        minlength: "Vui lòng không nhập ít hơn 10 ký tự.",
280        maxlength: "Vui lòng không nhập nhiều hơn 10 ký tự.",
281        regex: "Số điện thoại bắt đầu từ 0. Ví dụ: 0909123456.",
282      },
283      username: {
284        required: "Vui lòng nhập họ tên.",
285        minlength: "Họ tên ít nhất 6 kí tự.",
286        maxlength: "Họ tên tối đa 29 ký tự.",
287        regex: "Họ tên không hợp lệ.",
288      },
289      password: {
290        required: "Vui lòng nhập mật khẩu.",
291        minlength: "Mật khẩu ít nhất 8 kí tự.",
292        maxlength: "Mật khẩu tối đa 29 ký tự.",
293        regex: "Mật khẩu không chứa ký tự dấu.",
294      },
295      repeat_pwd: {
296        required: "Vui lòng nhập xác nhận mật khẩu.",
297        equalTo: "Xác nhận mật khẩu không trùng khớp.",
298      },
299      email: {
300        required: "Vui lòng nhập email.",
301        minlength: "Email ít nhất 6 kí tự.",
302        regex: "Email không hợp lệ.",
303      },
304      otp: {
305        required: "Vui lòng nhập OTP.",
306        minlength: "OTP ít nhất 6 kí tự.",
307        maxlength: "OTP tối đa 20 ký tự.",
308        regex: "OTP không hợp lệ.",
309      },
310      dudoan: {
311        required: "Nhập số người dự đoán giống bạn.",
312        minlength: "Vui lòng không nhập ít hơn 1 ký tự.",
313        maxlength: "Vui lòng không nhập nhiều hơn 10 ký tự.",
314        regex: "Số người dự đoán giống bạn phải > 0",
315      },
316    },
317    errorElement: "div",
318    errorPlacement: function (n, e) {
319      n.addClass("errors"),
320        "checkbox" === e.prop("type")
321          ? n.insertAfter(e.parent("label"))
322          : n.insertAfter(e);
323    },
324    highlight: function (n, e, t) {},
325    unhighlight: function (n, e, t) {},
326    showErrors: function (n, e) {
327      this.defaultShowErrors();
328      showErrors();
329    },
330    submitHandler: function (n) {
331      jQuery(".btnsubmit").css('pointer-events','none');
332      jQuery(".otp-error").html('Thông tin đăng ký đang được gửi đi.');
333      jQuery(".otp-error").removeClass('hidden');
334      // let min = Math.ceil(100);
335      // let max = Math.floor(6000);
336      // let randomNumber = Math.floor(Math.random() * (max - min) + min);
337      // setTimeout(function() {
338      //   // Function to be executed after the delay
339      //   console.log (randomNumber);
340      //   onRegister();
341      // }, randomNumber);
342      // return !1;
343      return onRegister(), !1;
344      // return onUpdate(), !1;
345    },
346  });
347};
348var conf = {
349wg: "kqbd",
350};
351
352function httpGet(theUrl)
353{
354  let xmlhttp;
355  
356  if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
357      xmlhttp=new XMLHttpRequest();
358  } else { // code for IE6, IE5
359      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
360  }
361  
362  xmlhttp.onreadystatechange=function() {
363      if (xmlhttp.readyState==4 && xmlhttp.status==200) {
364          return xmlhttp.responseText;
365      }
366  }
367  xmlhttp.open("GET", theUrl, false);
368  xmlhttp.send();
369  
370  return xmlhttp.response;
371}
372
373var onRegister = function () {
374  var $ = jQuery;
375
376  var formData = {};
377  $("#registerForm")
378    .find("input, select")
379    .each(function (index, element) {
380      formData[$(element).attr("name")] = $(element).val();
381    });
382
383  $.ajax({
384    url: "/wp-json/custom-api/v1/add-khach-hang",
385    type: "POST",
386    contentType: "application/json",
387    data: JSON.stringify(formData),
388    beforeSend: function (xhr) {
389      xhr.setRequestHeader(
390        "X-CSRF-Token",
391        $('meta[name="csrf-token"]').attr("content")
392      );
393    },
394    dataType: "json",
395    success: function (e, t) {
396      console.log('e', e);
397      // Tracking DataLayer
398      if (typeof dataLayer !== "undefined") {
399        dataLayer.push({ event: "formSubmitted", formName: "Form_Register" });
400        // dataLayer.push({ event: "formRegister", formName: "Form_Register" });
401      }
402      if (typeof _mgq !== "undefined") _mgq.push(["MgSensorInvoke", "DangKy"]);
403      if (typeof fbq !== "undefined") fbq("track", "CompleteRegistration");
404    
405      // Remove value on field when request success and navigation to back
406      // $("#registerForm").find('input[name="username"]').val("");
407      $("#registerForm").find('input[name="dudoan"]').val("");
408      $("#registerForm").find('input[name="phone"]').val("");
409      $("#registerForm").find('input[name="email"]').val("");
410      // $(".phone-error").html('');
411      // $(".phone-error").addClass('hidden');
412      $(".otp-error").html('Cám ơn bạn đã tham gia.');
413      $(".otp-error").removeClass('hidden');
414      $('.btnsubmit').css('pointer-events','auto');/**/
415
416      // Make the AJAX request
417      $.ajax({
418        url: "/wp-json/custom-api/v1/ds",
419        type: 'POST',
420        data: {
421            action: 'lay_danh_sach_khach_hang_cpt'
422        },
423        success: function(response) {
424            if (response) {
425                $('.participant-table tbody').html(response);
426            }
427        }
428      });
429      
430      // const uri = '#';
431      // const encoded = encodeURI(uri);
432      
433      // Remove loading state
434    },
435    error: function (e, t, n) {
436      $("#alert-modal").append(
437        `<button type="button" class="mfp-close"></button>`
438      );
439      $("#alert-modal h4").html("Thông báo");
440
441      let type =  e?.responseJSON?.type;
442      let error =  e?.responseJSON?.error;
443    
444      console.log('e', e);
445    
446      console.log('error', error);
447      
448      // $("#alert-modal p").html(message);
449      // $('[href="#alert-modal"]').click();
450      // $(".otp-error").addClass('hidden');
451      $(".otp-error").html(error);
452      $(".otp-error").removeClass('hidden');
453      // $(".j-success").addClass('hidden');
454      // $(".j-success").removeClass('free');
455    },
456  });
457};
458
459var onUpdate = function () {
460  var $ = jQuery;
461
462  $(".btnsubmit").attr("disabled", "disabled");
463  $(".otp-error").html('Hệ thống đang xử lý, vui lòng chờ trong giây lát.');
464  $(".otp-error").removeClass('hidden');
465  
466  var formData = {};
467  $("#registerForm")
468    .find('input[type="text"], select, input[type="radio"]:checked')
469    .each(function (index, element) {
470      formData[$(element).attr("name")] = $(element).val();
471    });
472
473  $.ajax({
474    url: "/wp-json/custom-api/v1/update-khach-hang",
475    type: "POST",
476    contentType: "application/json",
477    data: JSON.stringify(formData),
478    beforeSend: function (xhr) {
479      xhr.setRequestHeader(
480        "X-CSRF-Token",
481        $('meta[name="csrf-token"]').attr("content")
482      );
483    },
484    dataType: "json",
485    success: function (e, t) {
486      console.log('e', e);
487      // Tracking DataLayer
488      if (typeof dataLayer !== "undefined") {
489        dataLayer.push({ event: "formSubmitted", formName: "Form_Register" });
490        // dataLayer.push({ event: "formRegister", formName: "Form_Register" });
491      }
492      if (typeof _mgq !== "undefined") _mgq.push(["MgSensorInvoke", "DangKy"]);
493      if (typeof fbq !== "undefined") fbq("track", "CompleteRegistration");
494    
495      // Remove value on field when request success and navigation to back
496      $("#registerForm").find('input[name="username"]').val("");
497      $("#registerForm").find('input[type="password"]').val("");
498      $("#registerForm").find('input[name="phone"]').val("");
499      $("#registerForm").find('input[name="email"]').val("");
500      $(".phone-error, .otp-error").html('');
501      $(".phone-error, .otp-error").addClass('hidden');
502      /*$('.btnsubmit').css('pointer-events','none');/**/
503      const uri = '#';
504      const encoded = encodeURI(uri);
505      
506      // Remove loading state
507      document.querySelector(".mfp-close").click();
508      let dateString = $('input[name="ngay"]:checked').val();
509      let formattedDate = new Date(dateString);
510      var d = formattedDate.getDate();
511      var m =  formattedDate.getMonth();
512      m += 1;
513      var y = formattedDate.getFullYear();
514      if (d < 10) {
515        d = "0" + d;
516      }
517      if (m < 10) {
518        m = "0" + m;
519      }
520      let newDate = d + "/" + m + "/" + y;
521
522      $(".date").html(newDate);
523      $(".tabCont").hide();
524      $(".free").addClass('hidden');
525      $(".j-success").addClass('free');
526      $(".j-success").removeClass('hidden');
527      $(".j-success").show();
528    },
529    error: function (e, t, n) {
530      $("#alert-modal").append(
531        `<button type="button" class="mfp-close"></button>`
532      );
533      $("#alert-modal h4").html("Thông báo");
534
535      let error =  e?.responseJSON?.error;
536    
537      console.log('e', e);
538    
539      console.log('error', error);
540      
541      // $("#alert-modal p").html(message);
542      // $('[href="#alert-modal"]').click();
543      $(".phone-error, .otp-error").html('');
544      $(".phone-error, .otp-error").addClass('hidden');
545      if (error === 'phone') {
546        $(".phone-error").html('Số điện thoại này chưa xác thực.');
547        $(".phone-error").removeClass('hidden');
548      } else {
549        if (error === 'otp') {
550          $(".otp-error").html('Mã OTP không chính xác.');
551        } else if (error === 'email') {
552          $(".otp-error").html('Email đã được sử dụng.');
553        } else if (error === 'exists') {
554          $(".otp-error").html('Số điện thoại này đã nhận vé.');
555        } else {
556          $(".otp-error").html(error);
557        }
558        $(".otp-error").removeClass('hidden');
559      }
560      $(".j-success").addClass('hidden');
561      $(".j-success").removeClass('free');
562      $(".btnsubmit").removeAttr("disabled");
563    },
564  });
565};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.