(function (){
'use strict';
var activeCalendars=new WeakMap();
var calendarPopup=null;
var currentInput=null;
var lastOpenTime=0;
function getOrCreatePopup(){
if(!calendarPopup){
calendarPopup=document.createElement('div');
calendarPopup.className='persian-date-popup';
calendarPopup.style.cssText='position:absolute;z-index:999999;display:none;';
document.body.appendChild(calendarPopup);
}
return calendarPopup;
}
function positionPopup(input){
var popup=getOrCreatePopup();
var rect=input.getBoundingClientRect();
var scrollTop=window.pageYOffset||document.documentElement.scrollTop;
var scrollLeft=window.pageXOffset||document.documentElement.scrollLeft;
popup.style.top=(rect.bottom + scrollTop + 5) + 'px';
popup.style.left=(rect.left + scrollLeft) + 'px';
setTimeout(function (){
var popupRect=popup.getBoundingClientRect();
if(popupRect.right > window.innerWidth){
popup.style.left=(window.innerWidth - popupRect.width - 10 + scrollLeft) + 'px';
}
if(popupRect.bottom > window.innerHeight){
popup.style.top=(rect.top + scrollTop - popupRect.height - 5) + 'px';
}}, 0);
}
function isCalendarOpen(){
return calendarPopup&&calendarPopup.style.display!=='none';
}
function showCalendar(input){
if(typeof PersianCalendar==='undefined'){
console.error('Persian Elementor: PersianCalendar not loaded');
return;
}
if(isCalendarOpen()&&currentInput!==input){
hideCalendar();
}
if(isCalendarOpen()&&currentInput===input){
return;
}
var popup=getOrCreatePopup();
currentInput=input;
lastOpenTime=Date.now();
if(activeCalendars.has(popup)){
var oldCalendar=activeCalendars.get(popup);
if(oldCalendar&&typeof oldCalendar.destroy==='function'){
oldCalendar.destroy();
}
activeCalendars.delete(popup);
}
popup.innerHTML='';
var targetInput=input;
var selectedDate=new Date();
var existingValue=targetInput.value;
if(existingValue&&typeof PersianDateConverter!=='undefined'){
var parts=existingValue.split('/');
if(parts.length===3){
var jy=parseInt(parts[0], 10);
var jm=parseInt(parts[1], 10);
var jd=parseInt(parts[2], 10);
var gregorian=PersianDateConverter.jalaliToGregorian(jy, jm, jd);
if(gregorian[0] > 0){
selectedDate=new Date(gregorian[0], gregorian[1] - 1, gregorian[2]);
}}
}
var calendar=new PersianCalendar(popup, {
selectedDate: selectedDate,
title: 'انتخاب تاریخ',
showCloseButton: true,
onDateSelect: function (dateInfo){
var jalali=dateInfo.jalali;
var formatted=jalali.year + '/' +
String(jalali.month).padStart(2, '0') + '/' +
String(jalali.day).padStart(2, '0');
targetInput.value=formatted;
var event=new Event('change', { bubbles: true });
targetInput.dispatchEvent(event);
hideCalendar();
},
onClose: function (){
hideCalendar();
}});
activeCalendars.set(popup, calendar);
var labelElement=targetInput.closest('.elementor-field-group');
if(labelElement){
var label=labelElement.querySelector('label');
if(label){
var computedStyle=window.getComputedStyle(label);
popup.style.fontFamily=computedStyle.fontFamily;
}}
popup.addEventListener('click', function (e){
e.stopPropagation();
});
popup.style.display='block';
positionPopup(input);
input.setAttribute('data-calendar-open', 'true');
}
function hideCalendar(){
if(calendarPopup){
calendarPopup.style.display='none';
calendarPopup.innerHTML='';
}
if(currentInput){
currentInput.removeAttribute('data-calendar-open');
currentInput=null;
}}
function initPersianDateField(inputOrId){
var input=typeof inputOrId==='string' ?
document.getElementById(inputOrId):inputOrId;
if(!input) return false;
if(input.getAttribute('data-persian-date-initialized')) return true;
input.setAttribute('data-persian-date-initialized', 'true');
input.addEventListener('click', function (e){
e.preventDefault();
e.stopPropagation();
if(isCalendarOpen()&&currentInput===input){
hideCalendar();
}else{
showCalendar(input);
}});
input.addEventListener('focus', function (e){
});
return true;
}
function initAllDateFields(){
var fields=document.querySelectorAll('[data-persian-date]:not([data-persian-date-initialized])');
fields.forEach(function (field){
initPersianDateField(field);
});
}
document.addEventListener('click', function (e){
if(!isCalendarOpen()) return;
if(Date.now() - lastOpenTime < 100) return;
if(calendarPopup.contains(e.target)) return;
if(currentInput&&e.target===currentInput) return;
hideCalendar();
});
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', function (){
initAllDateFields();
});
}else{
initAllDateFields();
}
var observer=new MutationObserver(function (mutations){
var shouldReinit=false;
mutations.forEach(function (mutation){
if(mutation.type==='childList'){
mutation.addedNodes.forEach(function (node){
if(node.nodeType===Node.ELEMENT_NODE){
if(node.matches&&node.matches('[data-persian-date]')){
shouldReinit=true;
}else if(node.querySelector&&node.querySelector('[data-persian-date]')){
shouldReinit=true;
}}
});
}});
if(shouldReinit){
initAllDateFields();
}});
observer.observe(document.body, {
childList: true,
subtree: true
});
window.initPersianDateField=initPersianDateField;
window.initAllPersianDateFields=initAllDateFields;
window.hidePersianCalendar=hideCalendar;
})();