jQuery(document).ready(function($){let searchTimeout;let currentPage=1;function showPlaceholders(){$('#slot-grid').html(` ${[...Array(16)].map(() => `
Loading...
`).join('')} `);} function replacePlaceholderWithImage(imageElement,imageUrl){const img=new Image();img.src=imageUrl;img.onload=function(){imageElement.src=imageUrl;imageElement.classList.remove('placeholder-img','hidden-img');imageElement.parentElement.classList.remove('placeholder');};} function fetchSlots(startSlot=0){const provider=$('#provider-filter').val();const gameType=$('#type-filter').val();const search=$('#search-filter').val();const sort=$('#sort-filter').val();console.log('Fetching slots with:',{provider,gameType,search,sort,startSlot});$('#slot-not-found').remove();showPlaceholders();$.ajax({url:slot_ajax.ajaxurl,type:'POST',data:{action:'filter_slots',provider:provider,game_type:gameType,search:search,sort:sort,start_slot:startSlot},success:function(response){const result=JSON.parse(response);const totalPosts=result.total_posts;const slotsHtml=result.html;const paginationHtml=result.pagination;if(slotsHtml.includes('NF')){if($('#slot-not-found').length===0){console.log("LOST");$('#slot-grid').after('

Oops!

No Slots Found

');} $('#slot-grid').html('');$('#pagination-container').hide();$('.filter-group-left span').text(`Displaying 0 free games`);$('#slot-not-found .reset-filter').on('click',function(){resetFilters();});}else{console.log("FAWND:"+slotsHtml.trim());$('#slot-grid').html(slotsHtml);$('#slot-grid .slot-card .slot-image img').each(function(){const imageUrl=$(this).data('src');replacePlaceholderWithImage(this,imageUrl);});$('#pagination-container').show();$('#pagination-container').html(paginationHtml);$('.filter-group-left span').text(`Displaying ${totalPosts} free games`);$('.pagination-button').on('click',function(){const startSlot=$(this).data('start-slot');fetchSlots(startSlot);});$('#slot-grid').on('click','.play-button.play',function(){const gameLink=$(this).data('link');const gameTitle=$(this).data('title');showGamePopup(gameLink,gameTitle);});}},error:function(xhr,status,error){console.error('AJAX error:',status,error);$('#slot-grid').html('
Failed to load slots
');$('#pagination-container').hide();}});} $('#provider-filter, #type-filter, #sort-filter').on('change',function(){$('#slot-not-found').remove();updateAppliedFilters();fetchSlots();});$('#search-filter').on('input',function(){clearTimeout(searchTimeout);searchTimeout=setTimeout(function(){$('#slot-not-found').remove();updateAppliedFilters();fetchSlots();},1000);});$('#clear-filters').on('click',function(e){e.preventDefault();resetFilters();});function resetFilters(){$('#provider-filter').val('');$('#type-filter').val('');$('#search-filter').val('');$('#sort-filter').val('popular');$('#applied-filters').empty();$('#clear-filters').hide();$('#slot-not-found').remove();fetchSlots();$('#your-filters').hide();} function populateFilterOptions(){$.ajax({url:slot_ajax.ajaxurl,type:'POST',data:{action:'get_slot_filters'},success:function(response){const data=JSON.parse(response);$('#provider-filter').append(data.providers);$('#type-filter').append(data.game_types);},error:function(xhr,status,error){console.error('AJAX error:',status,error);}});} function updateAppliedFilters(){const provider=$('#provider-filter option:selected').text();const gameType=$('#type-filter option:selected').text();const search=$('#search-filter').val();let filtersHtml='';if(provider&&provider!=='All providers'){filtersHtml+=`
Provider: ${provider} x
`;} if(gameType&&gameType!=='All'){filtersHtml+=`
Game Type: ${gameType} x
`;} if(search){filtersHtml+=`
Search: ${search} x
`;} $('#applied-filters').html(filtersHtml);if(filtersHtml){$('#your-filters').show();$('#clear-filters').show();}else{$('#your-filters').hide();$('#clear-filters').hide();} $('.filter-tag').on('click',function(){const filterType=$(this).data('filter');if(filterType==='provider'){$('#provider-filter').val('');}else if(filterType==='gameType'){$('#type-filter').val('');}else if(filterType==='search'){$('#search-filter').val('');} updateAppliedFilters();fetchSlots();});$('.remove-filter').on('click',function(e){e.stopPropagation();const filterType=$(this).data('filter');if(filterType==='provider'){$('#provider-filter').val('');}else if(filterType==='gameType'){$('#type-filter').val('');}else if(filterType==='search'){$('#search-filter').val('');} updateAppliedFilters();fetchSlots();});} function showGamePopup(url,title){if(document.getElementById('popup-overlay')){return;} const popupOverlay=document.createElement('div');popupOverlay.id='popup-overlay';popupOverlay.style.position='fixed';popupOverlay.style.top='0';popupOverlay.style.left='0';popupOverlay.style.width='100%';popupOverlay.style.height='100%';popupOverlay.style.backgroundColor='rgba(0, 0, 0, 0.8)';popupOverlay.style.zIndex='1000';popupOverlay.style.display='flex';popupOverlay.style.justifyContent='center';popupOverlay.style.alignItems='center';const popupContainer=document.createElement('div');popupContainer.id='popup-container';const popupBar=document.createElement('div');popupBar.id='popup-bar';popupBar.style.backgroundColor='#3a2e92';popupBar.style.color='white';popupBar.style.display='flex';popupBar.style.justifyContent='space-between';popupBar.style.alignItems='center';popupBar.style.padding='10px';const popupTitle=document.createElement('div');popupTitle.className='title';popupTitle.innerText=title;const popupButtons=document.createElement('div');popupButtons.className='buttons';popupButtons.style.display='flex';popupButtons.style.gap='10px';const fullscreenButton=document.createElement('button');fullscreenButton.innerHTML='⛶';fullscreenButton.id='fullscreenbtn';fullscreenButton.style.background='none';fullscreenButton.style.border='none';fullscreenButton.style.color='white';fullscreenButton.style.fontSize='35px';fullscreenButton.style.cursor='pointer';fullscreenButton.addEventListener('click',function(){toggleFullscreen(popupContainer);});function toggleFullscreen(element){if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement){if(document.exitFullscreen){document.exitFullscreen();}else if(document.mozCancelFullScreen){document.mozCancelFullScreen();}else if(document.webkitExitFullscreen){document.webkitExitFullscreen();}else if(document.msExitFullscreen){document.msExitFullscreen();} element.classList.remove('fullscreen');}else{if(element.requestFullscreen){element.requestFullscreen();}else if(element.mozRequestFullScreen){element.mozRequestFullScreen();}else if(element.webkitRequestFullscreen){element.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);}else if(element.msRequestFullscreen){element.msRequestFullscreen();} element.classList.add('fullscreen');}} const closeButton=document.createElement('button');closeButton.innerHTML='';closeButton.style.background='none';closeButton.style.border='none';closeButton.style.color='white';closeButton.style.fontSize='1.5em';closeButton.style.cursor='pointer';closeButton.addEventListener('click',function(){document.body.removeChild(popupOverlay);document.body.style.overflow='auto';});popupButtons.appendChild(fullscreenButton);popupButtons.appendChild(closeButton);popupBar.appendChild(popupTitle);popupBar.appendChild(popupButtons);const popupIframe=document.createElement('iframe');popupIframe.src=url;popupIframe.style.flex='1';popupIframe.style.border='none';popupContainer.appendChild(popupBar);popupContainer.appendChild(popupIframe);popupOverlay.appendChild(popupContainer);document.body.appendChild(popupOverlay);document.body.style.overflow='hidden';} populateFilterOptions();fetchSlots();$(document).on('click','.pagination-button',function(){const startSlot=$(this).data('start-slot');fetchSlots(startSlot);});});