// GRAMMAR CHECKING ENGINE PLUGIN
// Check date validity
// WARNING: when creating a Date, month must be between 0 and 11
/* jshint esversion:6 */
/* jslint esversion:6 */
const _lDay = ["dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi"];
const _dMonth = new Map ([
["janvier", 1], ["février", 2], ["mars", 3], ["avril", 4], ["mai", 5], ["juin", 6], ["juillet", 7],
["août", 8], ["aout", 8], ["septembre", 9], ["octobre", 10], ["novembre", 11], ["décembre", 12]
]);
const _dDaysInMonth = new Map ([
[1, 31], [2, 28], [3, 31], [4, 30], [5, 31], [6, 30], [7, 31],
[8, 31], [8, 31], [9, 30], [10, 31], [11, 30], [12, 31]
]);
function _checkDate (nDay, nMonth, nYear) {
// returns true or false
if (nMonth > 12 || nMonth < 1 || nDay > 31 || nDay < 1) {
return false;
}
if (nDay <= _dDaysInMonth.get(nMonth)) {
return true;
}
if (nDay === 29) {
// leap years, http://jsperf.com/ily/15
return !(nYear & 3 || !(nYear % 25) && nYear & 15);
}
return false;
}
function checkDate (sDay, sMonth, sYear) {
// to use if sMonth is a number
return _checkDate(parseInt(sDay, 10), parseInt(sMonth, 10), parseInt(sYear, 10));
}
function checkDateWithString (sDay, sMonth, sYear) {
// to use if sMonth is a noun
return _checkDate(parseInt(sDay, 10), _dMonth.get(sMonth.toLowerCase()), parseInt(sYear, 10));
}
function checkDay (sWeekday, sDay, sMonth, sYear) {
// to use if sMonth is a number
if (checkDate(sDay, sMonth, sYear)) {
let oDate = new Date(parseInt(sYear, 10), parseInt(sMonth, 10)-1, parseInt(sDay, 10));
if (_lDay[oDate.getDay()] != sWeekday.toLowerCase()) {
return false;
}
return true;
}
return false;
}
function checkDayWithString (sWeekday, sDay, sMonth, sYear) {
// to use if sMonth is a noun
if (checkDateWithString(sDay, sMonth, sYear)) {
let oDate = new Date(parseInt(sYear, 10), _dMonth.get(sMonth.toLowerCase())-1, parseInt(sDay, 10));
if (_lDay[oDate.getDay()] != sWeekday.toLowerCase()) {
return false;
}
return true;
}
return false;
}
function getDay (sDay, sMonth, sYear) {
// to use if sMonth is a number
let oDate = new Date(parseInt(sYear, 10), parseInt(sMonth, 10)-1, parseInt(sDay, 10));
return _lDay[oDate.getDay()];
}
function getDayWithString (sDay, sMonth, sYear) {
// to use if sMonth is a noun
let oDate = new Date(parseInt(sYear, 10), _dMonth.get(sMonth.toLowerCase())-1, parseInt(sDay, 10));
return _lDay[oDate.getDay()];
}