const api = 'https://wallet.web-t1.rbqund.xyz';
const mission = 'https://mission.web-t1.rbqund.xyz';
const pageName = location.pathname.split('/').pop().replace('.html', '');
const Token = {
set: (token) => {
localStorage.setItem('access_token', token);
},
get: () => {
return localStorage.getItem('access_token');
},
delete: () => {
localStorage.removeItem('access_token');
}
}
const Loader = {
show: () => {
$("#freezescreen").show();
},
hide: () => {
$("#freezescreen").delay(500).fadeOut();
},
isLoading: () => {
return $("#freezescreen").is(':visible');
}
}
window.swalInit = Swal.mixin({
buttonsStyling: false,
customClass: {
confirmButton: 'btn btn-orange',
cancelButton: 'btn btn-orange btn-swal-cancel',
denyButton: 'btn btn-orange btn-swal-deny',
input: 'form-control'
}
});
const showToast = (icon, message) => {
let intval = setInterval(() => {
if (Loader.isLoading()) return;
clearInterval(intval);
swalInit.fire({
toast: true,
position: 'top-end',
icon: icon,
text: message,
showConfirmButton: false,
timer: 3000,
timerProgressBar: true,
didOpen: (toast) => {
toast.addEventListener('mouseenter', Swal.stopTimer)
toast.addEventListener('mouseleave', Swal.resumeTimer)
}
});
}, 500);
}
const intVal = (i) => {
return typeof i === 'string'
? i.replace(/[\$,]/g, '') * 1
: typeof i === 'number'
? i
: 0;
}
const formatNumber = (x, fract = 0) => intVal(x).toLocaleString('id-ID', {minimumFractionDigits: fract, maximumFractionDigits: fract});
const handleResize = () => {
// Handle resizing
if ($(window).width() > 999) {
$('.wrapper').addClass('body_main_container'); // Add the class for large screens
$(".header_hamburger").removeClass("close_menu");
$(".left_menu_container_wrap").removeClass("close_menu_container");
} else {
$(".left_menu_container_wrap").addClass("close_menu_container");
$('.wrapper').removeClass("body_main_container"); // Close the menu for screens <= 999
}
}
const getGameProvider = (filter) => {
$.getJSON(`${api}/func/cms/getCmsPageInfo?page=home.game`, function(res) {
if (res.code != '0') {
swalInit.fire({
icon: 'error',
text: tr('Unable load data provider'),
confirmButtonText: tr('Ok'),
});
return;
}
if (!filter) { // mobile home page
res.result.categoryList.forEach(r => {
let el = $(`.box.${r.category}`);
if (el.length) {
let items = r.data[0].obj;
let provider = el.find('.game-providers');
items.forEach((item, x) => {
provider.append(`
`);
});
getMobileGameList(items[0].lobbyKey, el.find('.game-list'));
}
});
} else {
let provider = res.result.categoryList.filter(f => f.category == filter).pop().data[0].obj;
let max = 14;
for (let x = 0; x < provider.length; x++) {
$('.game-providers').append(`
`);
}
getGameList(provider[0].lobbyKey);
}
});
}
const getMobileGameList = (key, el) => {
el.empty();
$.getJSON(`${api}/func/comm/getCmsSetting?key=${key}`, function(res) {
res.result.menuList.forEach((item, i) => {
if (i >= 8) {
return true;
}
el.append(`
`);
});
});
}
const getGameList = (p) => {
let pageLimit = 42;
let provider = typeof p === 'object' ? p.data('provider') : p, listEl = $('.game-list'), gameFilter = $('.game-filter');
listEl.empty();
gameFilter.addClass('--loading');
$('.missing-find').remove();
// Placeholder
for(i=0; i<21; i++) {
listEl.append(`
`);
}
$.getJSON(`${api}/func/comm/getCmsSetting?key=${provider}`, function(res) {
let el = $('.game-list'), pag = $('.paging'), listLength = res.result.menuList.length;
pag.empty().toggle(listLength > pageLimit);
el.empty();
if (listLength === 0) {
el.after(`${tr('Could not find the game you were looking for, please try search others game.')}
`);
}
res.result.menuList.forEach((item, i) => {
let page = Math.ceil((i + 1) / pageLimit);
el.append(`
`);
});
let pageLength = Math.ceil(listLength / pageLimit);
if (pageLength > 1) {
for (i = 1; i <= pageLength; i++) {
pag.append(`${i}`);
}
}
// Hide all not in first page
$('.game-item[page!="1"]').hide();
// Enable filter
gameFilter.removeClass('--loading');
});
}
const getHotGameList = () => {
$.getJSON(`${api}/func/comm/getCmsSetting?key=lobby_menu_slot`, function(res) {
let el = $('.game-list.hot');
el.empty();
res.result.menuList.filter(f => ['slot', 'lc', 'arcade', 'fish'].includes(f.category)).forEach((item, i) => {
el.append(`
`);
});
});
}
const getGeneralData = (page) => {
$.getJSON(`${api}/func/comm/getWebInfo`, (res) => {
let contact = res.result.contact;
if (contact[0]) {
$('img.line, .line-sidebar').data('link', contact[0].link);
}
let popup = res.result.popUpText;
let el = $('.popup');
// Home page before login
if (!page && popup.beforeLogin) {
el.find('.modal-body').html(popup.beforeLogin);
el.modal('show');
}
// Home page after login
if (page === 'home' && popup.afterLogin) {
el.find('.modal-body').html(popup.afterLogin);
el.modal('show');
}
});
if ($('.mySwiperslider').length) {
$.getJSON(`${api}/func/comm/getCmsSetting?key=lobby_web_banner`, function(res) {
if (res.code === '0' && res.result.bannerList.length) {
let el = $('.mySwiperslider .swiper-wrapper').empty()
res.result.bannerList.forEach(r => {
let img = r.language['en-US'];
el.append(`
`);
});
new Swiper(".mySwiperslider", {
clickable: true,
loop: true,
speed: 500,
slidesPerView: 1,
spaceBetween: 0,
autoplay: {
delay: 5000,
disableOnInteraction: false
},
pagination: {
el: '.swiper-pagination',
},
});
}
});
}
}
jQuery.extend(jQuery.validator.messages, {
required: tr('This field is required.'),
email: tr('Please enter a valid email.'),
equalTo: tr("Confirm password must same with password"),
digits: tr("This field accept number only"),
minlength: tr("Please enter at least {0} character"),
maxlength: tr("Please enter at most {0} character"),
alnum: tr("Please insert alphanumeric value only")
});
$.validator.addMethod("alnum", function(value, element) {
return this.optional(element) || /^[a-zA-Z0-9]+$/i.test(value);
});
$.validator.addMethod("alphabetsonly", function(value, element) {
return this.optional(element) || /^[a-zA-Z]+$/i.test(value);
});
$.validator.addMethod('filesize', function(value, element, param) {
return this.optional(element) || (element.files[0].size / 1000000 <= param)
});
String.prototype.toDecimalPoint = function(n) {
var amt = parseFloat(this);
var pow = parseFloat(n);
if (!isNaN(amt) && !isNaN(pow)) { // if is number
pow = Math.pow(10, n);
return (Math.floor(amt * pow) / pow).toFixed(n);
} else {
amt = 0;
return amt.toFixed(n);
}
};
Number.prototype.toDecimalPoint = function(n) {
var amt = parseFloat(this);
var pow = parseFloat(n);
if (!isNaN(amt) && !isNaN(pow)) { // if is number
pow = Math.pow(10, n);
return (Math.floor(amt * pow) / pow).toFixed(n);
} else {
amt = 0;
return amt.toFixed(n);
}
};
window.onload = function() {
if (lang === 'th') {
$('#current_language').html($('#language_menu a[lang="th"]').html());
}
Loader.hide();
}
// Add event listener for window resize
$(window).resize(function() {
// Delay the execution of handleResize to prevent performance issues during rapid window resizing
clearTimeout(window.handleResizeTimeout);
window.handleResizeTimeout = setTimeout(handleResize, 100);
});
$(document).ready(function() {
// Initial call to handleResize
handleResize();
getGeneralData(pageName);
// Handle Hamburger Clicks
$(".header_hamburger").click(function() {
$(this).toggleClass("close_menu");
$(".left_menu_container_wrap").toggleClass("close_menu_container");
if ($(".left_menu_container_wrap").hasClass("close_menu_container")) {
// If menu is closed, remove the body_main_container class
$(".wrapper").removeClass("body_main_container");
} else {
// If menu is open, add the body_main_container class
$(".wrapper").addClass("body_main_container");
}
});
$('#language_menu a').click(function() {
if ($(this).attr('lang') === 'th') {
localStorage.setItem('lang', 'th');
} else {
localStorage.removeItem('lang');
}
location.reload();
});
// Home page mobile
$('.box .title').click(function() {
$(this).parent().toggleClass('closed');
$(this).next().slideToggle();
// Reset search
if ($(this).parent().hasClass('closed')) {
$(this).parent().find('[name="search"]').val('').trigger('keyup');
}
});
// Handle paging click
$(document).on('click', '.paging a:not(.active)', function() {
let _this = $(this),
num = _this.text();
_this.parent().find('a').removeClass('active');
_this.addClass('active');
$(`.game-item[page!="${num}"]`).hide();
$(`.game-item[page="${num}"]`).show();
return false;
});
// Handle sub click
$(document).on('click', '.game-filter:not(.--loading) a', function() {
$('.missing-find').remove();
$(this).parent().find('a').removeClass('active');
let txt = $(this).attr('cat'),
gFilter = $(this).closest('.game-filter'),
gList = gFilter.next(); // gList for compatible with mobile home page
if (txt !== 'all') {
$.each(gList.find('.game-item'), function(i, item) {
$(item).toggle($(item).attr('cat').toLowerCase().includes(txt));
});
gList.next('.paging, .mob-more-wrap').hide();
} else {
// Restore all tab items
let activePaging = $('.paging .active').text();
gList.find(`.game-item[page!="${activePaging}"]`).hide();
gList.find(`.game-item[page="${activePaging}"]`).show();
gList.next('.paging, .mob-more-wrap').show();
if (pageName.includes('casino') || gFilter.hasClass('mob-filter')) {
gList.find(`.game-item`).show();
}
}
if (gList.find('.game-item:visible').length === 0) {
gList.after(`${tr('Could not find the game you were looking for, please try search others game.')}
`);
}
gFilter.find('[name="search"]').val('');
$(this).addClass('active');
});
// Handle search
$(document).on('keyup', '.game-filter:not(.--loading) [name="search"]', function() {
let val = this.value.toLowerCase(),
txt = $(this).closest('.game-filter').find('a.active').text().toLowerCase().replace(' games', ''), // Provider game have text: Slot Games, Fish Games, Arcade Games
gFilter = $(this).closest('.game-filter'),
gList = gFilter.next(); // gList for compatible with mobile home page
$('.missing-find').remove();
if (val.length) {
gList.find('.game-name').each(function() {
const gi = $(this).closest('.game-item');
const matchesText = $(this).text().toLowerCase().includes(val);
const matchesCategory = txt === 'all' || gi.attr('cat').includes(txt);
gi.toggle(matchesText && matchesCategory);
});
if (gList.find('.game-item:visible').length === 0) {
gList.after(`${tr('Could not find the game you were looking for, please try search others game.')}
`);
}
gList.next('.paging, .mob-more-wrap').hide();
} else if (txt === 'all') {
// Hide all not in active paging page
let activePaging = $('.paging .active').text();
gList.find(`.game-item[page!="${activePaging}"]`).hide();
gList.find(`.game-item[page="${activePaging}"]`).show();
gList.next('.paging, .mob-more-wrap').show();
if (pageName.includes('casino') || gFilter.hasClass('mob-filter')) {
gList.find(`.game-item`).show();
}
} else {
gList.find(`.game-item[cat*="${txt}"]`).show();
}
});
// Provider item
$(document).on('click', '.provider-item:not(.active)', function() {
$(this).closest('.game-providers').find('.provider-item').removeClass('active');
$(this).addClass('active');
if ($(window).innerWidth() <= 999 && (pageName === '' || pageName === 'home')) {
getMobileGameList($(this).data('provider'), $(this).closest('.box').find('.game-list'));
} else {
getGameList($(this));
}
});
if (pageName === '' || pageName === 'home' || pageName === 'hot') {
getHotGameList();
if (pageName != 'hot' && $(window).innerWidth() <= 999) {
getGameProvider(); // mobile home page
}
}
if (['slot', 'casino', 'fish', 'arcade'].includes(pageName)) {
getGameProvider(pageName == 'casino' ? 'lc' : pageName);
}
$('.see-more-provider').click(function () {
$('.provider-item').removeClass('hide');
$(this).remove();
return false;
});
// Whatsapp contact
$('img.line, .line-sidebar').click(function () {
let link = $(this).data('link');
if (link) {
window.open(link, '_blank');
}
});
$('body').append(`
`);
$('.tournament-pop').click(function() {
window.open('/tournament.html', '', 'width=1024,height=768');
});
// Copyright year
$('.copyright .year').text(new Date().getFullYear());
});