(function ($){
'use strict';
var d=window.ariagesData||{};
var lpInterp=(d.lifePath&&d.lifePath.interpretations)||{};
var expInterp=(d.expressionNumber&&d.expressionNumber.interpretations)||{};
var pyInterp=(d.personalYear&&d.personalYear.interpretations)||{};
var zodiacData=(d.zodiacCompatibility&&d.zodiacCompatibility.data)||{};
var moonTr=(d.moonPhases&&d.moonPhases.translations)||{};
function sumDigits(n){
return String(n).split('').reduce(function (acc, ch){
return acc + parseInt(ch, 10);
}, 0);
}
function reduce(n, allowMaster){
n=parseInt(n, 10);
if(isNaN(n)||n < 0){ return 0; }
allowMaster=(allowMaster!==false);
while (n > 9){
if(allowMaster&&(n===11||n===22||n===33)){ break; }
n=sumDigits(n);
}
return n;
}
$(document).on('submit', '.ariages-life-path-form', function (e){
e.preventDefault();
var $form=$(this);
var birthdate=$form.find('input[name="birthdate"]').val();
if(!birthdate){ return; }
var parts=birthdate.split('-');
var year=parseInt(parts[0], 10);
var month=parseInt(parts[1], 10);
var day=parseInt(parts[2], 10);
var lpNum=reduce(reduce(day) + reduce(month) + reduce(year));
var text=lpInterp[lpNum]||lpInterp[1]||'';
var uid=$form.data('uid');
$('#' + uid + '-result').find('.ariages-lp-number').text(lpNum);
$('#' + uid + '-result').find('.ariages-lp-interpretation').text(text);
$('#' + uid + '-result').slideDown(350);
});
var PYTHAGOREAN={
A:1, B:2, C:3, D:4, E:5, F:6, G:7, H:8, I:9,
J:1, K:2, L:3, M:4, N:5, O:6, P:7, Q:8, R:9,
S:1, T:2, U:3, V:4, W:5, X:6, Y:7, Z:8
};
$(document).on('submit', '.ariages-expression-form', function (e){
e.preventDefault();
var $form=$(this);
var fullname=$form.find('input[name="fullname"]').val().toUpperCase().replace(/[^A-Z]/g, '');
if(!fullname){ return; }
var total=0;
for (var i=0; i < fullname.length; i++){
total +=PYTHAGOREAN[fullname[i]]||0;
}
var expNum=reduce(total);
var text=expInterp[expNum]||expInterp[1]||'';
var uid=$form.data('uid');
$('#' + uid + '-result').find('.ariages-exp-number').text(expNum);
$('#' + uid + '-result').find('.ariages-exp-interpretation').text(text);
$('#' + uid + '-result').slideDown(350);
});
$(document).on('submit', '.ariages-personal-year-form', function (e){
e.preventDefault();
var $form=$(this);
var birthdate=$form.find('input[name="birthdate"]').val();
var year=parseInt($form.find('input[name="year"]').val(), 10);
if(!birthdate||isNaN(year)){ return; }
var parts=birthdate.split('-');
var day=parseInt(parts[2], 10);
var month=parseInt(parts[1], 10);
var pyNum=reduce(reduce(day, false) + reduce(month, false) + reduce(year, false), false);
var text=pyInterp[pyNum]||pyInterp[1]||'';
var uid=$form.data('uid');
$('#' + uid + '-result').find('.ariages-py-number').text(pyNum);
$('#' + uid + '-result').find('.ariages-py-year-display').text(year);
$('#' + uid + '-result').find('.ariages-py-interpretation').text(text);
$('#' + uid + '-result').slideDown(350);
});
$(document).on('submit', '.ariages-zodiac-form', function (e){
e.preventDefault();
var $form=$(this);
var sign1=$form.find('select[name="sign1"]').val();
var sign2=$form.find('select[name="sign2"]').val();
if(!sign1||!sign2){ return; }
var key=sign1 + '_' + sign2;
var revKey=sign2 + '_' + sign1;
var compat=zodiacData[key]||zodiacData[revKey]||zodiacData['default']
|| { score: 70, level: 'Good', color: '#2196F3', interpretation: '' };
var uid=$form.data('uid');
$('#' + uid + '-score-fill').css({ width: compat.score + '%', backgroundColor: compat.color });
$('#' + uid + '-score-text').text(compat.score + '% – ' + compat.level);
$('#' + uid + '-result').find('.ariages-zodiac-interpretation').text(compat.interpretation);
$('#' + uid + '-result').slideDown(350);
});
function getMoonData(date){
var SYN=29.53058853;
var Y=date.getFullYear();
var M=date.getMonth() + 1;
var D=date.getDate();
if(M <=2){ Y--; M +=12; }
var A=Math.floor(Y / 100);
var B=2 - A + Math.floor(A / 4);
var JD=Math.floor(365.25 * (Y + 4716))
+ Math.floor(30.6001 * (M + 1))
+ D + B - 1524.5;
var age=((JD - 2451549.77) % SYN + SYN) % SYN;
var illumination=Math.round((1 - Math.cos(2 * Math.PI * age / SYN)) * 50);
var phaseIndex;
if(age <  1.85){ phaseIndex=0; }
else if(age <  7.38){ phaseIndex=1; }
else if(age <  9.22){ phaseIndex=2; }
else if(age < 14.77){ phaseIndex=3; }
else if(age < 16.61){ phaseIndex=4; }
else if(age < 22.15){ phaseIndex=5; }
else if(age < 23.99){ phaseIndex=6; }else{ phaseIndex=7; }
return { phaseIndex: phaseIndex, age: age, illumination: illumination };}
function getNextFullMoon(fromDate){
var test=new Date(fromDate.getTime());
for (var i=1; i <=30; i++){
test.setDate(test.getDate() + 1);
if(getMoonData(test).phaseIndex===4){
return new Date(test.getTime());
}}
return null;
}
function getSunSignIndex(month, day){
var cuts=[[3,21],[4,20],[5,21],[6,21],[7,23],[8,23],[9,23],[10,23],[11,22],[12,22],[1,20],[2,19]];
var idx=11;
for (var i=0; i < cuts.length; i++){
if(month===cuts[i][0]&&day >=cuts[i][1]){ idx=i; }}
if(month===1&&day < 20){ idx=9; }
return idx;
}
function getMoonSignIndex(date){
var REF=new Date(2000, 0, 1);
var msPerDay=864e5;
var daysSince=(date.getTime() - REF.getTime()) / msPerDay;
return Math.floor(((daysSince / (27.321582 / 12)) % 12 + 12) % 12);
}
function updateMoonShadow(shadowEl, phaseIndex, illumination){
var s=shadowEl.style;
s.position='absolute';
s.top='0';
s.height='100%';
s.background='#3a3a3f';
s.borderRadius='50%';
if(phaseIndex===0){
s.width='100%'; s.left='0'; s.right='auto';
}else if(phaseIndex===4){
s.width='0';
}else if(phaseIndex < 4){
s.width=(100 - illumination) + '%';
s.right='0'; s.left='auto';
s.borderRadius='0 50% 50% 0';
}else{
s.width=(100 - illumination) + '%';
s.left='0'; s.right='auto';
s.borderRadius='50% 0 0 50%';
}}
function initMoonWidget(el){
var $widget=$(el);
var uid=$widget.data('uid');
var shadowEl=document.getElementById(uid + '-shadow');
if(!shadowEl){ return; }
var now=new Date();
var moonData=getMoonData(now);
var phases=(moonTr&&moonTr.phases) ? moonTr.phases:[];
var zodiac=(moonTr&&moonTr.zodiac) ? moonTr.zodiac:[];
var nextFull=getNextFullMoon(now);
$widget.find('.ariages-moon-phase-value').text(phases[moonData.phaseIndex]||'');
$widget.find('.ariages-moon-date-value').text(now.toLocaleDateString());
$widget.find('.ariages-moon-illumination-value').text(moonData.illumination + '%');
$widget.find('.ariages-moon-next-full-value').text(nextFull ? nextFull.toLocaleDateString():'N/A');
$widget.find('.ariages-moon-sun-sign-value').text(zodiac[getSunSignIndex(now.getMonth() + 1, now.getDate())]||'');
$widget.find('.ariages-moon-moon-sign-value').text(zodiac[getMoonSignIndex(now)]||'');
updateMoonShadow(shadowEl, moonData.phaseIndex, moonData.illumination);
}
$(document).on('submit', 'form.ariages-calculator-form', function (){
$(this).find('[required]').each(function (){
var $f=$(this);
if(!$f.val()){
$f.addClass('ariages-field-error');
setTimeout(function (){ $f.removeClass('ariages-field-error'); }, 2000);
}});
});
$(document).on('focus', 'form.ariages-calculator-form [required]', function (){
$(this).removeClass('ariages-field-error');
});
$(document).ready(function (){
$('.ariages-moon-widget').each(function (){
initMoonWidget(this);
});
});
})(jQuery);