jQuery(window).on("elementor/frontend/init", function (){
elementorFrontend.hooks.addAction("frontend/element_ready/rkit-countdown.default",
function ($scope, $){
function formatDate(dateString){
var parts=dateString.split(" ");
if(parts.length===2){
var datePart=parts[0];
var timePart=parts[1];
var timeParts=timePart.split(":");
if(timeParts.length===3&&timeParts[2].length===1){
timeParts[2]="0" + timeParts[2];
}
return datePart + "T" + timeParts.join(":");
}
return "";
}
function initFlipCountdown($countdown, endDate){
if($countdown.data("skin")!=="flip") return;
if(!endDate) return;
const formattedDate=formatDate(endDate);
const countDownDate=new Date(formattedDate).getTime();
if(isNaN(countDownDate)) return;
const pieces={};
$countdown.find(".flip-clock__piece").each(function (){
const key=$(this).data("key");
const el=this;
const top=el.querySelector(".card__top");
const bottom=el.querySelector(".card__bottom");
const back=el.querySelector(".card__back");
const backBottom=el.querySelector(".card__back .card__bottom");
pieces[key]={
el,
update(val){
val=val < 10 ? "0" + val:String(val);
if(val!==el.dataset.value){
if(el.dataset.value){
back.setAttribute("data-value", el.dataset.value);
bottom.setAttribute("data-value", el.dataset.value);
}
el.dataset.value=val;
top.innerText=val;
backBottom.setAttribute("data-value", val);
el.classList.remove("flip");
void el.offsetWidth;
el.classList.add("flip");
}},
};});
const timer=setInterval(()=> {
const now=new Date().getTime();
const distance=countDownDate - now;
if(distance < 0){
clearInterval(timer);
Object.values(pieces).forEach((p)=> p.update(0));
var expiredSection=$scope.find(".expired-time-section");
var countdownWidget=$scope.find(".count");
if(expiredSection.length&&countdownWidget.length){
expiredSection.show();
countdownWidget.hide();
}
return;
}
const days=Math.floor(distance / (1000 * 60 * 60 * 24));
const hours=Math.floor((distance / (1000 * 60 * 60)) % 24);
const minutes=Math.floor((distance / (1000 * 60)) % 60);
const seconds=Math.floor((distance / 1000) % 60);
if(pieces.days) pieces.days.update(days);
if(pieces.hours) pieces.hours.update(hours);
if(pieces.minutes) pieces.minutes.update(minutes);
if(pieces.seconds) pieces.seconds.update(seconds);
}, 1000);
$countdown.data("interval", timer);
}
function updateCountdownNormal($element, endDate){
if(!endDate) return;
var formattedDate=formatDate(endDate);
var countDownDate=new Date(formattedDate).getTime();
if(isNaN(countDownDate)) return;
$element.find(".countdown-days").text("00");
$element.find(".countdown-hours").text("00");
$element.find(".countdown-minutes").text("00");
$element.find(".countdown-seconds").text("00");
var x=setInterval(function (){
var now=new Date().getTime();
var distance=countDownDate - now;
var days=Math.floor(distance / (1000 * 60 * 60 * 24));
var hours=Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60),
);
var minutes=Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds=Math.floor((distance % (1000 * 60)) / 1000);
var daysStr=(days < 10 ? "0" + days:days).toString();
var hoursStr=(hours < 10 ? "0" + hours:hours).toString();
var minutesStr=(minutes < 10 ? "0" + minutes:minutes).toString();
var secondsStr=(seconds < 10 ? "0" + seconds:seconds).toString();
if($element.find(".countdown-days").text()!==daysStr)
$element.find(".countdown-days").text(daysStr);
if($element.find(".countdown-hours").text()!==hoursStr)
$element.find(".countdown-hours").text(hoursStr);
if($element.find(".countdown-minutes").text()!==minutesStr)
$element.find(".countdown-minutes").text(minutesStr);
if($element.find(".countdown-seconds").text()!==secondsStr)
$element.find(".countdown-seconds").text(secondsStr);
if(distance < 0){
clearInterval(x);
$element.find(".countdown-days").text("00");
$element.find(".countdown-hours").text("00");
$element.find(".countdown-minutes").text("00");
$element.find(".countdown-seconds").text("00");
var expiredSection=$scope.find(".expired-time-section");
var countdownWidget=$scope.find(".count");
if(expiredSection.length&&countdownWidget.length){
expiredSection.show();
countdownWidget.hide();
}}
}, 1000);
$element.data("interval", x);
}
const $countdown=$scope.find("#countdown");
const endDate=$countdown.data("date");
const skin=$countdown.data("skin");
const useFlip=skin==="flip";
const existingInterval=$countdown.data("interval");
if(existingInterval) clearInterval(existingInterval);
if(useFlip){
initFlipCountdown($countdown, endDate);
}else{
updateCountdownNormal($countdown, endDate);
}
$countdown.on("change", function (){
const newEndDate=$(this).data("date");
const prevInterval=$(this).data("interval");
if(prevInterval) clearInterval(prevInterval);
if(useFlip){
initFlipCountdown($(this), newEndDate);
}else{
updateCountdownNormal($(this), newEndDate);
}});
},
);
});