(function($){
'use strict';
$(document).ready(function(){
initUpgradeButtons();
initModal();
initCarousel();
initLightbox();
initCurrentPlanActions();
});
function initUpgradeButtons(){
$('.ttuc-upgrade-button').on('click', function(e){
e.preventDefault();
var $button=$(this);
var productId=$button.data('product-id');
var canAdd=$button.data('can-add')==='true'||$button.data('can-add')===true;
$.ajax({
url: ttuc_ajax.ajax_url,
type: 'POST',
data: {
action: 'ttuc_get_upgrade_options',
nonce: ttuc_ajax.nonce,
product_id: productId
},
beforeSend: function(){
$button.addClass('ttuc-loading');
$button.html('<span class="ttuc-spinner"></span> ' + ttuc_ajax.i18n.loading);
},
success: function(response){
$button.removeClass('ttuc-loading');
if(response.success){
if(canAdd&&response.data.has_subscription){
showUpgradeModal(productId);
}else{
processUpgrade(productId, 'replace');
}}else{
alert(response.data.message||ttuc_ajax.i18n.error);
resetButton($button);
}},
error: function(){
$button.removeClass('ttuc-loading');
alert(ttuc_ajax.i18n.error);
resetButton($button);
}});
});
}
function resetButton($button){
var originalText=$button.text().replace(/^.*? /, '');
$button.html(originalText);
}
function showUpgradeModal(productId){
var $modal=$('#ttuc-upgrade-modal');
$modal.data('product-id', productId);
$modal.fadeIn();
}
function initModal(){
var $modal=$('#ttuc-upgrade-modal');
$('.ttuc-modal-close, #ttuc-upgrade-modal').on('click', function(e){
if(e.target===this){
$modal.fadeOut();
}});
$('#ttuc-replace-subscription').on('click', function(){
var productId=$modal.data('product-id');
$modal.fadeOut();
processUpgrade(productId, 'replace');
});
$('#ttuc-add-license').on('click', function(){
var productId=$modal.data('product-id');
$modal.fadeOut();
processUpgrade(productId, 'add');
});
}
function processUpgrade(productId, actionType){
$.ajax({
url: ttuc_ajax.ajax_url,
type: 'POST',
data: {
action: 'ttuc_process_upgrade',
nonce: ttuc_ajax.nonce,
product_id: productId,
action_type: actionType
},
beforeSend: function(){
showLoadingOverlay();
},
success: function(response){
hideLoadingOverlay();
if(response.success&&response.data.redirect_url){
window.location.href=response.data.redirect_url;
}else{
alert(response.data.message||ttuc_ajax.i18n.error);
}},
error: function(){
hideLoadingOverlay();
alert(ttuc_ajax.i18n.error);
}});
}
function initCarousel(){
$('.ttuc-assets-carousel').each(function(){
var $carousel=$(this);
var $track=$carousel.find('.ttuc-carousel-track');
var $items=$carousel.find('.ttuc-carousel-item');
var $dots=$carousel.find('.ttuc-carousel-dot');
var currentIndex=0;
var itemCount=$items.length;
var columns=parseInt($carousel.data('columns'))||1;
function updateCarousel(){
var translateX=-(currentIndex * (100 / columns));
$track.css('transform', 'translateX(' + translateX + '%)');
$dots.removeClass('active');
$dots.eq(currentIndex).addClass('active');
}
$carousel.find('.ttuc-carousel-next').on('click', function(){
currentIndex=(currentIndex + 1) % Math.ceil(itemCount / columns);
updateCarousel();
});
$carousel.find('.ttuc-carousel-prev').on('click', function(){
currentIndex=(currentIndex - 1 + Math.ceil(itemCount / columns)) % Math.ceil(itemCount / columns);
updateCarousel();
});
$dots.on('click', function(){
currentIndex=$(this).data('index');
updateCarousel();
});
var touchStartX=0;
var touchEndX=0;
$carousel.on('touchstart', function(e){
touchStartX=e.changedTouches[0].screenX;
});
$carousel.on('touchend', function(e){
touchEndX=e.changedTouches[0].screenX;
handleSwipe();
});
function handleSwipe(){
if(touchEndX < touchStartX - 50){
$carousel.find('.ttuc-carousel-next').trigger('click');
}
if(touchEndX > touchStartX + 50){
$carousel.find('.ttuc-carousel-prev').trigger('click');
}}
updateCarousel();
});
}
function initLightbox(){
$('.ttuc-lightbox').on('click', function(e){
e.preventDefault();
var imageUrl=$(this).attr('href');
var title=$(this).data('title')||'';
var $lightbox=$('<div class="ttuc-lightbox-overlay">' +
'<div class="ttuc-lightbox-content">' +
'<span class="ttuc-lightbox-close">&times;</span>' +
'<img src="' + imageUrl + '" alt="' + title + '">' +
(title ? '<div class="ttuc-lightbox-caption">' + title + '</div>':'') +
'</div>' +
'</div>');
$('body').append($lightbox);
$lightbox.on('click', function(e){
if(e.target===this||$(e.target).hasClass('ttuc-lightbox-close')){
$lightbox.fadeOut(function(){
$lightbox.remove();
});
}});
$lightbox.fadeIn();
});
}
function initCurrentPlanActions(){
$('.ttuc-button-cancel').on('click', function(e){
if(!confirm($(this).data('confirm')||'Are you sure you want to cancel this subscription?')){
e.preventDefault();
}});
}
function showLoadingOverlay(){
var $overlay=$('<div class="ttuc-loading-overlay">' +
'<div class="ttuc-loading-content">' +
'<div class="ttuc-spinner"></div>' +
'<p>' + ttuc_ajax.i18n.loading + '</p>' +
'</div>' +
'</div>');
$('body').append($overlay);
$overlay.fadeIn();
}
function hideLoadingOverlay(){
$('.ttuc-loading-overlay').fadeOut(function(){
$(this).remove();
});
}
$(document).ajaxError(function(event, jqXHR, settings, thrownError){
if(settings.url.indexOf('ttuc')!==-1){
console.error('TepinTasks Upgrade Center AJAX Error:', thrownError);
}});
$('<style>')
.prop('type', 'text/css')
.html('.ttuc-lightbox-overlay { ' +
'position: fixed; ' +
'top: 0; ' +
'left: 0; ' +
'width: 100%; ' +
'height: 100%; ' +
'background: rgba(0,0,0,0.9); ' +
'z-index: 10000; ' +
'display: none; ' +
'}' +
'.ttuc-lightbox-content { ' +
'position: absolute; ' +
'top: 50%; ' +
'left: 50%; ' +
'transform: translate(-50%, -50%); ' +
'max-width: 90%; ' +
'max-height: 90%; ' +
'}' +
'.ttuc-lightbox-content img { ' +
'max-width: 100%; ' +
'max-height: 90vh; ' +
'display: block; ' +
'}' +
'.ttuc-lightbox-close { ' +
'position: absolute; ' +
'top: 20px; ' +
'right: 40px; ' +
'color: white; ' +
'font-size: 40px; ' +
'cursor: pointer; ' +
'}' +
'.ttuc-lightbox-caption { ' +
'color: white; ' +
'text-align: center; ' +
'margin-top: 20px; ' +
'font-size: 16px; ' +
'}' +
'.ttuc-loading-overlay { ' +
'position: fixed; ' +
'top: 0; ' +
'left: 0; ' +
'width: 100%; ' +
'height: 100%; ' +
'background: rgba(0,0,0,0.5); ' +
'z-index: 9998; ' +
'display: none; ' +
'}' +
'.ttuc-loading-content { ' +
'position: absolute; ' +
'top: 50%; ' +
'left: 50%; ' +
'transform: translate(-50%, -50%); ' +
'text-align: center; ' +
'color: white; ' +
'}' +
'.ttuc-loading-content .ttuc-spinner { ' +
'width: 50px; ' +
'height: 50px; ' +
'border-width: 5px; ' +
'margin: 0 auto 20px; ' +
'}')
.appendTo('head');
})(jQuery);