Skip to content

Instantly share code, notes, and snippets.

@dgrammatiko
Last active July 18, 2016 11:52
Show Gist options
  • Save dgrammatiko/73269432efec4365c57df8491ae0012f to your computer and use it in GitHub Desktop.
Save dgrammatiko/73269432efec4365c57df8491ae0012f to your computer and use it in GitHub Desktop.
/* calendar-lang.js*/
// Calendar._DN = new Array("یکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه", "یکشنبه");
// Calendar._SDN = new Array("یک", "دو", "سه", "چهار", "پنج", "جمعه", "شنبه", "یک");
// Calendar._FD = 6;
// Calendar._MN = new Array("ژانویه", "فوریه", "مارس", "آوریل", "می", "جون", "جولای", "آگوست", "سپتامبر", "اکتبر", "نوامبر", "دسامبر");
// Calendar._SMN = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
// Calendar._JMN = new Array("فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند");
// Calendar._JSMN = new Array("فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند");
// Calendar._TT = {};
// Calendar._TT.INFO = "درباره تقویم";
// Calendar._TT.ABOUT = "JalaliJSCalendar\nCopyright (c) 2008 Ali Farhadi (http://farhadi.ir/)\nDistributed under GNU GPL. See http://gnu.org/licenses/gpl.html for details.\n\nBased on The DHTML Calendar developed by Dynarch.com.\n(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n\nEdited By ParsJoomla TEAM (http://parsjoomla.com) for Joomla CMS!\n\n\nDate selection:\n- Use the \xab, \xbb buttons to select year\n- Use the " + String.fromCharCode(8249) + ", " + String.fromCharCode(8250) + " buttons to select month\n- Hold mouse button on any of the above buttons for faster selection.";
// Calendar._TT.ABOUT_TIME = "\n\nTime selection:\n- Click on any of the time parts to increase it\n- or Shift-click to decrease it\n- or click and drag for faster selection.";
// Calendar._TT.PREV_YEAR = "سال قبل (hold for menu)";
// Calendar._TT.PREV_MONTH = "ماه قبل (hold for menu)";
// Calendar._TT.GO_TODAY = "رفتن به امروز";
// Calendar._TT.NEXT_MONTH = "ماه بعد (hold for menu)";
// Calendar._TT.NEXT_YEAR = "سال بعد (hold for menu)";
// Calendar._TT.SEL_DATE = "انتخاب تاریخ";
// Calendar._TT.DRAG_TO_MOVE = "Drag to move";
// Calendar._TT.PART_TODAY = " (امروز)";
// Calendar._TT.DAY_FIRST = "ابتدا %s نمایش داده شود";
// Calendar._TT.WEEKEND = "5";
// Calendar._TT.CLOSE = "بستن";
// Calendar._TT.TODAY = "امروز";
// Calendar._TT.TIME_PART = "(Shift-)Click or drag to change value";
// Calendar._TT.DEF_DATE_FORMAT = "%Y-%m-%d";
// Calendar._TT.TT_DATE_FORMAT = "%A, %e %b";
// Calendar._TT.WK = "هفته";
// Calendar._TT.TIME = "زمان :";
// Calendar._TT.LAM = "ق.ظ.";
// Calendar._TT.AM = "ق.ظ.";
// Calendar._TT.LPM = "ب.ظ.";
// Calendar._TT.PM = "ب.ظ.";
// Calendar._NUMBERS = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"];
// Calendar._DIR = "rtl";
/*************************************************************/
Date.jalali_MD = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];
Date.localLangNumbers = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"];
// JalaliDate={g_days_in_month:[31,28,31,30,31,30,31,31,30,31,30,31],j_days_in_month:[31,31,31,31,31,31,30,30,30,30,30,29]};JalaliDate.jalaliToGregorian=function(j_y,j_m,j_d){j_y=parseInt(j_y);j_m=parseInt(j_m);j_d=parseInt(j_d);var jy=j_y-979;var jm=j_m-1;var jd=j_d-1;var j_day_no=365*jy+parseInt(jy/33)*8+parseInt((jy%33+3)/4);for(var i=0;i<jm;++i){j_day_no+=JalaliDate.j_days_in_month[i]}j_day_no+=jd;var g_day_no=j_day_no+79;var gy=1600+400*parseInt(g_day_no/146097);g_day_no=g_day_no%146097;var leap=true;if(g_day_no>=36525){g_day_no--;gy+=100*parseInt(g_day_no/36524);g_day_no=g_day_no%36524;if(g_day_no>=365){g_day_no++}else{leap=false}}gy+=4*parseInt(g_day_no/1461);g_day_no%=1461;if(g_day_no>=366){leap=false;g_day_no--;gy+=parseInt(g_day_no/365);g_day_no=g_day_no%365}for(var i=0;g_day_no>=JalaliDate.g_days_in_month[i]+(i==1&&leap);i++){g_day_no-=JalaliDate.g_days_in_month[i]+(i==1&&leap)}var gm=i+1;var gd=g_day_no+1;return[gy,gm,gd]};JalaliDate.checkDate=function(j_y,j_m,j_d){return !(j_y<0||j_y>32767||j_m<1||j_m>12||j_d<1||j_d>(JalaliDate.j_days_in_month[j_m-1]+(j_m==12&&!((j_y-979)%33%4))))};JalaliDate.gregorianToJalali=function(g_y,g_m,g_d){g_y=parseInt(g_y);g_m=parseInt(g_m);g_d=parseInt(g_d);var gy=g_y-1600;var gm=g_m-1;var gd=g_d-1;var g_day_no=365*gy+parseInt((gy+3)/4)-parseInt((gy+99)/100)+parseInt((gy+399)/400);for(var i=0;i<gm;++i){g_day_no+=JalaliDate.g_days_in_month[i]}if(gm>1&&((gy%4==0&&gy%100!=0)||(gy%400==0))){++g_day_no}g_day_no+=gd;var j_day_no=g_day_no-79;var j_np=parseInt(j_day_no/12053);j_day_no%=12053;var jy=979+33*j_np+4*parseInt(j_day_no/1461);j_day_no%=1461;if(j_day_no>=366){jy+=parseInt((j_day_no-1)/365);j_day_no=(j_day_no-1)%365}for(var i=0;i<11&&j_day_no>=JalaliDate.j_days_in_month[i];++i){j_day_no-=JalaliDate.j_days_in_month[i]}var jm=i+1;var jd=j_day_no+1;return[jy,jm,jd]};Date.prototype.setJalaliFullYear=function(y,m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(y<100){y+=1300}j[0]=y;if(m!=undefined){if(m>11){j[0]+=Math.floor(m/12);m=m%12}j[1]=m+1}if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliMonth=function(m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(m>11){j[0]+=math.floor(m/12);m=m%12}j[1]=m+1;if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliDate=function(d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);j[2]=d;var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.getJalaliFullYear=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[0]};Date.prototype.getJalaliMonth=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[1]-1};Date.prototype.getJalaliDate=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[2]};Date.prototype.getJalaliDay=function(){var day=this.getDay();day=(day+1)%7;return day};Date.prototype.setJalaliFullYear=function(y,m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(y<100){y+=1300}j[0]=y;if(m!=undefined){if(m>11){j[0]+=Math.floor(m/12);m=m%12}j[1]=m+1}if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliMonth=function(m,d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);if(m>11){j[0]+=math.floor(m/12);m=m%12}j[1]=m+1;if(d!=undefined){j[2]=d}var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.setJalaliDate=function(d){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);j[2]=d;var g=JalaliDate.jalaliToGregorian(j[0],j[1],j[2]);return this.setFullYear(g[0],g[1]-1,g[2])};Date.prototype.getJalaliFullYear=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[0]};Date.prototype.getJalaliMonth=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[1]-1};Date.prototype.getJalaliDate=function(){var gd=this.getDate();var gm=this.getMonth();var gy=this.getFullYear();var j=JalaliDate.gregorianToJalali(gy,gm+1,gd);return j[2]};Date.prototype.getJalaliDay=function(){var day=this.getDay();day=(day+1)%7;return day};
//
JalaliDate = {
g_days_in_month: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
j_days_in_month: [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
};
JalaliDate.jalaliToGregorian = function(j_y, j_m, j_d)
{
j_y = parseInt(j_y);
j_m = parseInt(j_m);
j_d = parseInt(j_d);
var jy = j_y-979;
var jm = j_m-1;
var jd = j_d-1;
var j_day_no = 365*jy + parseInt(jy / 33)*8 + parseInt((jy%33+3) / 4);
for (var i=0; i < jm; ++i) j_day_no += JalaliDate.j_days_in_month[i];
j_day_no += jd;
var g_day_no = j_day_no+79;
var gy = 1600 + 400 * parseInt(g_day_no / 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
g_day_no = g_day_no % 146097;
var leap = true;
if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
{
g_day_no--;
gy += 100*parseInt(g_day_no/ 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
g_day_no = g_day_no % 36524;
if (g_day_no >= 365)
g_day_no++;
else
leap = false;
}
gy += 4*parseInt(g_day_no/ 1461); /* 1461 = 365*4 + 4/4 */
g_day_no %= 1461;
if (g_day_no >= 366) {
leap = false;
g_day_no--;
gy += parseInt(g_day_no/ 365);
g_day_no = g_day_no % 365;
}
for (var i = 0; g_day_no >= JalaliDate.g_days_in_month[i] + (i == 1 && leap); i++)
g_day_no -= JalaliDate.g_days_in_month[i] + (i == 1 && leap);
var gm = i+1;
var gd = g_day_no+1;
return [gy, gm, gd];
};
JalaliDate.checkDate = function(j_y, j_m, j_d)
{
return !(j_y < 0 || j_y > 32767 || j_m < 1 || j_m > 12 || j_d < 1 || j_d >
(JalaliDate.j_days_in_month[j_m-1] + (j_m == 12 && !((j_y-979)%33%4))));
};
JalaliDate.gregorianToJalali = function(g_y, g_m, g_d)
{
g_y = parseInt(g_y);
g_m = parseInt(g_m);
g_d = parseInt(g_d);
var gy = g_y-1600;
var gm = g_m-1;
var gd = g_d-1;
var g_day_no = 365*gy+parseInt((gy+3) / 4)-parseInt((gy+99)/100)+parseInt((gy+399)/400);
for (var i=0; i < gm; ++i)
g_day_no += JalaliDate.g_days_in_month[i];
if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0)))
/* leap and after Feb */
++g_day_no;
g_day_no += gd;
var j_day_no = g_day_no-79;
var j_np = parseInt(j_day_no/ 12053);
j_day_no %= 12053;
var jy = 979+33*j_np+4*parseInt(j_day_no/1461);
j_day_no %= 1461;
if (j_day_no >= 366) {
jy += parseInt((j_day_no-1)/ 365);
j_day_no = (j_day_no-1)%365;
}
for (var i = 0; i < 11 && j_day_no >= JalaliDate.j_days_in_month[i]; ++i) {
j_day_no -= JalaliDate.j_days_in_month[i];
}
var jm = i+1;
var jd = j_day_no+1;
return [jy, jm, jd];
};
Date.prototype.setLocalCalFullYear = function(y, m, d) {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
if (y < 100) y += 1300;
j[0] = y;
if (m != undefined) {
if (m > 11) {
j[0] += Math.floor(m / 12);
m = m % 12;
}
j[1] = m + 1;
}
if (d != undefined) j[2] = d;
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
return this.setFullYear(g[0], g[1]-1, g[2]);
};
Date.prototype.setLocalCalMonth = function(m, d) {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
if (m > 11) {
j[0] += Math.floor(m / 12);
m = m % 12;
}
j[1] = m+1;
if (d != undefined) j[2] = d;
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
return this.setFullYear(g[0], g[1]-1, g[2]);
};
Date.prototype.setLocalCalDate = function(d) {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
j[2] = d;
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
return this.setFullYear(g[0], g[1]-1, g[2]);
};
Date.prototype.getLocalCalFullYear = function() {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
return j[0];
};
Date.prototype.getLocalCalMonth = function() {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
return j[1]-1;
};
Date.prototype.getLocalCalDate = function() {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
return j[2];
};
Date.prototype.getLocalCalDay = function() {
var day = this.getDay();
day = (day + 1) % 7;
return day;
};
/**
* LocalCal functions
*/
Date.prototype.setLocalCalFullYear = function(y, m, d) {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
if (y < 100) y += 1300;
j[0] = y;
if (m != undefined) {
if (m > 11) {
j[0] += Math.floor(m / 12);
m = m % 12;
}
j[1] = m + 1;
}
if (d != undefined) j[2] = d;
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
return this.setFullYear(g[0], g[1]-1, g[2]);
};
Date.prototype.setLocalCalMonth = function(m, d) {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
if (m > 11) {
j[0] += Math.floor(m / 12);
m = m % 12;
}
j[1] = m+1;
if (d != undefined) j[2] = d;
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
return this.setFullYear(g[0], g[1]-1, g[2]);
};
Date.prototype.setLocalCalDate = function(d) {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
j[2] = d;
var g = JalaliDate.jalaliToGregorian(j[0], j[1], j[2]);
return this.setFullYear(g[0], g[1]-1, g[2]);
};
Date.prototype.getLocalCalFullYear = function() {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
return j[0];
};
Date.prototype.getLocalCalMonth = function() {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
return j[1]-1;
};
Date.prototype.getLocalCalDate = function() {
var gd = this.getDate();
var gm = this.getMonth();
var gy = this.getFullYear();
var j = JalaliDate.gregorianToJalali(gy, gm+1, gd);
return j[2];
};
Date.prototype.getLocalCalDay = function() {
var day = this.getDay();
day = (day + 1) % 7;
return day;
};
Date.prototype.getLocalCalMonthDays = function(month) {
var year = this.getLocalCalFullYear();
if (typeof month == "undefined") {
month = this.getLocalCalMonth()
}
if (month == 11 && JalaliDate.checkDate(year, month + 1, 30)) {
return 30
} else {
return Date.jalali_MD[month]
}
};
Date.prototype.getLocalCalWeekNumber = function() {
var A = JalaliDate.jalaliToGregorian(this.getLocalCalFullYear(), 1, 1);
var B = new Date(A[0], A[1] - 1, A[2], 0, 0, 0);
var C = this.getLocalCalDayOfYear() - ((7 - B.getLocalCalDay()) % 7) - 1;
if (C < 0) {
return new Date(this - this.getLocalCalDay() * Date.DAY).getLocalCalWeekNumber()
}
return Math.floor(C / 7) + 1
};
Date.prototype.getLocalCalDayOfYear = function() {
var B = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var A = JalaliDate.jalaliToGregorian(this.getLocalCalFullYear(), 1, 0);
var D = new Date(A[0], A[1] - 1, A[2], 0, 0, 0);
var C = B - D;
return Math.floor(C / Date.DAY)
};
Date.parseDate = function(I, M, C) {
I = I.toEnglish();
var N = new Date();
var G = new Date();
var E = null;
var J = null;
var O = null;
var R = 0;
var K = 0;
var P = 0;
var A = 0;
var Q = M.match(/%.|[^%]+/g);
for (var L = 0; L < Q.length; L++) {
if (Q[L].charAt(0) == "%") {
switch (Q[L]) {
case "%%":
case "%t":
case "%n":
case "%u":
case "%w":
I = I.substr(1);
break;
I = I.substr(1);
break;
case "%U":
case "%W":
case "%V":
var B;
if (B = I.match(/^[0-5]?\d/)) {
I = I.substr(B[0].length)
}
break;
case "%C":
var H;
if (H = I.match(/^\d{1,2}/)) {
I = I.substr(H[0].length)
}
break;
case "%A":
case "%a":
var S = (Q[L] == "%a") ? Date.stringSDN : Date.stringDN;
for (j = 0; j < 7; ++j) {
if (I.substr(0, S[j].length).toLowerCase() == S[j].toLowerCase()) {
I = I.substr(S[j].length);
break
}
}
break;
case "%d":
case "%e":
if (O = I.match(/^[0-3]?\d/)) {
I = I.substr(O[0].length);
O = parseInt(O[0], 10)
}
break;
case "%m":
if (J = I.match(/^[01]?\d/)) {
I = I.substr(J[0].length);
J = parseInt(J[0], 10) - 1
}
break;
case "%Y":
case "%y":
if (E = I.match(/^\d{2,4}/)) {
I = I.substr(E[0].length);
E = parseInt(E[0], 10);
if (E < 100) {
if (C == "jalali") {
E += (E > 29) ? 1300 : 1400
} else {
E += (E > 29) ? 1900 : 2000
}
}
}
break;
case "%b":
case "%B":
if (C != "gregorian") {
var F = (Q[L] == "%b") ? Date.stringSMN : Date.stringMN; // Jalali
} else {
var F = (Q[L] == "%b") ? Date.stringSMN : Date.stringMN;
}
for (j = 0; j < 12; ++j) {
if (I.substr(0, F[j].length).toLowerCase() == F[j].toLowerCase()) {
I = I.substr(F[j].length);
J = j;
break
}
}
break;
case "%H":
case "%I":
case "%k":
case "%l":
if (R = I.match(/^[0-2]?\d/)) {
I = I.substr(R[0].length);
R = parseInt(R[0], 10)
}
break;
case "%P":
case "%p":
if (I.substr(0, Date.stringTIMEPM.length) == Date.stringTIMEPM) {
I = I.substr(JoomlaCalendar.stringTIMEPM.length);
if (R < 12) {
R += 12
}
}
if (I.substr(0, Date.stringTIMEPM.length) == Date.stringTIMEPM) {
I = I.substr(Date.stringTIMEPM.length);
if (R < 12) {
R += 12
}
}
if (I.substr(0, Date.stringTIMEAM.length) == Date.stringTIMEAM) {
I = I.substr(Date.stringTIMEAM.length);
if (R >= 12) {
R -= 12
}
}
if (I.substr(0, Date.stringTIMEAM.length) == Date.stringTIMEAM) {
I = I.substr(Date.stringTIMEAM.length);
if (R >= 12) {
R -= 12
}
}
break;
case "%M":
if (K = I.match(/^[0-5]?\d/)) {
I = I.substr(K[0].length);
K = parseInt(K[0], 10)
}
break;
case "%S":
if (P = I.match(/^[0-5]?\d/)) {
I = I.substr(P[0].length);
P = parseInt(P[0], 10)
}
break;
case "%s":
var D;
if (D = I.match(/^-?\d+/)) {
return new Date(parseInt(D[0], 10) * 1000)
}
break;
default:
I = I.substr(2);
break
}
} else {
I = I.substr(Q[L].length)
}
}
if (E == null || isNaN(E)) {
E = N.getLocalFullYear(false, C)
}
if (J == null || isNaN(J)) {
J = N.getLocalMonth(false, C)
}
if (O == null || isNaN(O)) {
O = N.getLocalDate(false, C)
}
if (R == null || isNaN(R)) {
R = N.getHours()
}
if (K == null || isNaN(K)) {
K = N.getMinutes()
}
if (P == null || isNaN(P)) {
P = N.getSeconds()
}
G.setLocalFullYear(true, C, E, J, O);
G.setHours(R, K, P, A);
console.log(G);
return G
};
Date.prototype.print = function(str, B) {
if (typeof str == "undefined") str = JoomlaCalendar.params.dateFormat;
var J = this.getLocalMonth(B);
var O = this.getLocalDate(B);
var D = this.getLocalFullYear(B);
var A = this.getLocalWeekNumber(B);
var F = this.getLocalCalDay();
var G = {};
var S = this.getHours();
var M = (S >= 12);
var C = (M) ? (S - 12) : S;
var E = this.getLocalDayOfYear(B);
if (C == 0) {
C = 12
}
var K = this.getMinutes();
var Q = this.getSeconds();
G["%a"] = Date.stringSDN[F];
G["%A"] = Date.stringDN[F];
G["%b"] = (B == "jalali" ? Date.stringSMN[J] : Date.stringSMN[J]);
G["%B"] = (B == "jalali" ? Date.stringMN[J] : Date.stringMN[J]);
G["%C"] = 1 + Math.floor(D / 100);
G["%d"] = (O < 10) ? ("0" + O) : O;
G["%e"] = O;
G["%H"] = (S < 10) ? ("0" + S) : S;
G["%I"] = (C < 10) ? ("0" + C) : C;
G["%j"] = (E < 100) ? ((E < 10) ? ("00" + E) : ("0" + E)) : E;
G["%k"] = S;
G["%l"] = C;
G["%m"] = (J < 9) ? ("0" + (1 + J)) : (1 + J);
G["%M"] = (K < 10) ? ("0" + K) : K;
G["%n"] = "\n";
G["%p"] = M ? Date.stringTIMEPM : Date.stringTIMEAM;
G["%P"] = M ? Date.stringTIMEPM : Date.stringTIMEAM;
G["%s"] = Math.floor(this.getTime() / 1000);
G["%S"] = (Q < 10) ? ("0" + Q) : Q;
G["%t"] = "\t";
G["%U"] = G["%W"] = G["%V"] = (A < 10) ? ("0" + A) : A;
G["%u"] = this.getLocalCalDay(B) + 1;
G["%w"] = this.getLocalCalDay(B);
G["%y"] = ("" + D).substr(2, 2);
G["%Y"] = D;
G["%%"] = "%";
var re = /%./g;
console.log(str);
var tmpDate = str.replace(re, function (par) { return G[par] || par; });
if (Object.prototype.toString.call(Date.localLangNumbers) === '[object Array]' && C != 'gregorian')
tmpDate = tmpDate.convertNumbers();
return tmpDate;
};
String.prototype.toEnglish = function() {
str = this.toString();
if (Date.localLangNumbers) {
for (var A = 0; A < Date.localLangNumbers.length; A++) {
str = str.replace(new RegExp(Date.localLangNumbers[A], "g"), A)
}
}
return str
};
/*********************************************************************
************************** Initialize *******************************
*********************************************************************/
/**
* Support for calendars other than gregorian should be done in this file ONLY!
*
* Make sure you initialise those functions:
* setLocalCalFullYear() Sets the year in the local calendar
* setLocalCalMonth() Sets the month in the local calendar
* setLocalCalDate() Sets the day in the local calendar
*
* getLocalCalMonth() Gets the month in the local calendar
* getLocalCalWeekNumber() Gets the week number in the local calendar
* getLocalCalDate() Gets the day in the local calendar
* getLocalCalDayOfYear() Gets the day of the year in the local calendar
* getLocalCalMonthDays() Gets the number of days for the month
*
* Date.localCal_MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); The array with the days per month
*
* Also you need to provide an override for:
* Date.parseDate() The string parser that converts it to date
* gregorianToLocal Converts a gregorian calendar date to the local calendar
* localToGregorian Converts a local calendar date to gregorian calendar
*
* dateType: 'jalali' The name of the local calendar
* localLangNumbers: [0-9] The array with the translated numbers 0 to 9
*
* Also needed a function that will bind on form submit and will convert local to gregorian.
**/
document.onreadystatechange = function () {
if (document.readyState == "interactive") {
JoomlaCalendar.setup = function (elem) {
var element = elem.getElementsByTagName("button")[0];
Date.stringDN =element.getAttribute("data-weekdays_full") ? element.getAttribute("data-weekdays_full").split('_') :
["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]; // Translated full day names
Date.stringSDN = element.getAttribute("data-weekdays_short") ? element.getAttribute("data-weekdays_short").split('_') :
["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; // Translated short day names
Date.stringMN = element.getAttribute("data-months_long") ? element.getAttribute("data-months_long").split('_') :
["January","February","March","April","May","June","July","August","September","October","November","December"]; // Translated full month names
Date.stringSMN = element.getAttribute("data-months_short") ? element.getAttribute("data-months_short").split('_') :
["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; // Translated short month names
Date.stringTODAY = element.getAttribute("data-today_trans") ? element.getAttribute("data-today_trans") : "Today"; // Translated string for Today
Date.stringWEEKEND = element.getAttribute("data-weekend") ? element.getAttribute("data-weekend").split(',').map(Number) :
[0,6]; // integers comma separated 0,6
Date.stringWK = element.getAttribute("data-wk") ? element.getAttribute("data-wk") : "wk"; // Translated string for wk
Date.stringTIME = element.getAttribute("data-time") ? element.getAttribute("data-time") : "Time:"; // Translated string for Time:
Date.stringTIMEAM = element.getAttribute("data-time_am") ? element.getAttribute("data-time_am") : "AM"; // Translated string for AM
Date.stringTIMEPM = element.getAttribute("data-time_pm") ? element.getAttribute("data-time_pm") : "PM"; // Translated string for PM
Date.localStringDN = element.getAttribute("data-weekdays_full") ? element.getAttribute("data-weekdays_full").split('_') :
["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]; // Translated full day names
Date.localStringSDN = element.getAttribute("data-weekdays_short") ? element.getAttribute("data-weekdays_short").split('_') :
["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sun"]; // Translated short day names
Date.localStringMN = element.getAttribute("data-months_long") ? element.getAttribute("data-months_long").split('_') :
["January","February","March","April","May","June","July","August","September","October","November","December"]; // Translated full month names
Date.localStringSMN = element.getAttribute("data-months_short") ? element.getAttribute("data-months_short").split('_') :
["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; // Translated short month names
Date.localStringTODAY = element.getAttribute("data-today_trans") ? element.getAttribute("data-today_trans") : "Today"; // Translated string for Today
Date.localStringWEEKEND= element.getAttribute("data-weekend") ? element.getAttribute("data-weekend").split(',').map(Number) :
[0,6]; // integers comma separated 0,6
Date.localStringWK = element.getAttribute("data-wk") ? element.getAttribute("data-wk") : "wk"; // Translated string for wk
Date.localStringTIME = element.getAttribute("data-time") ? element.getAttribute("data-time") : "Time:"; // Translated string for Time:
Date.localStringTIMEAM = element.getAttribute("data-time_am") ? element.getAttribute("data-time_am") : "AM"; // Translated string for AM
Date.localStringTIMEPM = element.getAttribute("data-time_pm") ? element.getAttribute("data-time_pm") : "PM"; // Translated string for PM
Date.localLangNumbers = ["۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"]; // Translated string for PM
Date.dateType = 'jalali'; // Translated string for PM
JoomlaCalendar.addEvent(element, "click", function () {
var params = {
inputField : element.parentNode.getElementsByTagName('INPUT')[0], // The related input
dateFormat : element.getAttribute("data-dayformat") ? element.getAttribute("data-dayformat") : "%Y-%m-%d %H:%M:%S", // The date format
button : element, // The button associated
firstDayOfWeek : element.getAttribute("data-firstday") ? parseInt(element.getAttribute("data-firstday")) : 0, // First day (from translated strings) integer 0 = Sun
showsTodayBtn : (parseInt(element.getAttribute("data-today_btn")) == 0) ? false : true, // Enable today button?
compressedHeader : (parseInt(element.getAttribute("data-only_months_nav")) == 1) ? true : false, // Month and year in one line?
minYear : element.getAttribute("data-min_year") ? parseInt(element.getAttribute("data-min_year")) : 1970, // Minimum year
maxYear : element.getAttribute("data-max_year") ? parseInt(element.getAttribute("data-max_year")) : 2050, // Maximum year
weekNumbers : (parseInt(element.getAttribute("data-week_numbers")) == 1) ? true : false, // Display week numbers column?
showsTime : (parseInt(element.getAttribute("data-shows_time")) == 1) ? true : false, // Enable time picker? Make sure that the date format also INCLUDES time
time24 : (parseInt(element.getAttribute("data-time_24")) == 24) ? true : false, // Use 24 hour format?
showsOthers : (parseInt(element.getAttribute("data-show_others")) == 0) ? false : true, // Show days form the month before and after?
/**
* Support for different calendars, e.g.: jalali
*/
dateType: 'jalali'
};
// Initialize only if the button and input field are set
if (!(params.inputField || params.button)) {
console.log("Calendar.setup:\n Nothing to setup (no fields found). Please check your code");
return false;
}
// jQuery(document).ready(function() {
//
// JoomlaCalendar.params.inputField.form.addEvent('onsubmit', function () {
// var dateEl = JoomlaCalendar.params.inputField;
// var dateFmt = JoomlaCalendar.params.dateFormat;
// if (dateEl && parseInt(dateEl.value) != 0 && dateEl.value != '') {
// console.log(dateEl.value);
// var date = Date.parseDate(dateEl.value, dateFmt, 'jalali');
// JoomlaCalendar.params.inputField.value = date.print(dateFmt, 'gregorian');
// }
// });
// });
// jQuery(document).ready(function() {
// jQuery('form').on('submit', function() {
// var cals = document.getElementsByClassName("field-calendar");
//
// for (var index = 0, len = calendars.length; index < len; ++index) {
// // JoomlaCalendar.setup(calendars[index]);
// // var btn = calendars[index].getElementsByTagName("button")[0];
// var inpt = calendars[index].getElementsByTagName('INPUT')[0];
//
// var dateEl = inpt;
// var dateFmt = params.dateFormat;
// if (dateEl && parseInt(dateEl.value) != 0 && dateEl.value != '') {
// // We parse the jalali date
// var date = Date.parseDate(dateEl.value, dateFmt, 'gregorian');
// // And tranform it to gregorian
// dateEl.value = date.print(dateFmt, 'jalali');
// console.log(dateEl.value )
// }
// }
//
//
// });
// });
// Method to set the value for the input field
var customOnSelect = function onSelect(cal) {
var p = cal.params;
var update = cal.dateClicked;
if (params.inputField) {
p.inputField.value = cal.date.print(p.dateFormat, p.dateType);
if (typeof params.inputField.onchange == "function")
p.inputField.onchange();
}
if (update && typeof jCalendar.onUpdate == "function")
cal.onUpdate(cal);
if (update && cal.dateClicked)
cal.callCloseHandler();
};
/**
* Initialize the calendar
*
* @type {Window.JoomlaCalendar}
*/
window.jCalendar = cal = new JoomlaCalendar(customOnSelect, null, params);
cal.params = params;
cal.setDateFormat(params.dateFormat);
cal.onSelected = customOnSelect;
cal.onClose = function (cal) { cal.hide(); };
// Initialize the calendar
var dateEl = params.inputField;
var dateFmt = params.dateFormat;
var cal = window.jCalendar;
// Get the date from the input
if (dateEl && parseInt(dateEl.value) != 0 && dateEl.value != '') {
var date = Date.parseDate(dateEl.value, dateFmt, 'gregorian');
cal.date = date.print(params.dateFormat, 'jalali');
} else {
cal.date = new Date();
// date = Date.parseDate(dateEl.value, dateFmt, 'gregorian');
//params.dateStr = date.print(params.ifFormat, 'jalali');
}
cal.create(params.inputField);
cal.refresh();
cal.show();
return cal;
})
};
// Get all the calendar fields
var calendars = document.getElementsByClassName("field-calendar");
// Loop to initialize them all
for (var index = 0, len = calendars.length; index < len; ++index) {
JoomlaCalendar.setup(calendars[index]);
}
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment