2015-09-22 23:13:21 +00:00
|
|
|
|
var dayNames = new Array(
|
|
|
|
|
'Mirdu',
|
|
|
|
|
'Hëmi',
|
|
|
|
|
'Drak',
|
|
|
|
|
'Þodon',
|
|
|
|
|
'Charm',
|
|
|
|
|
'Ro’unn'
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
var monthNames = new Array(
|
|
|
|
|
'Mebel',
|
|
|
|
|
'Dirann',
|
|
|
|
|
'Ma’uþ',
|
|
|
|
|
'Gerub',
|
|
|
|
|
'Þrei',
|
|
|
|
|
'Dimoc',
|
|
|
|
|
'Xentor',
|
|
|
|
|
'Meðïr',
|
|
|
|
|
'Draþ',
|
|
|
|
|
'Quaden',
|
|
|
|
|
'Ridïmel',
|
|
|
|
|
'Rodom'
|
|
|
|
|
);
|
|
|
|
|
|
2015-09-22 23:13:47 +00:00
|
|
|
|
var newMoonBaseDate = new Date(2005, 4, 8, 3, 48);
|
|
|
|
|
|
2015-09-22 23:13:59 +00:00
|
|
|
|
Date.prototype.isLeap = function() {
|
|
|
|
|
return new Date(this.getFullYear(), 1, 29).getDate() == 29;
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-22 23:13:47 +00:00
|
|
|
|
Date.prototype.getJulian = function() {
|
|
|
|
|
return Math.floor((this / 86400000) - (this.getTimezoneOffset()/1440) + 2440587.5);
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-22 23:13:21 +00:00
|
|
|
|
/*
|
|
|
|
|
* Add the getDOY() method to Date; it returns the day of year.
|
|
|
|
|
*/
|
|
|
|
|
Date.prototype.getDOY = function() {
|
|
|
|
|
var onejan = new Date(this.getFullYear(), 0, 1);
|
|
|
|
|
|
|
|
|
|
return Math.ceil((this - onejan) / 86400000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Date.prototype.getMinariDate = function() {
|
|
|
|
|
var year, thisYear;
|
|
|
|
|
|
|
|
|
|
var today = new Date(this);
|
|
|
|
|
today.setHours(0);
|
|
|
|
|
today.setMinutes(0);
|
|
|
|
|
today.setSeconds(0);
|
|
|
|
|
today.setMilliseconds(0);
|
|
|
|
|
today.setDate(today.getDate() + 11);
|
|
|
|
|
|
2015-09-22 23:13:59 +00:00
|
|
|
|
var minariLeap = today.isLeap();
|
2015-09-22 23:13:21 +00:00
|
|
|
|
var doy = this.getDOY();
|
|
|
|
|
var minariYear = today.getFullYear() - 1873;
|
|
|
|
|
var minariMonth = 0;
|
|
|
|
|
var minariDay = 0;
|
|
|
|
|
var minariDOY = 0;
|
|
|
|
|
var minariWeekday = 0;
|
|
|
|
|
var minariSpecialDay = -1;
|
|
|
|
|
|
|
|
|
|
switch (doy) {
|
|
|
|
|
case 0:
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 0;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case 91:
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 1;
|
|
|
|
|
|
|
|
|
|
break
|
|
|
|
|
case 182:
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 2;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case 183:
|
|
|
|
|
if (minariLeap) {
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 273:
|
|
|
|
|
if (!minariLeap) {
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 274:
|
|
|
|
|
if (minariLeap) {
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 364:
|
|
|
|
|
if (!minariLeap) {
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 365:
|
|
|
|
|
if (minariLeap) {
|
|
|
|
|
minariMonth = 0;
|
|
|
|
|
minariDay = 0;
|
|
|
|
|
minariSpecialDay = 5;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (minariSpecialDay == -1) {
|
|
|
|
|
var decr = 0;
|
|
|
|
|
minariDOY = doy;
|
|
|
|
|
|
|
|
|
|
if (minariDOY > 0) decr++;
|
|
|
|
|
if (minariDOY > 91) decr++;
|
|
|
|
|
if (minariDOY > 182) decr++;
|
|
|
|
|
|
|
|
|
|
if ((minariDOY > 183) && minariLeap) decr++;
|
|
|
|
|
if ((minariDOY > 273) && !minariLeap) decr++;
|
|
|
|
|
if ((minariDOY > 274) && minariLeap) decr++;
|
|
|
|
|
|
|
|
|
|
minariDOY -= decr - 1;
|
|
|
|
|
minariMonth = Math.ceil(minariDOY / 30);
|
|
|
|
|
minariDay = minariDOY % 30;
|
|
|
|
|
|
|
|
|
|
if (minariDay == 0) minariDay = 30;
|
|
|
|
|
|
|
|
|
|
minariWeekday = minariDay % 6;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
year: minariYear,
|
|
|
|
|
month: minariMonth,
|
|
|
|
|
day: minariDay,
|
|
|
|
|
special: minariSpecialDay
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function setYear(newYear) {
|
2015-09-22 23:13:47 +00:00
|
|
|
|
// If newYear is not set, go to current year
|
|
|
|
|
if (newYear == undefined) {
|
|
|
|
|
var today = new Date();
|
|
|
|
|
today.setDate(today.getDate() + 11);
|
|
|
|
|
newYear = Number(today.getFullYear() - 1873);
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-22 23:13:21 +00:00
|
|
|
|
year = newYear;
|
|
|
|
|
|
|
|
|
|
document.title = year + ' – ' + base_title;
|
|
|
|
|
$('#year').html(year);
|
|
|
|
|
|
|
|
|
|
$(todayId).removeClass('today');
|
|
|
|
|
|
|
|
|
|
if (year == thisYear) {
|
|
|
|
|
thisDay = new Date();
|
|
|
|
|
thisDay.setDate(thisDay.getDate() + 11);
|
|
|
|
|
checkLeap = new Date(thisDay.getFullYear(), 2, 29);
|
|
|
|
|
isLeap = (checkLeap.getDate() == 29);
|
|
|
|
|
thisDay.setFullYear(thisDay.getFullYear() - 1873);
|
|
|
|
|
month = 0;
|
|
|
|
|
dayNum = thisDay.getDOY();
|
|
|
|
|
|
|
|
|
|
switch (dayNum) {
|
|
|
|
|
case 0:
|
|
|
|
|
day = 1;
|
|
|
|
|
break;
|
|
|
|
|
case 91:
|
|
|
|
|
day = 2;
|
|
|
|
|
break;
|
|
|
|
|
case 182:
|
|
|
|
|
day = 3;
|
|
|
|
|
break;
|
|
|
|
|
case 183:
|
|
|
|
|
if (isLeap) {
|
|
|
|
|
day = 3;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 273:
|
|
|
|
|
if (!isLeap) {
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 274:
|
|
|
|
|
if (isLeap) {
|
|
|
|
|
day = 4;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 364:
|
|
|
|
|
if (!isLeap) {
|
|
|
|
|
day = 5;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case 365:
|
|
|
|
|
if (isLeap) {
|
|
|
|
|
day = 5;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
if (isLeap) {
|
|
|
|
|
if (dayNum > 274) {
|
|
|
|
|
dayNum -= 3;
|
|
|
|
|
} else if (dayNum > 183) {
|
|
|
|
|
dayNum -= 2;
|
|
|
|
|
} else if (dayNum > 182) {
|
|
|
|
|
dayNum -= 1;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (dayNum > 273) {
|
|
|
|
|
dayNum -= 2;
|
|
|
|
|
} else if (dayNum > 182) {
|
|
|
|
|
dayNum -= 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (dayNum > 91) {
|
|
|
|
|
dayNum -= 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (dayNum > 0) {
|
|
|
|
|
dayNum -= 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
month = Math.ceil(dayNum / 30);
|
|
|
|
|
day = dayNum - ((month - 1) * 30) + 1;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
todayId = '#day-' + month + '-' + day;
|
|
|
|
|
|
|
|
|
|
if (year == thisYear) {
|
|
|
|
|
$(todayId).addClass('today');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function genMonthTable(div) {
|
|
|
|
|
var month_table = $('<table>').addClass('month');
|
|
|
|
|
var month_header = $('<thead>');
|
|
|
|
|
|
|
|
|
|
month_num = $(div).attr('data-month');
|
|
|
|
|
month_name = monthNames[month_num - 1];
|
|
|
|
|
month_header
|
|
|
|
|
.append(
|
|
|
|
|
$('<tr>')
|
|
|
|
|
.addClass('monthname')
|
|
|
|
|
.append(
|
|
|
|
|
$('<td colspan="6">')
|
|
|
|
|
.html(month_name)));
|
|
|
|
|
|
|
|
|
|
daylist = $('<tr>')
|
|
|
|
|
.addClass('daynames');
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < 6; i++) {
|
|
|
|
|
daylist.append($('<td>').html(dayNames[i]));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
month_header.append(daylist);
|
|
|
|
|
month_table.append(month_header);
|
|
|
|
|
|
|
|
|
|
month_body = $('<tbody>');
|
|
|
|
|
|
|
|
|
|
for (week = 0; week < 5; week++) {
|
|
|
|
|
row = $('<tr>');
|
|
|
|
|
|
|
|
|
|
for (day = 0; day < 6; day++) {
|
|
|
|
|
real_day = week * 6 + day + 1;
|
|
|
|
|
row.append(
|
|
|
|
|
$('<td>')
|
|
|
|
|
.attr('id', 'day-' + month_num + '-' + real_day)
|
|
|
|
|
.attr('data-month', month_num)
|
|
|
|
|
.attr('data-day', real_day)
|
|
|
|
|
.addClass('day')
|
|
|
|
|
.html(real_day));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
month_body.append(row);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
month_table.append(month_body);
|
|
|
|
|
$(div).html(month_table);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getPopoverContent() {
|
|
|
|
|
list = $(this).attr('id').split('-');
|
2015-09-22 23:13:59 +00:00
|
|
|
|
date = getDateByMinari(year, Number(list[1]), Number(list[2]));
|
|
|
|
|
toolTip = $('<div>')
|
|
|
|
|
.addClass('date-popover')
|
|
|
|
|
.html(date.toLocaleDateString('hu-HU') + ((date.leapMorkh) ? '<br>(Két napos ünnep)' : ''));
|
|
|
|
|
|
|
|
|
|
moonPhasePic = getMoonPhase(date);
|
|
|
|
|
img = $('<img>').attr('src', 'images/' + moonPhasePic + '.png');
|
|
|
|
|
toolTip.append($('<br>')).append(img);
|
|
|
|
|
|
|
|
|
|
return toolTip;
|
2015-09-22 23:13:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
2015-09-22 23:13:59 +00:00
|
|
|
|
function getDateByMinari(year, month, day) {
|
|
|
|
|
// set date to the first day of the correct Gregorian year)
|
|
|
|
|
var date = new Date(year + 1873, 0, 1);
|
2015-09-22 23:13:21 +00:00
|
|
|
|
// …now substract 11 days to get the Gregorian date of the current Minari
|
2015-09-22 23:13:59 +00:00
|
|
|
|
// year’s first day. date now points to the current Minari year’s
|
2015-09-22 23:13:21 +00:00
|
|
|
|
// first day (Hëdur)
|
2015-09-22 23:13:59 +00:00
|
|
|
|
date.setDate(date.getDate() - 11);
|
2015-09-22 23:13:21 +00:00
|
|
|
|
|
|
|
|
|
// Now let’s check if this Gregorian year is a leap year. We use the same
|
|
|
|
|
// leap year rules as the Gregorian calendar
|
|
|
|
|
var leapYear = (new Date(year + 1873, 1, 29).getDate() == 29);
|
|
|
|
|
|
|
|
|
|
// Temporary set leapMorkh to false. We will set it to true later, if needed
|
|
|
|
|
var leapMorkh = false;
|
|
|
|
|
|
|
|
|
|
// The day of year we are pointing at
|
|
|
|
|
var dayNum = 0;
|
|
|
|
|
|
|
|
|
|
if (month == 0) {
|
|
|
|
|
switch (day) {
|
|
|
|
|
case 1:
|
|
|
|
|
dayNum = 1;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 2:
|
|
|
|
|
dayNum = 92;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 3:
|
|
|
|
|
dayNum = 183;
|
|
|
|
|
|
|
|
|
|
if (leapYear) {
|
|
|
|
|
leapMorkh = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 4:
|
|
|
|
|
dayNum = (leapYear) ? 275 : 274;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case 5:
|
|
|
|
|
dayNum = (leapYear) ? 366 : 365;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// Initial value of dayNum. We will increase it soon, depending of the
|
|
|
|
|
// holidays past this year
|
|
|
|
|
dayNum = (month - 1) * 30 + day;
|
|
|
|
|
|
|
|
|
|
switch (month) {
|
|
|
|
|
case 1:
|
|
|
|
|
case 2:
|
|
|
|
|
case 3:
|
|
|
|
|
// We have only Hëdur passed, let’s add 1
|
|
|
|
|
dayNum += 1;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
case 5:
|
|
|
|
|
case 6:
|
|
|
|
|
// We have Hëdur and Rideyy passed, let’s add 2
|
|
|
|
|
dayNum += 2;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case 7:
|
|
|
|
|
case 8:
|
|
|
|
|
case 9:
|
|
|
|
|
// We have Hëdur, Rideyy and Morkh passed, let’s add 3. If this
|
|
|
|
|
// is a leap year, Morkh is two days long, so let’s add 4
|
|
|
|
|
// instead.
|
|
|
|
|
dayNum += (leapYear) ? 4 : 3;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
case 10:
|
|
|
|
|
case 11:
|
|
|
|
|
case 12:
|
|
|
|
|
// We have Hëdur, Rideyy, Morkh and Khmerd passed, let’s add 4.
|
|
|
|
|
// If this is a leap year, Morkh is two days long, so let’s add
|
|
|
|
|
// 5 instead.
|
|
|
|
|
dayNum += (leapYear) ? 5 : 4;
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-22 23:13:59 +00:00
|
|
|
|
date.setDate(date.getDate() + dayNum - 1);
|
|
|
|
|
date.leapMorkh = leapMorkh;
|
2015-09-22 23:13:21 +00:00
|
|
|
|
|
2015-09-22 23:13:59 +00:00
|
|
|
|
return date;
|
|
|
|
|
}
|
2015-09-22 23:13:47 +00:00
|
|
|
|
|
2015-09-22 23:13:59 +00:00
|
|
|
|
function getDayTooltip(month, day) {
|
2015-09-22 23:13:21 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function yearClick(e) {
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
inputActive = true;
|
|
|
|
|
$('.year').html('<input type="text" id="yearBox" value="' + year + '" />');
|
|
|
|
|
$('#yearBox').focus();
|
|
|
|
|
$('#yearBox').click(function(e) {
|
|
|
|
|
e.stopPropagation();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$('#yearBox').keydown(function(e) {
|
|
|
|
|
if (e.which == 13) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
|
|
if (!isNaN($('#yearBox').val())) {
|
|
|
|
|
newYear = Number($('#yearBox').val())
|
|
|
|
|
$('.year').html('<span id="year">...</span>');
|
|
|
|
|
setYear(newYear);
|
|
|
|
|
$('#year').click(yearClick);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (e.which == 27) {
|
|
|
|
|
inputActive = false;
|
|
|
|
|
$('.year').html('<span id="year">' + year + '</span>');
|
|
|
|
|
$('#year').click(yearClick);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
2015-09-22 23:13:47 +00:00
|
|
|
|
|
|
|
|
|
function getMoonPhase(date) {
|
|
|
|
|
synodic = 29.53058867;
|
|
|
|
|
phasePercent = ((date.getJulian() - newMoonBaseDate.getJulian()) % synodic) / synodic;
|
|
|
|
|
|
|
|
|
|
if (phasePercent < 0) {
|
|
|
|
|
phasePercent += 1.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
phase = Math.floor(28 * phasePercent);
|
|
|
|
|
|
|
|
|
|
if (phase == 28) {
|
|
|
|
|
phase = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return phase;
|
|
|
|
|
}
|