gergelypolonkai-web-jekyll/minari/js/minari.js

459 lines
11 KiB
JavaScript
Raw Normal View History

var dayNames = new Array(
'Mirdu',
'Hëmi',
'Drak',
'Þodon',
'Charm',
'Rounn'
);
var monthNames = new Array(
'Mebel',
'Dirann',
'Mauþ',
'Gerub',
'Þrei',
'Dimoc',
'Xentor',
'Meðïr',
'Draþ',
'Quaden',
'Ridïmel',
'Rodom'
);
var newMoonBaseDate = new Date(2005, 4, 8, 3, 48);
Date.prototype.isLeap = function() {
return new Date(this.getFullYear(), 1, 29).getDate() == 29;
}
Date.prototype.getJulian = function() {
return Math.floor((this / 86400000) - (this.getTimezoneOffset()/1440) + 2440587.5);
}
/*
* 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);
var minariLeap = today.isLeap();
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) {
// 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);
}
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('-');
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;
}
function getDateByMinari(year, month, day) {
// set date to the first day of the correct Gregorian year)
var date = new Date(year + 1873, 0, 1);
// …now substract 11 days to get the Gregorian date of the current Minari
// years first day. date now points to the current Minari years
// first day (Hëdur)
date.setDate(date.getDate() - 11);
// Now lets 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, lets add 1
dayNum += 1;
break;
case 4:
case 5:
case 6:
// We have Hëdur and Rideyy passed, lets add 2
dayNum += 2;
break;
case 7:
case 8:
case 9:
// We have Hëdur, Rideyy and Morkh passed, lets add 3. If this
// is a leap year, Morkh is two days long, so lets add 4
// instead.
dayNum += (leapYear) ? 4 : 3;
break;
case 10:
case 11:
case 12:
// We have Hëdur, Rideyy, Morkh and Khmerd passed, lets add 4.
// If this is a leap year, Morkh is two days long, so lets add
// 5 instead.
dayNum += (leapYear) ? 5 : 4;
break;
}
}
date.setDate(date.getDate() + dayNum - 1);
date.leapMorkh = leapMorkh;
return date;
}
function getDayTooltip(month, day) {
}
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);
}
});
}
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;
}