Spade
Mini Shell
| Directory:~$ /home/lmsyaran/public_html/joomla4/ |
| [Home] [System Details] [Kill Me] |
home/lmsyaran/public_html/language/fa-IR/js/calendar-uncompressed.js000064400000177405151156251310021553
0ustar00Calendar = function(D, C, F, A) {
this.activeDiv = null;
this.currentDateEl = null;
this.getDateStatus = null;
this.getDateToolTip = null;
this.getDateText = null;
this.timeout = null;
this.onSelected = F || null;
this.onClose = A || null;
this.dragging = false;
this.hidden = false;
this.minYear = 1000;
this.maxYear = 3000;
this.langNumbers = false;
this.dateType = "gregorian";
this.dateFormat = Calendar._TT.DEF_DATE_FORMAT;
this.ttDateFormat = Calendar._TT.TT_DATE_FORMAT;
this.isPopup = true;
this.weekNumbers = true;
this.firstDayOfWeek = typeof D == "number" ? D :
Calendar._FD;
this.showsOtherMonths = false;
this.dateStr = C;
this.ar_days = null;
this.showsTime = false;
this.time24 = true;
this.yearStep = 2;
this.hiliteToday = true;
this.multiple = null;
this.table = null;
this.element = null;
this.tbody = null;
this.firstdayname = null;
this.monthsCombo = null;
this.yearsCombo = null;
this.hilitedMonth = null;
this.activeMonth = null;
this.hilitedYear = null;
this.activeYear = null;
this.dateClicked = false;
if (typeof Calendar._SDN == "undefined") {
if (typeof Calendar._SDN_len == "undefined") {
Calendar._SDN_len = 3
}
var B = new Array();
for (var E = 8; E > 0;) {
B[--E] = Calendar._DN[E].substr(0, Calendar._SDN_len)
}
Calendar._SDN = B;
if (typeof Calendar._SMN_len == "undefined") {
Calendar._SMN_len = 3
}
if (typeof Calendar._JSMN_len == "undefined") {
Calendar._JSMN_len = 3
}
B = new Array();
for (var E = 12; E > 0;) {
B[--E] = Calendar._MN[E].substr(0, Calendar._SMN_len)
}
Calendar._SMN = B;
B = new Array();
for (var E = 12; E > 0;) {
B[--E] = Calendar._JMN[E].substr(0, Calendar._JSMN_len)
}
Calendar._JSMN = B
}
};
Calendar._C = null;
Calendar.is_ie = (/msie/i.test(navigator.userAgent) &&
!/opera/i.test(navigator.userAgent));
Calendar.is_ie5 = (Calendar.is_ie && /msie
5\.0/i.test(navigator.userAgent));
Calendar.is_opera = /opera/i.test(navigator.userAgent);
Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);
Calendar.getAbsolutePos = function(E) {
var A = 0,
D = 0;
var C = /^div$/i.test(E.tagName);
if (C && E.scrollLeft) {
A = E.scrollLeft
}
if (C && E.scrollTop) {
D = E.scrollTop
}
var F = {
x: E.offsetLeft - A,
y: E.offsetTop - D
};
if (E.offsetParent) {
var B = this.getAbsolutePos(E.offsetParent);
F.x += B.x;
F.y += B.y
}
return F
};
Calendar.isRelated = function(C, A) {
var D = A.relatedTarget;
if (!D) {
var B = A.type;
if (B == "mouseover") {
D = A.fromElement
} else {
if (B == "mouseout") {
D = A.toElement
}
}
}
while (D) {
if (D == C) {
return true
}
D = D.parentNode
}
return false
};
Calendar.removeClass = function(E, D) {
if (!(E && E.className)) {
return
}
var A = E.className.split(" ");
var B = new Array();
for (var C = A.length; C > 0;) {
if (A[--C] != D) {
B[B.length] = A[C]
}
}
E.className = B.join(" ")
};
Calendar.addClass = function(B, A) {
Calendar.removeClass(B, A);
B.className += " " + A
};
Calendar.getElement = function(A) {
var B = Calendar.is_ie ? window.event.srcElement : A.currentTarget;
while (B.nodeType != 1 || /^div$/i.test(B.tagName)) {
B = B.parentNode
}
return B
};
Calendar.getTargetElement = function(A) {
var B = Calendar.is_ie ? window.event.srcElement : A.target;
while (B.nodeType != 1) {
B = B.parentNode
}
return B
};
Calendar.stopEvent = function(A) {
A || (A = window.event);
if (Calendar.is_ie) {
A.cancelBubble = true;
A.returnValue = false
} else {
A.preventDefault();
A.stopPropagation()
}
return false
};
Calendar.addEvent = function(A, C, B) {
if (A.attachEvent) {
A.attachEvent("on" + C, B)
} else {
if (A.addEventListener) {
A.addEventListener(C, B, true)
} else {
A["on" + C] = B
}
}
};
Calendar.removeEvent = function(A, C, B) {
if (A.detachEvent) {
A.detachEvent("on" + C, B)
} else {
if (A.removeEventListener) {
A.removeEventListener(C, B, true)
} else {
A["on" + C] = null
}
}
};
Calendar.createElement = function(C, B) {
var A = null;
if (document.createElementNS) {
A =
document.createElementNS("http://www.w3.org/1999/xhtml", C)
} else {
A = document.createElement(C)
}
if (typeof B != "undefined") {
B.appendChild(A)
}
return A
};
Calendar.prototype.convertNumbers = function(A) {
A = A.toString();
if (this.langNumbers) {
A = A.convertNumbers()
}
return A
};
String.prototype.toEnglish = function() {
str = this.toString();
if (Calendar._NUMBERS) {
for (var A = 0; A < Calendar._NUMBERS.length; A++) {
str = str.replace(new RegExp(Calendar._NUMBERS[A],
"g"), A)
}
}
return str
};
String.prototype.convertNumbers = function() {
str = this.toString();
if (Calendar._NUMBERS) {
for (var A = 0; A < Calendar._NUMBERS.length; A++) {
str = str.replace(new RegExp(A, "g"),
Calendar._NUMBERS[A])
}
}
return str
};
Calendar._add_evs = function(el) {
with(Calendar) {
addEvent(el, "mouseover", dayMouseOver);
addEvent(el, "mousedown", dayMouseDown);
addEvent(el, "mouseout", dayMouseOut);
if (is_ie) {
addEvent(el, "dblclick", dayMouseDblClick);
el.setAttribute("unselectable", true)
}
}
};
Calendar.findMonth = function(A) {
if (typeof A.month != "undefined") {
return A
} else {
if (typeof A.parentNode.month != "undefined") {
return A.parentNode
}
}
return null
};
Calendar.findYear = function(A) {
if (typeof A.year != "undefined") {
return A
} else {
if (typeof A.parentNode.year != "undefined") {
return A.parentNode
}
}
return null
};
Calendar.showMonthsCombo = function() {
var E = Calendar._C;
if (!E) {
return false
}
var E = E;
var F = E.activeDiv;
var D = E.monthsCombo;
if (E.hilitedMonth) {
Calendar.removeClass(E.hilitedMonth, "hilite")
}
if (E.activeMonth) {
Calendar.removeClass(E.activeMonth, "active")
}
var C =
E.monthsCombo.getElementsByTagName("div")[E.date.getLocalMonth(true,
E.dateType)];
Calendar.addClass(C, "active");
E.activeMonth = C;
var B = D.style;
B.display = "block";
if (F.navtype < 0) {
B.left = F.offsetLeft + "px"
} else {
var A = D.offsetWidth;
if (typeof A == "undefined") {
A = 50
}
B.left = (F.offsetLeft + F.offsetWidth - A) + "px"
}
B.top = (F.offsetTop + F.offsetHeight) + "px"
};
Calendar.showYearsCombo = function(D) {
var A = Calendar._C;
if (!A) {
return false
}
var A = A;
var C = A.activeDiv;
var F = A.yearsCombo;
if (A.hilitedYear) {
Calendar.removeClass(A.hilitedYear, "hilite")
}
if (A.activeYear) {
Calendar.removeClass(A.activeYear, "active")
}
A.activeYear = null;
var B = A.date.getLocalFullYear(true, A.dateType) + (D ? 1 : -1);
var I = F.firstChild;
var H = false;
for (var E = 12; E > 0; --E) {
if (B >= A.minYear && B <= A.maxYear) {
I.innerHTML = A.convertNumbers(B);
I.year = B;
I.style.display = "block";
H = true
} else {
I.style.display = "none"
}
I = I.nextSibling;
B += D ? A.yearStep : -A.yearStep
}
if (H) {
var J = F.style;
J.display = "block";
if (C.navtype < 0) {
J.left = C.offsetLeft + "px"
} else {
var G = F.offsetWidth;
if (typeof G == "undefined") {
G = 50
}
J.left = (C.offsetLeft + C.offsetWidth - G) + "px"
}
J.top = (C.offsetTop + C.offsetHeight) + "px"
}
};
Calendar.tableMouseUp = function(ev) {
var cal = Calendar._C;
if (!cal) {
return false
}
if (cal.timeout) {
clearTimeout(cal.timeout)
}
var el = cal.activeDiv;
if (!el) {
return false
}
var target = Calendar.getTargetElement(ev);
ev || (ev = window.event);
Calendar.removeClass(el, "active");
if (target == el || target.parentNode == el) {
Calendar.cellClick(el, ev)
}
var mon = Calendar.findMonth(target);
var date = null;
if (mon) {
date = new Date(cal.date);
if (mon.month != date.getLocalMonth(true, cal.dateType)) {
date.setLocalMonth(true, cal.dateType, mon.month);
cal.setDate(date);
cal.dateClicked = false;
cal.callHandler()
}
} else {
var year = Calendar.findYear(target);
if (year) {
date = new Date(cal.date);
if (year.year != date.getLocalFullYear(true, cal.dateType)) {
date._calSetLocalFullYear(cal.dateType, year.year);
cal.setDate(date);
cal.dateClicked = false;
cal.callHandler()
}
}
}
with(Calendar) {
removeEvent(document, "mouseup", tableMouseUp);
removeEvent(document, "mouseover", tableMouseOver);
removeEvent(document, "mousemove", tableMouseOver);
cal._hideCombos();
_C = null;
return stopEvent(ev)
}
};
Calendar.tableMouseOver = function(M) {
var A = Calendar._C;
if (!A) {
return
}
var C = A.activeDiv;
var I = Calendar.getTargetElement(M);
if (I == C || I.parentNode == C) {
Calendar.addClass(C, "hilite active");
Calendar.addClass(C.parentNode, "rowhilite")
} else {
if (typeof C.navtype == "undefined" || (C.navtype != 50
&& (C.navtype == 0 || Math.abs(C.navtype) > 2))) {
Calendar.removeClass(C, "active")
}
Calendar.removeClass(C, "hilite");
Calendar.removeClass(C.parentNode, "rowhilite")
}
M || (M = window.event);
if (C.navtype == 50 && I != C) {
var L = Calendar.getAbsolutePos(C);
var O = C.offsetWidth;
var N = M.clientX;
var P;
var K = true;
if (N > L.x + O) {
P = N - L.x - O;
K = false
} else {
P = L.x - N
}
if (P < 0) {
P = 0
}
var F = C._range;
var H = C._current;
var G = Math.floor(P / 10) % F.length;
for (var E = F.length; --E >= 0;) {
if (F[E] == H) {
break
}
}
while (G-- > 0) {
if (K) {
if (--E < 0) {
E = F.length - 1
}
} else {
if (++E >= F.length) {
E = 0
}
}
}
var B = F[E];
C.innerHTML = A.convertNumbers(B);
A.onUpdateTime()
}
var D = Calendar.findMonth(I);
if (D) {
if (D.month != A.date.getLocalMonth(true, A.dateType)) {
if (A.hilitedMonth) {
Calendar.removeClass(A.hilitedMonth, "hilite")
}
Calendar.addClass(D, "hilite");
A.hilitedMonth = D
} else {
if (A.hilitedMonth) {
Calendar.removeClass(A.hilitedMonth, "hilite")
}
}
} else {
if (A.hilitedMonth) {
Calendar.removeClass(A.hilitedMonth, "hilite")
}
var J = Calendar.findYear(I);
if (J) {
if (J.year != A.date.getLocalFullYear(true, A.dateType)) {
if (A.hilitedYear) {
Calendar.removeClass(A.hilitedYear,
"hilite")
}
Calendar.addClass(J, "hilite");
A.hilitedYear = J
} else {
if (A.hilitedYear) {
Calendar.removeClass(A.hilitedYear,
"hilite")
}
}
} else {
if (A.hilitedYear) {
Calendar.removeClass(A.hilitedYear, "hilite")
}
}
}
return Calendar.stopEvent(M)
};
Calendar.tableMouseDown = function(A) {
if (Calendar.getTargetElement(A) == Calendar.getElement(A)) {
return Calendar.stopEvent(A)
}
};
Calendar.calDragIt = function(B) {
var C = Calendar._C;
if (!(C && C.dragging)) {
return false
}
var E;
var D;
if (Calendar.is_ie) {
D = window.event.clientY + document.body.scrollTop;
E = window.event.clientX + document.body.scrollLeft
} else {
E = B.pageX;
D = B.pageY
}
C.hideShowCovered();
var A = C.element.style;
A.left = (E - C.xOffs) + "px";
A.top = (D - C.yOffs) + "px";
return Calendar.stopEvent(B)
};
Calendar.calDragEnd = function(ev) {
var cal = Calendar._C;
if (!cal) {
return false
}
cal.dragging = false;
with(Calendar) {
removeEvent(document, "mousemove", calDragIt);
removeEvent(document, "mouseup", calDragEnd);
tableMouseUp(ev)
}
cal.hideShowCovered()
};
Calendar.dayMouseDown = function(ev) {
var el = Calendar.getElement(ev);
if (el.disabled) {
return false
}
var cal = el.calendar;
cal.activeDiv = el;
Calendar._C = cal;
if (el.navtype != 300) {
with(Calendar) {
if (el.navtype == 50) {
el._current = el.innerHTML.toEnglish();
addEvent(document, "mousemove", tableMouseOver)
} else {
addEvent(document, Calendar.is_ie5 ? "mousemove"
: "mouseover", tableMouseOver)
}
addClass(el, "hilite active");
addEvent(document, "mouseup", tableMouseUp)
}
} else {
if (cal.isPopup) {
cal._dragStart(ev)
}
}
if (el.navtype == -1 || el.navtype == 1) {
if (cal.timeout) {
clearTimeout(cal.timeout)
}
cal.timeout = setTimeout("Calendar.showMonthsCombo()",
250)
} else {
if (el.navtype == -2 || el.navtype == 2) {
if (cal.timeout) {
clearTimeout(cal.timeout)
}
cal.timeout = setTimeout((el.navtype > 0) ?
"Calendar.showYearsCombo(true)" :
"Calendar.showYearsCombo(false)", 250)
} else {
cal.timeout = null
}
}
return Calendar.stopEvent(ev)
};
Calendar.dayMouseDblClick = function(A) {
Calendar.cellClick(Calendar.getElement(A), A || window.event);
if (Calendar.is_ie) {
document.selection.empty()
}
};
Calendar.dayMouseOver = function(B) {
var A = Calendar.getElement(B);
if (Calendar.isRelated(A, B) || Calendar._C || A.disabled) {
return false
}
if (A.ttip) {
if (A.ttip.substr(0, 1) == "_") {
A.ttip = A.caldate.print(A.calendar.ttDateFormat,
A.calendar.dateType, A.calendar.langNumbers) + A.ttip.substr(1)
}
A.calendar.tooltips.innerHTML = A.ttip
}
if (A.navtype != 300) {
Calendar.addClass(A, "hilite");
if (A.caldate) {
Calendar.addClass(A.parentNode, "rowhilite")
}
}
return Calendar.stopEvent(B)
};
Calendar.dayMouseOut = function(ev) {
with(Calendar) {
var el = getElement(ev);
if (isRelated(el, ev) || _C || el.disabled) {
return false
}
removeClass(el, "hilite");
if (el.caldate) {
removeClass(el.parentNode, "rowhilite")
}
if (el.calendar) {
el.calendar.tooltips.innerHTML = _TT.SEL_DATE
}
return stopEvent(ev)
}
};
Calendar.cellClick = function(E, N) {
var C = E.calendar;
var H = false;
var K = false;
var F = null;
if (typeof E.navtype == "undefined") {
if (C.currentDateEl) {
Calendar.removeClass(C.currentDateEl, "selected");
Calendar.addClass(E, "selected");
H = (C.currentDateEl == E);
if (!H) {
C.currentDateEl = E
}
}
C.date.setUTCDateOnly(E.caldate);
F = C.date;
var B = !(C.dateClicked = !E.otherMonth);
if (!B && !C.currentDateEl) {
C._toggleMultipleDate(new Date(F))
} else {
K = !E.disabled
}
if (B) {
C._init(C.firstDayOfWeek, F)
}
} else {
if (E.navtype == 200) {
Calendar.removeClass(E, "hilite");
C.callCloseHandler();
return
}
F = new Date(C.date);
if (E.navtype == 0) {
F.setUTCDateOnly(new Date())
}
C.dateClicked = false;
var M = F.getLocalFullYear(true, C.dateType);
var G = F.getLocalMonth(true, C.dateType);
function A(Q) {
var R = F.getLocalDate(true, C.dateType);
var P = F.getLocalMonthDays(C.dateType, Q);
if (R > P) {
F.setLocalDate(true, C.dateType, P)
}
F.setLocalMonth(true, C.dateType, Q)
}
switch (E.navtype) {
case 400:
Calendar.removeClass(E, "hilite");
var O = Calendar._TT.ABOUT;
if (typeof O != "undefined") {
O += C.showsTime ? Calendar._TT.ABOUT_TIME :
""
} else {
O = 'Help and about box text is not translated
into this language.\nIf you know this language and you feel generous please
update\nthe corresponding file in "lang" subdir to match
calendar-en.js\nand send it back to <mihai_bazon@yahoo.com> to get it
into the distribution ;-)\n\nThank
you!\nhttp://dynarch.com/mishoo/calendar.epl\n'
}
alert(O);
return;
case -2:
if (M > C.minYear) {
F._calSetLocalFullYear(C.dateType, M - 1)
}
break;
case -1:
if (G > 0) {
A(G - 1)
} else {
if (M-- > C.minYear) {
F._calSetLocalFullYear(C.dateType, M);
A(11)
}
}
break;
case 1:
if (G < 11) {
A(G + 1)
} else {
if (M < C.maxYear) {
A(0);
F._calSetLocalFullYear(C.dateType, M + 1)
}
}
break;
case 2:
if (M < C.maxYear) {
F._calSetLocalFullYear(C.dateType, M + 1)
}
break;
case 100:
C.setFirstDayOfWeek(E.fdow);
return;
case 50:
var J = E._range;
var L = E.innerHTML.toEnglish();
for (var I = J.length; --I >= 0;) {
if (J[I] == L) {
break
}
}
if (N && N.shiftKey) {
if (--I < 0) {
I = J.length - 1
}
} else {
if (++I >= J.length) {
I = 0
}
}
var D = J[I];
E.innerHTML = C.convertNumbers(D);
C.onUpdateTime();
return;
case 0:
if ((typeof C.getDateStatus == "function")
&& C.getDateStatus(F, F.getLocalFullYear(true, C.dateType),
F.getLocalMonth(true, C.dateType), F.getLocalDate(true, C.dateType))) {
return false
}
break
}
if (!F.equalsTo(C.date)) {
C.setDate(F);
K = true
} else {
if (E.navtype == 0) {
K = H = true
}
}
}
if (K) {
N && C.callHandler()
}
if (H) {
Calendar.removeClass(E, "hilite");
N && C.callCloseHandler()
}
};
Calendar.prototype.create = function(L) {
var K = null;
if (!L) {
K = document.getElementsByTagName("body")[0];
this.isPopup = true
} else {
K = L;
this.isPopup = false
}
if (!this.date) {
this.date = this.dateStr ? new Date(this.dateStr) : new Date()
}
var O = Calendar.createElement("table");
this.table = O;
O.cellSpacing = 0;
O.cellPadding = 0;
O.calendar = this;
Calendar.addEvent(O, "mousedown", Calendar.tableMouseDown);
var A = Calendar.createElement("div");
this.element = A;
if (Calendar._DIR) {
this.element.style.direction = Calendar._DIR
}
A.className = "calendar";
if (this.isPopup) {
A.style.position = "absolute";
A.style.display = "none"
}
A.appendChild(O);
var I = Calendar.createElement("thead", O);
var M = null;
var P = null;
var B = this;
var E = function(S, R, Q) {
M = Calendar.createElement("td", P);
M.colSpan = R;
M.className = "button";
if (Q != 0 && Math.abs(Q) <= 2) {
M.className += " nav"
}
Calendar._add_evs(M);
M.calendar = B;
M.navtype = Q;
M.innerHTML = "<div unselectable='on'>" +
S + "</div>";
return M
};
P = Calendar.createElement("tr", I);
var C = 6;
(this.isPopup) && --C;
(this.weekNumbers) && ++C;
E("?", 1, 400).ttip = Calendar._TT.INFO;
this.title = E("", C, 300);
this.title.className = "title";
if (this.isPopup) {
this.title.ttip = Calendar._TT.DRAG_TO_MOVE;
this.title.style.cursor = "move";
E("×", 1, 200).ttip = Calendar._TT.CLOSE
}
P = Calendar.createElement("tr", I);
P.className = "headrow";
this._nav_py = E("«", 1, -2);
this._nav_py.ttip = Calendar._TT.PREV_YEAR;
this._nav_pm = E("‹", 1, -1);
this._nav_pm.ttip = Calendar._TT.PREV_MONTH;
this._nav_now = E(Calendar._TT.TODAY, this.weekNumbers ? 4 : 3, 0);
this._nav_now.ttip = Calendar._TT.GO_TODAY;
this._nav_nm = E("›", 1, 1);
this._nav_nm.ttip = Calendar._TT.NEXT_MONTH;
this._nav_ny = E("»", 1, 2);
this._nav_ny.ttip = Calendar._TT.NEXT_YEAR;
P = Calendar.createElement("tr", I);
P.className = "daynames";
if (this.weekNumbers) {
M = Calendar.createElement("td", P);
M.className = "name wn";
M.innerHTML = Calendar._TT.WK
}
for (var H = 7; H > 0; --H) {
M = Calendar.createElement("td", P);
if (!H) {
M.navtype = 100;
M.calendar = this;
Calendar._add_evs(M)
}
}
this.firstdayname = (this.weekNumbers) ? P.firstChild.nextSibling :
P.firstChild;
this._displayWeekdays();
var G = Calendar.createElement("tbody", O);
this.tbody = G;
for (H = 6; H > 0; --H) {
P = Calendar.createElement("tr", G);
if (this.weekNumbers) {
M = Calendar.createElement("td", P)
}
for (var F = 7; F > 0; --F) {
M = Calendar.createElement("td", P);
M.calendar = this;
Calendar._add_evs(M)
}
}
if (this.showsTime) {
P = Calendar.createElement("tr", G);
P.className = "time";
M = Calendar.createElement("td", P);
M.className = "time";
M.colSpan = 2;
M.innerHTML = Calendar._TT.TIME || " ";
M = Calendar.createElement("td", P);
M.className = "time";
M.colSpan = this.weekNumbers ? 4 : 3;
(function() {
function T(c, e, d, f) {
var a = Calendar.createElement("span", M);
a.className = c;
a.innerHTML = B.convertNumbers(e);
a.calendar = B;
a.ttip = Calendar._TT.TIME_PART;
a.navtype = 50;
a._range = [];
if (typeof d != "number") {
a._range = d
} else {
for (var b = d; b <= f; ++b) {
var Z;
if (b < 10 && f >= 10) {
Z = "0" + b
} else {
Z = "" + b
}
a._range[a._range.length] = Z
}
}
Calendar._add_evs(a);
return a
}
var X = B.date.getUTCHours();
var Q = B.date.getUTCMinutes();
var Y = !B.time24;
var R = (X > 12);
if (Y && R) {
X -= 12
}
var V = T("hour", X, Y ? 1 : 0, Y ? 12 : 23);
var U = Calendar.createElement("span", M);
U.innerHTML = ":";
U.className = "colon";
var S = T("minute", Q, 0, 59);
var W = null;
M = Calendar.createElement("td", P);
M.className = "time";
M.colSpan = 2;
if (Y) {
W = T("ampm", R ? Calendar._TT.LPM :
Calendar._TT.LAM, [Calendar._TT.LAM, Calendar._TT.LPM])
} else {
M.innerHTML = " "
}
B.onSetTime = function() {
var a, Z = this.date.getUTCHours(),
b = this.date.getUTCMinutes();
if (Y) {
a = (Z >= 12);
if (a) {
Z -= 12
}
if (Z == 0) {
Z = 12
}
W.innerHTML = a ? Calendar._TT.LPM : Calendar._TT.LAM
}
Z = (Z < 10) ? ("0" + Z) : Z;
b = (b < 10) ? ("0" + b) : b;
V.innerHTML = B.convertNumbers(Z);
S.innerHTML = B.convertNumbers(b)
};
B.onUpdateTime = function() {
var a = this.date;
var b = parseInt(V.innerHTML.toEnglish(), 10);
if (Y) {
if ((W.innerHTML == Calendar._TT.LPM || W.innerHTML ==
Calendar._TT.PM) && b < 12) {
b += 12
} else {
if ((W.innerHTML == Calendar._TT.LAM || W.innerHTML
== Calendar._TT.AM) && b == 12) {
b = 0
}
}
}
var c = a.getLocalDate(true, this.dateType);
var Z = a.getLocalMonth(true, this.dateType);
var e = a.getLocalFullYear(true, this.dateType);
a.setUTCHours(b);
a.setUTCMinutes(parseInt(S.innerHTML.toEnglish(), 10));
a._calSetLocalFullYear(this.dateType, e);
a.setLocalMonth(true, this.dateType, Z);
a.setLocalDate(true, this.dateType, c);
this.dateClicked = false;
this.callHandler()
}
})()
} else {
this.onSetTime = this.onUpdateTime = function() {}
}
var J = Calendar.createElement("tfoot", O);
P = Calendar.createElement("tr", J);
P.className = "footrow";
M = E(Calendar._TT.SEL_DATE, this.weekNumbers ? 8 : 7, 300);
M.className = "ttip";
if (this.isPopup) {
M.ttip = Calendar._TT.DRAG_TO_MOVE;
M.style.cursor = "move"
}
this.tooltips = M;
A = Calendar.createElement("div", this.element);
this.monthsCombo = A;
A.className = "combo";
for (H = 0; H < Calendar._MN.length; ++H) {
var D = Calendar.createElement("div");
D.className = Calendar.is_ie ? "label-IEfix" :
"label";
D.month = H;
D.innerHTML = (this.dateType == "jalali" ?
Calendar._JSMN[H] : Calendar._SMN[H]);
A.appendChild(D)
}
A = Calendar.createElement("div", this.element);
this.yearsCombo = A;
A.className = "combo";
for (H = 12; H > 0; --H) {
var N = Calendar.createElement("div");
N.className = Calendar.is_ie ? "label-IEfix" :
"label";
A.appendChild(N)
}
this._init(this.firstDayOfWeek, this.date);
K.appendChild(this.element)
};
Calendar.prototype.recreate = function() {
if (this.element) {
var A = this.element.parentNode;
A.removeChild(this.element);
if (A == document.body) {
this.create()
} else {
this.create(A);
this.show()
}
} else {
this.create()
}
};
Calendar.prototype.setWeekNumbers = function(A) {
this.weekNumbers = A;
this.recreate()
};
Calendar.prototype.setOtherMonths = function(A) {
this.showsOtherMonths = A;
this.refresh()
};
Calendar.prototype.setLangNumbers = function(A) {
this.langNumbers = A;
this.refresh()
};
Calendar.prototype.setDateType = function(A) {
this.dateType = A;
this.recreate()
};
Calendar.prototype.setShowsTime = function(A) {
this.showsTime = A;
this.recreate()
};
Calendar.prototype.setTime24 = function(A) {
this.time24 = A;
this.recreate()
};
Calendar._keyEvent = function(L) {
var A = window._dynarch_popupCalendar;
if (!A || A.multiple) {
return false
}(Calendar.is_ie) && (L = window.event);
var I = (Calendar.is_ie || L.type == "keypress"),
M = L.keyCode;
if (Calendar._DIR == "rtl") {
if (M == 37) {
M = 39
} else {
if (M == 39) {
M = 37
}
}
}
if (L.ctrlKey) {
switch (M) {
case 37:
I && Calendar.cellClick(A._nav_pm);
break;
case 38:
I && Calendar.cellClick(A._nav_py);
break;
case 39:
I && Calendar.cellClick(A._nav_nm);
break;
case 40:
I && Calendar.cellClick(A._nav_ny);
break;
default:
return false
}
} else {
switch (M) {
case 32:
Calendar.cellClick(A._nav_now);
break;
case 27:
I && A.callCloseHandler();
break;
case 37:
case 38:
case 39:
case 40:
if (I) {
var E, N, J, G, C, D;
E = M == 37 || M == 38;
D = (M == 37 || M == 39) ? 1 : 7;
function B() {
C = A.currentDateEl;
var K = C.pos;
N = K & 15;
J = K >> 4;
G = A.ar_days[J][N]
}
B();
function F() {
var K = new Date(A.date);
K.setLocalDate(true, A.dateType,
K.getLocalDate(true, A.dateType) - D);
A.setDate(K)
}
function H() {
var K = new Date(A.date);
K.setLocalDate(true, A.dateType,
K.getLocalDate(true, A.dateType) + D);
A.setDate(K)
}
while (1) {
switch (M) {
case 37:
if (--N >= 0) {
G = A.ar_days[J][N]
} else {
N = 6;
M = 38;
continue
}
break;
case 38:
if (--J >= 0) {
G = A.ar_days[J][N]
} else {
F();
B()
}
break;
case 39:
if (++N < 7) {
G = A.ar_days[J][N]
} else {
N = 0;
M = 40;
continue
}
break;
case 40:
if (++J < A.ar_days.length) {
G = A.ar_days[J][N]
} else {
H();
B()
}
break
}
break
}
if (G) {
if (!G.disabled) {
Calendar.cellClick(G)
} else {
if (E) {
F()
} else {
H()
}
}
}
}
break;
case 13:
if (I) {
Calendar.cellClick(A.currentDateEl, L)
}
break;
default:
return false
}
}
return Calendar.stopEvent(L)
};
Calendar.prototype._init = function(L, V) {
var U = new Date(),
P = U.getLocalFullYear(false, this.dateType),
X = U.getLocalMonth(false, this.dateType),
B = U.getLocalDate(false, this.dateType);
this.table.style.visibility = "hidden";
var H = V.getLocalFullYear(true, this.dateType);
if (H < this.minYear) {
H = this.minYear;
V._calSetLocalFullYear(this.dateType, H)
} else {
if (H > this.maxYear) {
H = this.maxYear;
V._calSetLocalFullYear(this.dateType, H)
}
}
this.firstDayOfWeek = L;
this.date = new Date(V);
var W = V.getLocalMonth(true, this.dateType);
var Z = V.getLocalDate(true, this.dateType);
var Y = V.getLocalMonthDays(this.dateType);
V.setLocalDate(true, this.dateType, 1);
var Q = (V.getUTCDay() - this.firstDayOfWeek) % 7;
if (Q < 0) {
Q += 7
}
V.setLocalDate(true, this.dateType, -Q);
V.setLocalDate(true, this.dateType, V.getLocalDate(true, this.dateType)
+ 1);
var E = this.tbody.firstChild;
var J = (this.dateType == "jalali" ? Calendar._JSMN[W] :
Calendar._SMN[W]);
var N = this.ar_days = new Array();
var M = Calendar._TT.WEEKEND;
var D = this.multiple ? (this.datesCells = {}) : null;
for (var S = 0; S < 6; ++S, E = E.nextSibling) {
var A = E.firstChild;
if (this.weekNumbers) {
A.className = "day wn";
A.innerHTML =
this.convertNumbers(V.getLocalWeekNumber(this.dateType));
A = A.nextSibling
}
E.className = "daysrow";
var T = false,
F, C = N[S] = [];
for (var R = 0; R < 7; ++R, A = A.nextSibling,
V.setLocalDate(true, this.dateType, F + 1)) {
F = V.getLocalDate(true, this.dateType);
var G = V.getUTCDay();
A.className = "day";
A.pos = S << 4 | R;
C[R] = A;
var K = (V.getLocalMonth(true, this.dateType) == W);
if (!K) {
if (this.showsOtherMonths) {
A.className += " othermonth";
A.otherMonth = true
} else {
A.className = "emptycell";
A.innerHTML = " ";
A.disabled = true;
continue
}
} else {
A.otherMonth = false;
T = true
}
A.disabled = false;
A.innerHTML = this.getDateText ? this.getDateText(V, F) :
this.convertNumbers(F);
if (D) {
D[V.print("%Y%m%d", this.dateType,
this.langNumbers)] = A
}
if (this.getDateStatus) {
var O = this.getDateStatus(V, H, W, F);
if (this.getDateToolTip) {
var I = this.getDateToolTip(V, H, W, F);
if (I) {
A.title = I
}
}
if (O === true) {
A.className += " disabled";
A.disabled = true
} else {
if (/disabled/i.test(O)) {
A.disabled = true
}
A.className += " " + O
}
}
if (!A.disabled) {
A.caldate = new Date(V);
A.ttip = "_";
if (!this.multiple && K && F == Z
&& this.hiliteToday) {
A.className += " selected";
this.currentDateEl = A
}
if (V.getLocalFullYear(true, this.dateType) == P &&
V.getLocalMonth(true, this.dateType) == X && F == B) {
A.className += " today";
A.ttip += Calendar._TT.PART_TODAY
}
if (M.indexOf(G.toString()) != -1) {
A.className += A.otherMonth ? " oweekend" :
" weekend"
}
}
}
if (!(T || this.showsOtherMonths)) {
E.className = "emptyrow"
}
}
this.title.innerHTML = (this.dateType == "jalali" ?
Calendar._JMN[W] : Calendar._MN[W]) + ", " +
this.convertNumbers(H);
this.onSetTime();
this.table.style.visibility = "visible";
this._initMultipleDates()
};
Calendar.prototype._initMultipleDates = function() {
if (this.multiple) {
for (var B in this.multiple) {
if (this.multiple[B] instanceof Date) {
var A = this.datesCells[B];
var C = this.multiple[B];
if (A) {
A.className += " selected"
}
}
}
}
};
Calendar.prototype._toggleMultipleDate = function(B) {
if (this.multiple) {
var C = B.print("%Y%m%d", this.dateType,
this.langNumbers);
var A = this.datesCells[C];
if (A) {
var D = this.multiple[C];
if (!D) {
Calendar.addClass(A, "selected");
this.multiple[C] = B
} else {
Calendar.removeClass(A, "selected");
delete this.multiple[C]
}
}
}
};
Calendar.prototype.setDateToolTipHandler = function(A) {
this.getDateToolTip = A
};
Calendar.prototype.setDate = function(A) {
if (!A.equalsTo(this.date)) {
this.date = A;
this.refresh()
}
};
Calendar.prototype.refresh = function() {
if (this.element) {
this._init(this.firstDayOfWeek, this.date)
} else {
this.create()
}
};
Calendar.prototype.setFirstDayOfWeek = function(A) {
this._init(A, this.date);
this._displayWeekdays()
};
Calendar.prototype.setDateStatusHandler =
Calendar.prototype.setDisabledHandler = function(A) {
this.getDateStatus = A
};
Calendar.prototype.setRange = function(A, B) {
this.minYear = A;
this.maxYear = B
};
Calendar.prototype.callHandler = function() {
if (this.onSelected) {
this.onSelected(this, this.date.print(this.dateFormat,
this.dateType, this.langNumbers))
}
};
Calendar.prototype.callCloseHandler = function() {
if (this.onClose) {
this.onClose(this)
}
this.hideShowCovered()
};
Calendar.prototype.destroy = function() {
var A = this.element.parentNode;
A.removeChild(this.element);
Calendar._C = null;
window._dynarch_popupCalendar = null
};
Calendar.prototype.reparent = function(B) {
var A = this.element;
A.parentNode.removeChild(A);
B.appendChild(A)
};
Calendar._checkCalendar = function(B) {
var C = window._dynarch_popupCalendar;
if (!C) {
return false
}
var A = Calendar.is_ie ? Calendar.getElement(B) :
Calendar.getTargetElement(B);
for (; A != null && A != C.element; A = A.parentNode) {}
if (A == null) {
window._dynarch_popupCalendar.callCloseHandler();
return Calendar.stopEvent(B)
}
};
Calendar.prototype.show = function() {
if (this.isPopup) {
this.element.parentNode.appendChild(this.element)
}
var E = this.table.getElementsByTagName("tr");
for (var D = E.length; D > 0;) {
var F = E[--D];
Calendar.removeClass(F, "rowhilite");
var C = F.getElementsByTagName("td");
for (var B = C.length; B > 0;) {
var A = C[--B];
Calendar.removeClass(A, "hilite");
Calendar.removeClass(A, "active")
}
}
this.element.style.display = "block";
this.hidden = false;
if (this.isPopup) {
window._dynarch_popupCalendar = this;
Calendar.addEvent(document, "keydown",
Calendar._keyEvent);
Calendar.addEvent(document, "keypress",
Calendar._keyEvent);
Calendar.addEvent(document, "mousedown",
Calendar._checkCalendar)
}
this.hideShowCovered()
};
Calendar.prototype.hide = function() {
if (this.isPopup) {
Calendar.removeEvent(document, "keydown",
Calendar._keyEvent);
Calendar.removeEvent(document, "keypress",
Calendar._keyEvent);
Calendar.removeEvent(document, "mousedown",
Calendar._checkCalendar)
}
this.element.style.display = "none";
this.hidden = true;
this.hideShowCovered()
};
Calendar.prototype.showAt = function(A, C) {
var B = this.element.style;
B.left = A + "px";
B.top = C + "px";
this.show()
};
Calendar.prototype.showAtElement = function(C, D) {
var A = this;
var E = Calendar.getAbsolutePos(C);
if (!D || typeof D != "string") {
this.showAt(E.x, E.y + C.offsetHeight);
return true
}
function B(I) {
if (I.x < 0) {
I.x = 0
}
if (I.y < 0) {
I.y = 0
}
var J = document.createElement("div");
var H = J.style;
H.position = "absolute";
H.right = H.bottom = H.width = H.height = "0px";
document.body.appendChild(J);
var G = Calendar.getAbsolutePos(J);
document.body.removeChild(J);
if (Calendar.is_ie) {
G.y += document.body.scrollTop;
G.x += document.body.scrollLeft;
G.y += (document.documentElement &&
document.documentElement.scrollTop) || document.body.scrollTop;
G.x += (document.documentElement &&
document.documentElement.scrollLeft) || document.body.scrollLeft;
} else {
G.y += window.scrollY;
G.x += window.scrollX
}
var F = I.x + I.width - G.x;
if (F > 0) {
I.x -= F
}
F = I.y + I.height - G.y;
if (F > 0) {
I.y -= F
}
}
this.element.style.display = "block";
Calendar.continuation_for_the_fucking_khtml_browser = function() {
var F = A.element.offsetWidth;
var H = A.element.offsetHeight;
A.element.style.display = "none";
var G = D.substr(0, 1);
var I = "l";
if (D.length > 1) {
I = D.substr(1, 1)
}
switch (G) {
case "T":
E.y -= H;
break;
case "B":
E.y += C.offsetHeight;
break;
case "C":
E.y += (C.offsetHeight - H) / 2;
break;
case "t":
E.y += C.offsetHeight - H;
break;
case "b":
break
}
switch (I) {
case "L":
E.x -= F;
break;
case "R":
E.x += C.offsetWidth;
break;
case "C":
E.x += (C.offsetWidth - F) / 2;
break;
case "l":
E.x += C.offsetWidth - F;
break;
case "r":
break
}
E.width = F;
E.height = H + 40;
A.monthsCombo.style.display = "none";
B(E);
A.showAt(E.x, E.y)
};
if (Calendar.is_khtml) {
setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",
10)
} else {
Calendar.continuation_for_the_fucking_khtml_browser()
}
};
Calendar.prototype.setDateFormat = function(A) {
this.dateFormat = A
};
Calendar.prototype.setTtDateFormat = function(A) {
this.ttDateFormat = A
};
Calendar.prototype.parseDate = function(C, A, B) {
if (!A) {
A = this.dateFormat
}
if (!B) {
B = this.dateType
}
this.setDate(Date.parseDate(C, A, B))
};
Calendar.prototype.hideShowCovered = function() {
if (!Calendar.is_ie && !Calendar.is_opera) {
return
}
function B(R) {
var Q = R.style.visibility;
if (!Q) {
if (document.defaultView &&
typeof(document.defaultView.getComputedStyle) == "function") {
if (!Calendar.is_khtml) {
Q = document.defaultView.getComputedStyle(R,
"").getPropertyValue("visibility")
} else {
Q = ""
}
} else {
if (R.currentStyle) {
Q = R.currentStyle.visibility
} else {
Q = ""
}
}
}
return Q
}
var P = new Array("applet", "iframe",
"select");
var C = this.element;
var A = Calendar.getAbsolutePos(C);
var F = A.x;
var D = C.offsetWidth + F;
var O = A.y;
var N = C.offsetHeight + O;
for (var H = P.length; H > 0;) {
var G = document.getElementsByTagName(P[--H]);
var E = null;
for (var J = G.length; J > 0;) {
E = G[--J];
A = Calendar.getAbsolutePos(E);
var M = A.x;
var L = E.offsetWidth + M;
var K = A.y;
var I = E.offsetHeight + K;
if (this.hidden || (M > D) || (L < F) || (K > N) || (I
< O)) {
if (!E.__msh_save_visibility) {
E.__msh_save_visibility = B(E)
}
E.style.visibility = E.__msh_save_visibility
} else {
if (!E.__msh_save_visibility) {
E.__msh_save_visibility = B(E)
}
E.style.visibility = "hidden"
}
}
}
};
Calendar.prototype._displayWeekdays = function() {
var B = this.firstDayOfWeek;
var A = this.firstdayname;
var D = Calendar._TT.WEEKEND;
for (var C = 0; C < 7; ++C) {
A.className = "day name";
var E = (C + B) % 7;
if (C) {
A.ttip = Calendar._TT.DAY_FIRST.replace("%s",
Calendar._DN[E]);
A.navtype = 100;
A.calendar = this;
A.fdow = E;
Calendar._add_evs(A)
}
if (D.indexOf(E.toString()) != -1) {
Calendar.addClass(A, "weekend")
}
A.innerHTML = Calendar._SDN[(C + B) % 7];
A = A.nextSibling
}
};
Calendar.prototype._hideCombos = function() {
this.monthsCombo.style.display = "none";
this.yearsCombo.style.display = "none"
};
Calendar.prototype._dragStart = function(ev) {
if (this.dragging) {
return
}
this.dragging = true;
var posX;
var posY;
if (Calendar.is_ie) {
posY = window.event.clientY + document.body.scrollTop;
posX = window.event.clientX + document.body.scrollLeft
} else {
posY = ev.clientY + window.scrollY;
posX = ev.clientX + window.scrollX
}
var st = this.element.style;
this.xOffs = posX - parseInt(st.left);
this.yOffs = posY - parseInt(st.top);
with(Calendar) {
addEvent(document, "mousemove", calDragIt);
addEvent(document, "mouseup", calDragEnd)
}
};
Date._MD = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
Date._JMD = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
Date.SECOND = 1000;
Date.MINUTE = 60 * Date.SECOND;
Date.HOUR = 60 * Date.MINUTE;
Date.DAY = 24 * Date.HOUR;
Date.WEEK = 7 * 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") ? Calendar._SDN :
Calendar._DN;
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 == "jalali") {
var F = (Q[L] == "%b") ? Calendar._JSMN :
Calendar._JMN
} else {
var F = (Q[L] == "%b") ? Calendar._SMN :
Calendar._MN
}
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, Calendar._TT.LPM.length) ==
Calendar._TT.LPM) {
I = I.substr(Calendar._TT.LPM.length);
if (R < 12) {
R += 12
}
}
if (I.substr(0, Calendar._TT.PM.length) ==
Calendar._TT.PM) {
I = I.substr(Calendar._TT.PM.length);
if (R < 12) {
R += 12
}
}
if (I.substr(0, Calendar._TT.LAM.length) ==
Calendar._TT.LAM) {
I = I.substr(Calendar._TT.LAM.length);
if (R >= 12) {
R -= 12
}
}
if (I.substr(0, Calendar._TT.AM.length) ==
Calendar._TT.AM) {
I = I.substr(Calendar._TT.AM.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.setUTCHours(R, K, P, A);
return G
};
Date.prototype.getUTCMonthDays = function(B) {
var A = this.getUTCFullYear();
if (typeof B == "undefined") {
B = this.getUTCMonth()
}
if (((0 == (A % 4)) && ((0 != (A % 100)) || (0 == (A % 400))))
&& B == 1) {
return 29
} else {
return Date._MD[B]
}
};
Date.prototype.getJalaliUTCMonthDays = function(B) {
var A = this.getJalaliUTCFullYear();
if (typeof B == "undefined") {
B = this.getJalaliUTCMonth()
}
if (B == 11 && JalaliDate.checkDate(A, B + 1, 30)) {
return 30
} else {
return Date._JMD[B]
}
};
Date.prototype.getLocalMonthDays = function(A, B) {
if (A == "jalali") {
return this.getJalaliUTCMonthDays(B)
} else {
return this.getUTCMonthDays(B)
}
};
Date.prototype.getUTCDayOfYear = function() {
var A = new Date(Date.UTC(this.getUTCFullYear(), this.getUTCMonth(),
this.getUTCDate(), 0, 0, 0));
var C = new Date(Date.UTC(this.getUTCFullYear(), 0, 0, 0, 0, 0));
var B = A - C;
return Math.floor(B / Date.DAY)
};
Date.prototype.getJalaliUTCDayOfYear = function() {
var B = new Date(Date.UTC(this.getUTCFullYear(), this.getUTCMonth(),
this.getUTCDate(), 0, 0, 0));
var A = JalaliDate.jalaliToGregorian(this.getJalaliUTCFullYear(), 1,
0);
var D = new Date(Date.UTC(A[0], A[1] - 1, A[2], 0, 0, 0));
var C = B - D;
return Math.floor(C / Date.DAY)
};
Date.prototype.getLocalDayOfYear = function(A) {
if (A == "jalali") {
return this.getJalaliUTCDayOfYear()
} else {
return this.getUTCDayOfYear()
}
};
Date.prototype.getUTCWeekNumber = function() {
var C = new Date(Date.UTC(this.getUTCFullYear(), this.getUTCMonth(),
this.getUTCDate(), 0, 0, 0));
var B = C.getUTCDay();
C.setUTCDate(C.getUTCDate() - (B + 6) % 7 + 3);
var A = C.valueOf();
C.setUTCMonth(0);
C.setUTCDate(4);
return Math.round((A - C.valueOf()) / (7 * 86400000)) + 1
};
Date.prototype.getJalaliUTCWeekNumber = function() {
var A = JalaliDate.jalaliToGregorian(this.getJalaliUTCFullYear(), 1,
1);
var B = new Date(Date.UTC(A[0], A[1] - 1, A[2], 0, 0, 0));
var C = this.getJalaliUTCDayOfYear() - ((7 - B.getJalaliUTCDay()) % 7)
- 1;
if (C < 0) {
return new Date(this - this.getJalaliUTCDay() *
Date.DAY).getJalaliUTCWeekNumber()
}
return Math.floor(C / 7) + 1
};
Date.prototype.getLocalWeekNumber = function(A) {
if (A == "jalali") {
return this.getJalaliUTCWeekNumber()
} else {
return this.getUTCWeekNumber()
}
};
Date.prototype.equalsTo = function(A) {
return (A && (this.getUTCFullYear() == A.getUTCFullYear())
&& (this.getUTCMonth() == A.getUTCMonth()) &&
(this.getUTCDate() == A.getUTCDate()) && (this.getUTCHours() ==
A.getUTCHours()) && (this.getUTCMinutes() == A.getUTCMinutes()))
};
Date.prototype.setUTCDateOnly = function(A) {
var B = new Date(A);
this.setUTCDate(1);
this._calSetFullYear(B.getUTCFullYear());
this.setUTCMonth(B.getUTCMonth());
this.setUTCDate(B.getUTCDate())
};
Date.prototype.print = function(I, B, N) {
var J = this.getLocalMonth(true, B);
var O = this.getLocalDate(true, B);
var D = this.getLocalFullYear(true, B);
var A = this.getLocalWeekNumber(true, B);
var F = this.getUTCDay();
var G = {};
var S = this.getUTCHours();
var M = (S >= 12);
var C = (M) ? (S - 12) : S;
var E = this.getLocalDayOfYear(B);
if (C == 0) {
C = 12
}
var K = this.getUTCMinutes();
var Q = this.getUTCSeconds();
G["%a"] = Calendar._SDN[F];
G["%A"] = Calendar._DN[F];
G["%b"] = (B == "jalali" ? Calendar._JSMN[J] :
Calendar._SMN[J]);
G["%B"] = (B == "jalali" ? Calendar._JMN[J] :
Calendar._MN[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 ? Calendar._TT.PM : Calendar._TT.AM;
G["%P"] = M ? Calendar._TT.LPM : Calendar._TT.LAM;
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.getLocalDay(true, B) + 1;
G["%w"] = this.getLocalDay(true, B);
G["%y"] = ("" + D).substr(2, 2);
G["%Y"] = D;
G["%%"] = "%";
var H = /%./g;
if (!Calendar.is_ie5 && !Calendar.is_khtml) {
I = I.replace(H, function(T) {
return G[T] || T
})
} else {
var R = I.match(H);
for (var L = 0; L < R.length; L++) {
var P = G[R[L]];
if (P) {
H = new RegExp(R[L], "g");
I = I.replace(H, P)
}
}
}
if (N) {
I = I.convertNumbers()
}
return I
};
Date.prototype._calSetFullYear = function(B) {
var A = new Date(this);
A.setUTCFullYear(B);
if (A.getUTCMonth() != this.getUTCMonth()) {
this.setUTCDate(28)
}
return this.setUTCFullYear(B)
};
Date.prototype._calSetJalaliFullYear = function(B) {
var A = new Date(this);
A.setJalaliUTCFullYear(B);
if (A.getJalaliUTCMonth() != this.getJalaliUTCMonth()) {
this.setJalaliUTCDate(29)
}
return this.setJalaliUTCFullYear(B)
};
Date.prototype._calSetLocalFullYear = function(A, B) {
if (A == "jalali") {
return this._calSetJalaliFullYear(B)
} else {
return this._calSetFullYear(B)
}
};
Date.prototype.setLocalFullYear = function(B, C, E, A, D) {
if (C == "jalali") {
if (A == undefined) {
A = B ? this.getJalaliUTCMonth() : this.getJalaliMonth()
}
if (D == undefined) {
D = B ? this.getJalaliUTCDate() : this.getJalaliDate()
}
return B ? this.setJalaliUTCFullYear(E, A, D) :
this.setJalaliFullYear(E, A, D)
} else {
if (A == undefined) {
A = B ? this.getUTCMonth() : this.getMonth()
}
if (D == undefined) {
D = B ? this.getUTCDate() : this.getDate()
}
return B ? this.setUTCFullYear(E, A, D) : this.setFullYear(E, A,
D)
}
};
Date.prototype.setLocalMonth = function(B, C, A, D) {
if (C == "jalali") {
if (D == undefined) {
D = B ? this.getJalaliUTCDate() : this.getJalaliDate()
}
return B ? this.setJalaliUTCMonth(A, D) : this.setJalaliMonth(A,
D)
} else {
if (D == undefined) {
D = B ? this.getUTCDate() : this.getDate()
}
return B ? this.setUTCMonth(A, D) : this.setMonth(A, D)
}
};
Date.prototype.setLocalDate = function(A, B, C) {
if (B == "jalali") {
return A ? this.setJalaliUTCDate(C) : this.setJalaliDate(C)
} else {
return A ? this.setUTCDate(C) : this.setDate(C)
}
};
Date.prototype.getLocalFullYear = function(A, B) {
if (B == "jalali") {
return A ? this.getJalaliUTCFullYear() : this.getJalaliFullYear()
} else {
return A ? this.getUTCFullYear() : this.getFullYear()
}
};
Date.prototype.getLocalMonth = function(A, B) {
if (B == "jalali") {
return A ? this.getJalaliUTCMonth() : this.getJalaliMonth()
} else {
return A ? this.getUTCMonth() : this.getMonth()
}
};
Date.prototype.getLocalDate = function(A, B) {
if (B == "jalali") {
return A ? this.getJalaliUTCDate() : this.getJalaliDate()
} else {
return A ? this.getUTCDate() : this.getDate()
}
};
Date.prototype.getLocalDay = function(A, B) {
if (B == "jalali") {
return A ? this.getJalaliUTCDay() : this.getJalaliDay()
} else {
return A ? this.getUTCDay() : this.getDay()
}
};
window._dynarch_popupCalendar =
null;home/lmsyaran/public_html/media/system/js/calendar-uncompressed.js000064400000140026151157061210021461
0ustar00/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo
* -----------------------------------------------------------
*
* The DHTML Calendar, version 1.0 "It is happening again"
*
* Details and latest version at:
* www.dynarch.com/projects/calendar
*
* This script is developed by Dynarch.com. Visit us at www.dynarch.com.
*
* This script is distributed under the GNU Lesser General Public License.
* Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
*/
/** The Calendar object constructor. */
Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) {
// member variables
this.activeDiv = null;
this.currentDateEl = null;
this.getDateStatus = null;
this.getDateToolTip = null;
this.getDateText = null;
this.timeout = null;
this.onSelected = onSelected || null;
this.onClose = onClose || null;
this.dragging = false;
this.hidden = false;
this.minYear = 1970;
this.maxYear = 2050;
this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];
this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
this.isPopup = true;
this.weekNumbers = true;
this.firstDayOfWeek = typeof firstDayOfWeek == "number" ?
firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc.
this.showsOtherMonths = false;
this.dateStr = dateStr;
this.ar_days = null;
this.showsTime = false;
this.time24 = true;
this.yearStep = 2;
this.hiliteToday = true;
this.multiple = null;
// HTML elements
this.table = null;
this.element = null;
this.tbody = null;
this.firstdayname = null;
// Combo boxes
this.monthsCombo = null;
this.yearsCombo = null;
this.hilitedMonth = null;
this.activeMonth = null;
this.hilitedYear = null;
this.activeYear = null;
// Information
this.dateClicked = false;
// one-time initializations
if (typeof Calendar._SDN == "undefined") {
// table of short day names
if (typeof Calendar._SDN_len == "undefined")
Calendar._SDN_len = 3;
var ar = new Array();
for (var i = 8; i > 0;) {
ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len);
}
Calendar._SDN = ar;
// table of short month names
if (typeof Calendar._SMN_len == "undefined")
Calendar._SMN_len = 3;
ar = new Array();
for (var i = 12; i > 0;) {
ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len);
}
Calendar._SMN = ar;
}
};
// ** constants
/// "static", needed for event handlers.
Calendar._C = null;
/// detect a special case of "web browser"
Calendar.is_ie = ( /msie/i.test(navigator.userAgent) &&
!/opera/i.test(navigator.userAgent) );
Calendar.is_ie5 = ( Calendar.is_ie && /msie
5\.0/i.test(navigator.userAgent) );
/// detect Opera browser
Calendar.is_opera = /opera/i.test(navigator.userAgent);
/// detect KHTML-based browsers
Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent);
// BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a
separate
// library, at some point.
Calendar.getAbsolutePos = function(el) {
var SL = 0, ST = 0;
var is_div = /^div$/i.test(el.tagName);
if (is_div && el.scrollLeft)
SL = el.scrollLeft;
if (is_div && el.scrollTop)
ST = el.scrollTop;
var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST };
if (el.offsetParent) {
var tmp = this.getAbsolutePos(el.offsetParent);
r.x += tmp.x;
r.y += tmp.y;
}
return r;
};
Calendar.isRelated = function (el, evt) {
var related = evt.relatedTarget;
if (!related) {
var type = evt.type;
if (type == "mouseover") {
related = evt.fromElement;
} else if (type == "mouseout") {
related = evt.toElement;
}
}
while (related) {
if (related == el) {
return true;
}
related = related.parentNode;
}
return false;
};
Calendar.removeClass = function(el, className) {
if (!(el && el.className)) {
return;
}
var cls = el.className.split(" ");
var ar = new Array();
for (var i = cls.length; i > 0;) {
if (cls[--i] != className) {
ar[ar.length] = cls[i];
}
}
el.className = ar.join(" ");
};
Calendar.addClass = function(el, className) {
Calendar.removeClass(el, className);
el.className += " " + className;
};
// FIXME: the following 2 functions totally suck, are useless and should be
replaced immediately.
Calendar.getElement = function(ev) {
var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget;
while (f.nodeType != 1 || /^div$/i.test(f.tagName))
f = f.parentNode;
return f;
};
Calendar.getTargetElement = function(ev) {
var f = Calendar.is_ie ? window.event.srcElement : ev.target;
while (f.nodeType != 1)
f = f.parentNode;
return f;
};
Calendar.stopEvent = function(ev) {
ev || (ev = window.event);
if (Calendar.is_ie) {
ev.cancelBubble = true;
ev.returnValue = false;
} else {
ev.preventDefault();
ev.stopPropagation();
}
return false;
};
Calendar.addEvent = function(el, evname, func) {
if (el.attachEvent) { // IE
el.attachEvent("on" + evname, func);
} else if (el.addEventListener) { // Gecko / W3C
el.addEventListener(evname, func, true);
} else {
el["on" + evname] = func;
}
};
Calendar.removeEvent = function(el, evname, func) {
if (el.detachEvent) { // IE
el.detachEvent("on" + evname, func);
} else if (el.removeEventListener) { // Gecko / W3C
el.removeEventListener(evname, func, true);
} else {
el["on" + evname] = null;
}
};
Calendar.createElement = function(type, parent) {
var el = null;
if (document.createElementNS) {
// use the XHTML namespace; IE won't normally get here unless
// _they_ "fix" the DOM2 implementation.
el = document.createElementNS("http://www.w3.org/1999/xhtml",
type);
} else {
el = document.createElement(type);
}
if (typeof parent != "undefined") {
parent.appendChild(el);
}
return el;
};
// END: UTILITY FUNCTIONS
// BEGIN: CALENDAR STATIC FUNCTIONS
/** Internal -- adds a set of events to make some element behave like a
button. */
Calendar._add_evs = function(el) {
with (Calendar) {
addEvent(el, "mouseover", dayMouseOver);
addEvent(el, "mousedown", dayMouseDown);
addEvent(el, "mouseout", dayMouseOut);
if (is_ie) {
addEvent(el, "dblclick", dayMouseDblClick);
el.setAttribute("unselectable", true);
}
}
};
Calendar.findMonth = function(el) {
if (typeof el.month != "undefined") {
return el;
} else if (typeof el.parentNode.month != "undefined") {
return el.parentNode;
}
return null;
};
Calendar.findYear = function(el) {
if (typeof el.year != "undefined") {
return el;
} else if (typeof el.parentNode.year != "undefined") {
return el.parentNode;
}
return null;
};
Calendar.showMonthsCombo = function () {
var cal = Calendar._C;
if (!cal) {
return false;
}
var cal = cal;
var cd = cal.activeDiv;
var mc = cal.monthsCombo;
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
if (cal.activeMonth) {
Calendar.removeClass(cal.activeMonth, "active");
}
var mon =
cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];
Calendar.addClass(mon, "active");
cal.activeMonth = mon;
var s = mc.style;
s.display = "block";
if (cd.navtype < 0)
s.left = cd.offsetLeft + "px";
else {
var mcw = mc.offsetWidth;
if (typeof mcw == "undefined")
// Konqueror brain-dead techniques
mcw = 50;
s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px";
}
s.top = (cd.offsetTop + cd.offsetHeight) + "px";
};
Calendar.showYearsCombo = function (fwd) {
var cal = Calendar._C;
if (!cal) {
return false;
}
var cal = cal;
var cd = cal.activeDiv;
var yc = cal.yearsCombo;
if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
if (cal.activeYear) {
Calendar.removeClass(cal.activeYear, "active");
}
cal.activeYear = null;
var Y = cal.date.getFullYear() + (fwd ? 1 : -1);
var yr = yc.firstChild;
var show = false;
for (var i = 12; i > 0; --i) {
if (Y >= cal.minYear && Y <= cal.maxYear) {
yr.innerHTML = Y;
yr.year = Y;
yr.style.display = "block";
show = true;
} else {
yr.style.display = "none";
}
yr = yr.nextSibling;
Y += fwd ? cal.yearStep : -cal.yearStep;
}
if (show) {
var s = yc.style;
s.display = "block";
if (cd.navtype < 0)
s.left = cd.offsetLeft + "px";
else {
var ycw = yc.offsetWidth;
if (typeof ycw == "undefined")
// Konqueror brain-dead techniques
ycw = 50;
s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px";
}
s.top = (cd.offsetTop + cd.offsetHeight) + "px";
}
};
// event handlers
Calendar.tableMouseUp = function(ev) {
var cal = Calendar._C;
if (!cal) {
return false;
}
if (cal.timeout) {
clearTimeout(cal.timeout);
}
var el = cal.activeDiv;
if (!el) {
return false;
}
var target = Calendar.getTargetElement(ev);
ev || (ev = window.event);
Calendar.removeClass(el, "active");
if (target == el || target.parentNode == el) {
Calendar.cellClick(el, ev);
}
var mon = Calendar.findMonth(target);
var date = null;
if (mon) {
date = new Date(cal.date);
if (mon.month != date.getMonth()) {
date.setMonth(mon.month);
cal.setDate(date);
cal.dateClicked = false;
cal.callHandler();
}
} else {
var year = Calendar.findYear(target);
if (year) {
date = new Date(cal.date);
if (year.year != date.getFullYear()) {
date.setFullYear(year.year);
cal.setDate(date);
cal.dateClicked = false;
cal.callHandler();
}
}
}
with (Calendar) {
removeEvent(document, "mouseup", tableMouseUp);
removeEvent(document, "mouseover", tableMouseOver);
removeEvent(document, "mousemove", tableMouseOver);
cal._hideCombos();
_C = null;
return stopEvent(ev);
}
};
Calendar.tableMouseOver = function (ev) {
var cal = Calendar._C;
if (!cal) {
return;
}
var el = cal.activeDiv;
var target = Calendar.getTargetElement(ev);
if (target == el || target.parentNode == el) {
Calendar.addClass(el, "hilite active");
Calendar.addClass(el.parentNode, "rowhilite");
} else {
if (typeof el.navtype == "undefined" || (el.navtype != 50
&& (el.navtype == 0 || Math.abs(el.navtype) > 2)))
Calendar.removeClass(el, "active");
Calendar.removeClass(el, "hilite");
Calendar.removeClass(el.parentNode, "rowhilite");
}
ev || (ev = window.event);
if (el.navtype == 50 && target != el) {
var pos = Calendar.getAbsolutePos(el);
var w = el.offsetWidth;
var x = ev.clientX;
var dx;
var decrease = true;
if (x > pos.x + w) {
dx = x - pos.x - w;
decrease = false;
} else
dx = pos.x - x;
if (dx < 0) dx = 0;
var range = el._range;
var current = el._current;
var count = Math.floor(dx / 10) % range.length;
for (var i = range.length; --i >= 0;)
if (range[i] == current)
break;
while (count-- > 0)
if (decrease) {
if (--i < 0)
i = range.length - 1;
} else if ( ++i >= range.length )
i = 0;
var newval = range[i];
el.innerHTML = newval;
cal.onUpdateTime();
}
var mon = Calendar.findMonth(target);
if (mon) {
if (mon.month != cal.date.getMonth()) {
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
Calendar.addClass(mon, "hilite");
cal.hilitedMonth = mon;
} else if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
} else {
if (cal.hilitedMonth) {
Calendar.removeClass(cal.hilitedMonth, "hilite");
}
var year = Calendar.findYear(target);
if (year) {
if (year.year != cal.date.getFullYear()) {
if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
Calendar.addClass(year, "hilite");
cal.hilitedYear = year;
} else if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
} else if (cal.hilitedYear) {
Calendar.removeClass(cal.hilitedYear, "hilite");
}
}
return Calendar.stopEvent(ev);
};
Calendar.tableMouseDown = function (ev) {
if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) {
return Calendar.stopEvent(ev);
}
};
Calendar.calDragIt = function (ev) {
var cal = Calendar._C;
if (!(cal && cal.dragging)) {
return false;
}
var posX;
var posY;
if (Calendar.is_ie) {
posY = window.event.clientY + document.body.scrollTop;
posX = window.event.clientX + document.body.scrollLeft;
} else {
posX = ev.pageX;
posY = ev.pageY;
}
cal.hideShowCovered();
var st = cal.element.style;
st.left = (posX - cal.xOffs) + "px";
st.top = (posY - cal.yOffs) + "px";
return Calendar.stopEvent(ev);
};
Calendar.calDragEnd = function (ev) {
var cal = Calendar._C;
if (!cal) {
return false;
}
cal.dragging = false;
with (Calendar) {
removeEvent(document, "mousemove", calDragIt);
removeEvent(document, "mouseup", calDragEnd);
tableMouseUp(ev);
}
cal.hideShowCovered();
};
Calendar.dayMouseDown = function(ev) {
var el = Calendar.getElement(ev);
if (el.disabled) {
return false;
}
var cal = el.calendar;
cal.activeDiv = el;
Calendar._C = cal;
if (el.navtype != 300) with (Calendar) {
if (el.navtype == 50) {
el._current = el.innerHTML;
addEvent(document, "mousemove", tableMouseOver);
} else
addEvent(document, Calendar.is_ie5 ? "mousemove" :
"mouseover", tableMouseOver);
addClass(el, "hilite active");
addEvent(document, "mouseup", tableMouseUp);
} else if (cal.isPopup) {
cal._dragStart(ev);
}
if (el.navtype == -1 || el.navtype == 1) {
if (cal.timeout) clearTimeout(cal.timeout);
cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250);
} else if (el.navtype == -2 || el.navtype == 2) {
if (cal.timeout) clearTimeout(cal.timeout);
cal.timeout = setTimeout((el.navtype > 0) ?
"Calendar.showYearsCombo(true)" :
"Calendar.showYearsCombo(false)", 250);
} else {
cal.timeout = null;
}
return Calendar.stopEvent(ev);
};
Calendar.dayMouseDblClick = function(ev) {
Calendar.cellClick(Calendar.getElement(ev), ev || window.event);
if (Calendar.is_ie) {
document.selection.empty();
}
};
Calendar.dayMouseOver = function(ev) {
var el = Calendar.getElement(ev);
if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) {
return false;
}
if (el.ttip) {
if (el.ttip.substr(0, 1) == "_") {
el.ttip = el.caldate.print(el.calendar.ttDateFormat) +
el.ttip.substr(1);
}
el.calendar.tooltips.innerHTML = el.ttip;
}
if (el.navtype != 300) {
Calendar.addClass(el, "hilite");
if (el.caldate) {
Calendar.addClass(el.parentNode, "rowhilite");
var cal = el.calendar;
if (cal && cal.getDateToolTip) {
var d = el.caldate;
window.status = d;
el.title = cal.getDateToolTip(d, d.getFullYear(), d.getMonth(),
d.getDate());
}
}
}
return Calendar.stopEvent(ev);
};
Calendar.dayMouseOut = function(ev) {
with (Calendar) {
var el = getElement(ev);
if (isRelated(el, ev) || _C || el.disabled)
return false;
removeClass(el, "hilite");
if (el.caldate)
removeClass(el.parentNode, "rowhilite");
if (el.calendar)
el.calendar.tooltips.innerHTML = _TT["SEL_DATE"];
// return stopEvent(ev);
}
};
/**
* A generic "click" handler :) handles all types of buttons
defined in this
* calendar.
*/
Calendar.cellClick = function(el, ev) {
var cal = el.calendar;
var closing = false;
var newdate = false;
var date = null;
if (typeof el.navtype == "undefined") {
if (cal.currentDateEl) {
Calendar.removeClass(cal.currentDateEl, "selected");
Calendar.addClass(el, "selected");
closing = (cal.currentDateEl == el);
if (!closing) {
cal.currentDateEl = el;
}
}
cal.date.setDateOnly(el.caldate);
date = cal.date;
var other_month = !(cal.dateClicked = !el.otherMonth);
if (!other_month && !cal.currentDateEl && cal.multiple)
cal._toggleMultipleDate(new Date(date));
else
newdate = !el.disabled;
// a date was clicked
if (other_month)
cal._init(cal.firstDayOfWeek, date);
} else {
if (el.navtype == 200) {
Calendar.removeClass(el, "hilite");
cal.callCloseHandler();
return;
}
date = new Date(cal.date);
if (el.navtype == 0)
date.setDateOnly(new Date()); // TODAY
// unless "today" was clicked, we assume no date was clicked so
// the selected handler will know not to close the calenar when
// in single-click mode.
// cal.dateClicked = (el.navtype == 0);
cal.dateClicked = false;
var year = date.getFullYear();
var mon = date.getMonth();
function setMonth(m) {
var day = date.getDate();
var max = date.getMonthDays(m);
if (day > max) {
date.setDate(max);
}
date.setMonth(m);
};
switch (el.navtype) {
case 400:
Calendar.removeClass(el, "hilite");
var text = Calendar._TT["ABOUT"];
if (typeof text != "undefined") {
text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] :
"";
} else {
// FIXME: this should be removed as soon as lang files get updated!
text = "Help and about box text is not translated into this
language.\n" +
"If you know this language and you feel generous please
update\n" +
"the corresponding file in \"lang\" subdir to match
calendar-en.js\n" +
"and send it back to <mihai_bazon@yahoo.com> to get it into
the distribution ;-)\n\n" +
"Thank you!\n" +
"http://dynarch.com/mishoo/calendar.epl\n";
}
alert(text);
return;
case -2:
if (year > cal.minYear) {
date.setFullYear(year - 1);
}
break;
case -1:
if (mon > 0) {
setMonth(mon - 1);
} else if (year-- > cal.minYear) {
date.setFullYear(year);
setMonth(11);
}
break;
case 1:
if (mon < 11) {
setMonth(mon + 1);
} else if (year < cal.maxYear) {
date.setFullYear(year + 1);
setMonth(0);
}
break;
case 2:
if (year < cal.maxYear) {
date.setFullYear(year + 1);
}
break;
case 100:
cal.setFirstDayOfWeek(el.fdow);
return;
case 50:
var range = el._range;
var current = el.innerHTML;
for (var i = range.length; --i >= 0;)
if (range[i] == current)
break;
if (ev && ev.shiftKey) {
if (--i < 0)
i = range.length - 1;
} else if ( ++i >= range.length )
i = 0;
var newval = range[i];
el.innerHTML = newval;
cal.onUpdateTime();
return;
case 0:
// TODAY will bring us here
if ((typeof cal.getDateStatus == "function") &&
cal.getDateStatus(date, date.getFullYear(), date.getMonth(),
date.getDate())) {
return false;
}
break;
}
if (!date.equalsTo(cal.date)) {
cal.setDate(date);
newdate = true;
} else if (el.navtype == 0)
newdate = closing = true;
}
if (newdate) {
ev && cal.callHandler();
}
if (closing) {
Calendar.removeClass(el, "hilite");
ev && cal.callCloseHandler();
}
};
// END: CALENDAR STATIC FUNCTIONS
// BEGIN: CALENDAR OBJECT FUNCTIONS
/**
* This function creates the calendar inside the given parent. If _par is
* null than it creates a popup calendar inside the BODY element. If _par
is
* an element, be it BODY, then it creates a non-popup calendar (still
* hidden). Some properties need to be set before calling this function.
*/
Calendar.prototype.create = function (_par) {
var parent = null;
if (! _par) {
// default parent is the document body, in which case we create
// a popup calendar.
parent = document.getElementsByTagName("body")[0];
this.isPopup = true;
} else {
parent = _par;
this.isPopup = false;
}
this.date = this.dateStr ? new Date(this.dateStr) : new Date();
var table = Calendar.createElement("table");
this.table = table;
table.cellSpacing = 0;
table.cellPadding = 0;
table.calendar = this;
Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown);
var div = Calendar.createElement("div");
this.element = div;
div.className = "calendar";
if (this.isPopup) {
div.style.position = "absolute";
div.style.display = "none";
}
div.appendChild(table);
var thead = Calendar.createElement("thead", table);
var cell = null;
var row = null;
var cal = this;
var hh = function (text, cs, navtype) {
cell = Calendar.createElement("td", row);
cell.colSpan = cs;
cell.className = "button";
if (navtype != 0 && Math.abs(navtype) <= 2)
cell.className += " nav";
Calendar._add_evs(cell);
cell.calendar = cal;
cell.navtype = navtype;
cell.innerHTML = "<div unselectable='on'>" +
text + "</div>";
return cell;
};
row = Calendar.createElement("tr", thead);
var title_length = 6;
(this.isPopup) && --title_length;
(this.weekNumbers) && ++title_length;
hh("?", 1, 400).ttip = Calendar._TT["INFO"];
this.title = hh("", title_length, 300);
this.title.className = "title";
if (this.isPopup) {
this.title.ttip = Calendar._TT["DRAG_TO_MOVE"];
this.title.style.cursor = "move";
hh("×", 1, 200).ttip =
Calendar._TT["CLOSE"];
}
row = Calendar.createElement("tr", thead);
row.className = "headrow";
this._nav_py = hh("«", 1, -2);
this._nav_py.ttip = Calendar._TT["PREV_YEAR"];
this._nav_pm = hh("‹", 1, -1);
this._nav_pm.ttip = Calendar._TT["PREV_MONTH"];
this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 :
3, 0);
this._nav_now.ttip = Calendar._TT["GO_TODAY"];
this._nav_nm = hh("›", 1, 1);
this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];
this._nav_ny = hh("»", 1, 2);
this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];
// day names
row = Calendar.createElement("tr", thead);
row.className = "daynames";
if (this.weekNumbers) {
cell = Calendar.createElement("td", row);
cell.className = "name wn";
cell.innerHTML = Calendar._TT["WK"];
}
for (var i = 7; i > 0; --i) {
cell = Calendar.createElement("td", row);
if (!i) {
cell.navtype = 100;
cell.calendar = this;
Calendar._add_evs(cell);
}
}
this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling :
row.firstChild;
this._displayWeekdays();
var tbody = Calendar.createElement("tbody", table);
this.tbody = tbody;
for (i = 6; i > 0; --i) {
row = Calendar.createElement("tr", tbody);
if (this.weekNumbers) {
cell = Calendar.createElement("td", row);
}
for (var j = 7; j > 0; --j) {
cell = Calendar.createElement("td", row);
cell.calendar = this;
Calendar._add_evs(cell);
}
}
if (this.showsTime) {
row = Calendar.createElement("tr", tbody);
row.className = "time";
cell = Calendar.createElement("td", row);
cell.className = "time";
cell.colSpan = 2;
cell.innerHTML = Calendar._TT["TIME"] ||
" ";
cell = Calendar.createElement("td", row);
cell.className = "time";
cell.colSpan = this.weekNumbers ? 4 : 3;
(function(){
function makeTimePart(className, init, range_start, range_end) {
var part = Calendar.createElement("span", cell);
part.className = className;
part.innerHTML = init;
part.calendar = cal;
part.ttip = Calendar._TT["TIME_PART"];
part.navtype = 50;
part._range = [];
if (typeof range_start != "number")
part._range = range_start;
else {
for (var i = range_start; i <= range_end; ++i) {
var txt;
if (i < 10 && range_end >= 10) txt = '0' + i;
else txt = '' + i;
part._range[part._range.length] = txt;
}
}
Calendar._add_evs(part);
return part;
};
var hrs = cal.date.getHours();
var mins = cal.date.getMinutes();
var t12 = !cal.time24;
var pm = (hrs > 12);
if (t12 && pm) hrs -= 12;
var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23);
var span = Calendar.createElement("span", cell);
span.innerHTML = ":";
span.className = "colon";
var M = makeTimePart("minute", mins, 0, 59);
var AP = null;
cell = Calendar.createElement("td", row);
cell.className = "time";
cell.colSpan = 2;
if (t12)
AP = makeTimePart("ampm", pm ? "pm" :
"am", ["am", "pm"]);
else
cell.innerHTML = " ";
cal.onSetTime = function() {
var pm, hrs = this.date.getHours(),
mins = this.date.getMinutes();
if (t12) {
pm = (hrs >= 12);
if (pm) hrs -= 12;
if (hrs == 0) hrs = 12;
AP.innerHTML = pm ? "pm" : "am";
}
H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs;
M.innerHTML = (mins < 10) ? ("0" + mins) : mins;
};
cal.onUpdateTime = function() {
var date = this.date;
var h = parseInt(H.innerHTML, 10);
if (t12) {
if (/pm/i.test(AP.innerHTML) && h < 12)
h += 12;
else if (/am/i.test(AP.innerHTML) && h == 12)
h = 0;
}
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
date.setHours(h);
date.setMinutes(parseInt(M.innerHTML, 10));
date.setFullYear(y);
date.setMonth(m);
date.setDate(d);
this.dateClicked = false;
this.callHandler();
};
})();
} else {
this.onSetTime = this.onUpdateTime = function() {};
}
var tfoot = Calendar.createElement("tfoot", table);
row = Calendar.createElement("tr", tfoot);
row.className = "footrow";
cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7,
300);
cell.className = "ttip";
if (this.isPopup) {
cell.ttip = Calendar._TT["DRAG_TO_MOVE"];
cell.style.cursor = "move";
}
this.tooltips = cell;
div = Calendar.createElement("div", this.element);
this.monthsCombo = div;
div.className = "combo";
for (i = 0; i < Calendar._MN.length; ++i) {
var mn = Calendar.createElement("div");
mn.className = Calendar.is_ie ? "label-IEfix" :
"label";
mn.month = i;
mn.innerHTML = Calendar._SMN[i];
div.appendChild(mn);
}
div = Calendar.createElement("div", this.element);
this.yearsCombo = div;
div.className = "combo";
for (i = 12; i > 0; --i) {
var yr = Calendar.createElement("div");
yr.className = Calendar.is_ie ? "label-IEfix" :
"label";
div.appendChild(yr);
}
this._init(this.firstDayOfWeek, this.date);
parent.appendChild(this.element);
};
/** keyboard navigation, only for popup calendars */
Calendar._keyEvent = function(ev) {
var cal = window._dynarch_popupCalendar;
if (!cal || cal.multiple)
return false;
(Calendar.is_ie) && (ev = window.event);
var act = (Calendar.is_ie || ev.type == "keypress"),
K = ev.keyCode;
if (ev.ctrlKey) {
switch (K) {
case 37: // KEY left
act && Calendar.cellClick(cal._nav_pm);
break;
case 38: // KEY up
act && Calendar.cellClick(cal._nav_py);
break;
case 39: // KEY right
act && Calendar.cellClick(cal._nav_nm);
break;
case 40: // KEY down
act && Calendar.cellClick(cal._nav_ny);
break;
default:
return false;
}
} else switch (K) {
case 32: // KEY space (now)
Calendar.cellClick(cal._nav_now);
break;
case 27: // KEY esc
act && cal.callCloseHandler();
break;
case 37: // KEY left
case 38: // KEY up
case 39: // KEY right
case 40: // KEY down
if (act) {
var prev, x, y, ne, el, step;
prev = K == 37 || K == 38;
step = (K == 37 || K == 39) ? 1 : 7;
function setVars() {
el = cal.currentDateEl;
var p = el.pos;
x = p & 15;
y = p >> 4;
ne = cal.ar_days[y][x];
};setVars();
function prevMonth() {
var date = new Date(cal.date);
date.setDate(date.getDate() - step);
cal.setDate(date);
};
function nextMonth() {
var date = new Date(cal.date);
date.setDate(date.getDate() + step);
cal.setDate(date);
};
while (1) {
switch (K) {
case 37: // KEY left
if (--x >= 0)
ne = cal.ar_days[y][x];
else {
x = 6;
K = 38;
continue;
}
break;
case 38: // KEY up
if (--y >= 0)
ne = cal.ar_days[y][x];
else {
prevMonth();
setVars();
}
break;
case 39: // KEY right
if (++x < 7)
ne = cal.ar_days[y][x];
else {
x = 0;
K = 40;
continue;
}
break;
case 40: // KEY down
if (++y < cal.ar_days.length)
ne = cal.ar_days[y][x];
else {
nextMonth();
setVars();
}
break;
}
break;
}
if (ne) {
if (!ne.disabled)
Calendar.cellClick(ne);
else if (prev)
prevMonth();
else
nextMonth();
}
}
break;
case 13: // KEY enter
if (act)
Calendar.cellClick(cal.currentDateEl, ev);
break;
default:
return false;
}
return Calendar.stopEvent(ev);
};
/**
* (RE)Initializes the calendar to the given date and firstDayOfWeek
*/
Calendar.prototype._init = function (firstDayOfWeek, date) {
var today = new Date(),
TY = today.getFullYear(),
TM = today.getMonth(),
TD = today.getDate();
this.table.style.visibility = "hidden";
var year = date.getFullYear();
if (year < this.minYear) {
year = this.minYear;
date.setFullYear(year);
} else if (year > this.maxYear) {
year = this.maxYear;
date.setFullYear(year);
}
this.firstDayOfWeek = firstDayOfWeek;
this.date = new Date(date);
var month = date.getMonth();
var mday = date.getDate();
var no_days = date.getMonthDays();
// calendar voodoo for computing the first day that would actually be
// displayed in the calendar, even if it's from the previous month.
// WARNING: this is magic. ;-)
date.setDate(1);
var day1 = (date.getDay() - this.firstDayOfWeek) % 7;
if (day1 < 0)
day1 += 7;
date.setDate(-day1);
date.setDate(date.getDate() + 1);
var row = this.tbody.firstChild;
var MN = Calendar._SMN[month];
var ar_days = this.ar_days = new Array();
var weekend = Calendar._TT["WEEKEND"];
var dates = this.multiple ? (this.datesCells = {}) : null;
for (var i = 0; i < 6; ++i, row = row.nextSibling) {
var cell = row.firstChild;
if (this.weekNumbers) {
cell.className = "day wn";
cell.innerHTML = date.getWeekNumber();
cell = cell.nextSibling;
}
row.className = "daysrow";
var hasdays = false, iday, dpos = ar_days[i] = [];
for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday
+ 1)) {
iday = date.getDate();
var wday = date.getDay();
cell.className = "day";
cell.pos = i << 4 | j;
dpos[j] = cell;
var current_month = (date.getMonth() == month);
if (!current_month) {
if (this.showsOtherMonths) {
cell.className += " othermonth";
cell.otherMonth = true;
} else {
cell.className = "emptycell";
cell.innerHTML = " ";
cell.disabled = true;
continue;
}
} else {
cell.otherMonth = false;
hasdays = true;
}
cell.disabled = false;
cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday;
if (dates)
dates[date.print("%Y%m%d")] = cell;
if (this.getDateStatus) {
var status = this.getDateStatus(date, year, month, iday);
if (status === true) {
cell.className += " disabled";
cell.disabled = true;
} else {
if (/disabled/i.test(status))
cell.disabled = true;
cell.className += " " + status;
}
}
if (!cell.disabled) {
cell.caldate = new Date(date);
cell.ttip = "_";
if (!this.multiple && current_month
&& iday == mday && this.hiliteToday) {
cell.className += " selected";
this.currentDateEl = cell;
}
if (date.getFullYear() == TY &&
date.getMonth() == TM &&
iday == TD) {
cell.className += " today";
cell.ttip += Calendar._TT["PART_TODAY"];
}
if (weekend.indexOf(wday.toString()) != -1)
cell.className += cell.otherMonth ? " oweekend" : "
weekend";
}
}
if (!(hasdays || this.showsOtherMonths))
row.className = "emptyrow";
}
this.title.innerHTML = Calendar._MN[month] + ", " + year;
this.onSetTime();
this.table.style.visibility = "visible";
this._initMultipleDates();
// PROFILE
// this.tooltips.innerHTML = "Generated in " + ((new Date()) -
today) + " ms";
};
Calendar.prototype._initMultipleDates = function() {
if (this.multiple) {
for (var i in this.multiple) {
var cell = this.datesCells[i];
var d = this.multiple[i];
if (!d)
continue;
if (cell)
cell.className += " selected";
}
}
};
Calendar.prototype._toggleMultipleDate = function(date) {
if (this.multiple) {
var ds = date.print("%Y%m%d");
var cell = this.datesCells[ds];
if (cell) {
var d = this.multiple[ds];
if (!d) {
Calendar.addClass(cell, "selected");
this.multiple[ds] = date;
} else {
Calendar.removeClass(cell, "selected");
delete this.multiple[ds];
}
}
}
};
Calendar.prototype.setDateToolTipHandler = function (unaryFunction) {
this.getDateToolTip = unaryFunction;
};
/**
* Calls _init function above for going to a certain date (but only if the
* date is different than the currently selected one).
*/
Calendar.prototype.setDate = function (date) {
if (!date.equalsTo(this.date)) {
this._init(this.firstDayOfWeek, date);
}
};
/**
* Refreshes the calendar. Useful if the "disabledHandler"
function is
* dynamic, meaning that the list of disabled date can change at runtime.
* Just * call this function if you think that the list of disabled dates
* should * change.
*/
Calendar.prototype.refresh = function () {
this._init(this.firstDayOfWeek, this.date);
};
/** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1
for Monday, etc.). */
Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) {
this._init(firstDayOfWeek, this.date);
this._displayWeekdays();
};
/**
* Allows customization of what dates are enabled. The
"unaryFunction"
* parameter must be a function object that receives the date (as a JS
Date
* object) and returns a boolean value. If the returned value is true
then
* the passed date will be marked as disabled.
*/
Calendar.prototype.setDateStatusHandler =
Calendar.prototype.setDisabledHandler = function (unaryFunction) {
this.getDateStatus = unaryFunction;
};
/** Customization of allowed year range for the calendar. */
Calendar.prototype.setRange = function (a, z) {
this.minYear = a;
this.maxYear = z;
};
/** Calls the first user handler (selectedHandler). */
Calendar.prototype.callHandler = function () {
if (this.onSelected) {
this.onSelected(this, this.date.print(this.dateFormat));
}
};
/** Calls the second user handler (closeHandler). */
Calendar.prototype.callCloseHandler = function () {
if (this.onClose) {
this.onClose(this);
}
this.hideShowCovered();
};
/** Removes the calendar object from the DOM tree and destroys it. */
Calendar.prototype.destroy = function () {
var el = this.element.parentNode;
el.removeChild(this.element);
Calendar._C = null;
window._dynarch_popupCalendar = null;
};
/**
* Moves the calendar element to a different section in the DOM tree
(changes
* its parent).
*/
Calendar.prototype.reparent = function (new_parent) {
var el = this.element;
el.parentNode.removeChild(el);
new_parent.appendChild(el);
};
// This gets called when the user presses a mouse button anywhere in the
// document, if the calendar is shown. If the click was outside the open
// calendar this function closes it.
Calendar._checkCalendar = function(ev) {
var calendar = window._dynarch_popupCalendar;
if (!calendar) {
return false;
}
var el = Calendar.is_ie ? Calendar.getElement(ev) :
Calendar.getTargetElement(ev);
for (; el != null && el != calendar.element; el = el.parentNode);
if (el == null) {
// calls closeHandler which should hide the calendar.
window._dynarch_popupCalendar.callCloseHandler();
return Calendar.stopEvent(ev);
}
};
/** Shows the calendar. */
Calendar.prototype.show = function () {
var rows = this.table.getElementsByTagName("tr");
for (var i = rows.length; i > 0;) {
var row = rows[--i];
Calendar.removeClass(row, "rowhilite");
var cells = row.getElementsByTagName("td");
for (var j = cells.length; j > 0;) {
var cell = cells[--j];
Calendar.removeClass(cell, "hilite");
Calendar.removeClass(cell, "active");
}
}
this.element.style.display = "block";
this.hidden = false;
if (this.isPopup) {
window._dynarch_popupCalendar = this;
Calendar.addEvent(document, "keydown", Calendar._keyEvent);
Calendar.addEvent(document, "keypress", Calendar._keyEvent);
Calendar.addEvent(document, "mousedown",
Calendar._checkCalendar);
}
this.hideShowCovered();
};
/**
* Hides the calendar. Also removes any "hilite" from the class
of any TD
* element.
*/
Calendar.prototype.hide = function () {
if (this.isPopup) {
Calendar.removeEvent(document, "keydown", Calendar._keyEvent);
Calendar.removeEvent(document, "keypress", Calendar._keyEvent);
Calendar.removeEvent(document, "mousedown",
Calendar._checkCalendar);
}
this.element.style.display = "none";
this.hidden = true;
this.hideShowCovered();
};
/**
* Shows the calendar at a given absolute position (beware that, depending
on
* the calendar element style -- position property -- this might be
relative
* to the parent's containing rectangle).
*/
Calendar.prototype.showAt = function (x, y) {
var s = this.element.style;
s.left = x + "px";
s.top = y + "px";
this.show();
};
/** Shows the calendar near a given element. */
Calendar.prototype.showAtElement = function (el, opts) {
var self = this;
var p = Calendar.getAbsolutePos(el);
if (!opts || typeof opts != "string") {
this.showAt(p.x, p.y + el.offsetHeight);
return true;
}
function fixPosition(box) {
if (box.x < 0)
box.x = 0;
if (box.y < 0)
box.y = 0;
var cp = document.createElement("div");
var s = cp.style;
s.position = "absolute";
s.right = s.bottom = s.width = s.height = "0px";
document.body.appendChild(cp);
var br = Calendar.getAbsolutePos(cp);
document.body.removeChild(cp);
if (Calendar.is_ie) {
br.y += document.body.scrollTop;
br.x += document.body.scrollLeft;
br.y += (document.documentElement &&
document.documentElement.scrollTop) || document.body.scrollTop;
br.x += (document.documentElement &&
document.documentElement.scrollLeft) || document.body.scrollLeft;
} else {
br.y += window.scrollY;
br.x += window.scrollX;
}
var tmp = box.x + box.width - br.x;
if (tmp > 0) box.x -= tmp;
tmp = box.y + box.height - br.y;
if (tmp > 0) box.y -= tmp;
};
this.element.style.display = "block";
Calendar.continuation_for_the_khtml_browser = function() {
var w = self.element.offsetWidth;
var h = self.element.offsetHeight;
self.element.style.display = "none";
var valign = opts.substr(0, 1);
var halign = "l";
if (opts.length > 1) {
halign = opts.substr(1, 1);
}
// vertical alignment
switch (valign) {
case "T": p.y -= h; break;
case "B": p.y += el.offsetHeight; break;
case "C": p.y += (el.offsetHeight - h) / 2; break;
case "t": p.y += el.offsetHeight - h; break;
case "b": break; // already there
}
// horizontal alignment
switch (halign) {
case "L": p.x -= w; break;
case "R": p.x += el.offsetWidth; break;
case "C": p.x += (el.offsetWidth - w) / 2; break;
case "l": p.x += el.offsetWidth - w; break;
case "r": break; // already there
}
p.width = w;
p.height = h + 40;
self.monthsCombo.style.display = "none";
fixPosition(p);
self.showAt(p.x, p.y);
};
if (Calendar.is_khtml)
setTimeout("Calendar.continuation_for_the_khtml_browser()",
10);
else
Calendar.continuation_for_the_khtml_browser();
};
/** Customizes the date format. */
Calendar.prototype.setDateFormat = function (str) {
this.dateFormat = str;
};
/** Customizes the tooltip date format. */
Calendar.prototype.setTtDateFormat = function (str) {
this.ttDateFormat = str;
};
/**
* Tries to identify the date represented in a string. If successful it
also
* calls this.setDate which moves the calendar to the given date.
*/
Calendar.prototype.parseDate = function(str, fmt) {
if (!fmt)
fmt = this.dateFormat;
this.setDate(Date.parseDate(str, fmt));
};
Calendar.prototype.hideShowCovered = function () {
if (!Calendar.is_ie && !Calendar.is_opera)
return;
function getVisib(obj){
var value = obj.style.visibility;
if (!value) {
if (document.defaultView && typeof
(document.defaultView.getComputedStyle) == "function") { //
Gecko, W3C
if (!Calendar.is_khtml)
value = document.defaultView.
getComputedStyle(obj,
"").getPropertyValue("visibility");
else
value = '';
} else if (obj.currentStyle) { // IE
value = obj.currentStyle.visibility;
} else
value = '';
}
return value;
};
var tags = new Array("applet", "iframe",
"select");
var el = this.element;
var p = Calendar.getAbsolutePos(el);
var EX1 = p.x;
var EX2 = el.offsetWidth + EX1;
var EY1 = p.y;
var EY2 = el.offsetHeight + EY1;
for (var k = tags.length; k > 0; ) {
var ar = document.getElementsByTagName(tags[--k]);
var cc = null;
for (var i = ar.length; i > 0;) {
cc = ar[--i];
p = Calendar.getAbsolutePos(cc);
var CX1 = p.x;
var CX2 = cc.offsetWidth + CX1;
var CY1 = p.y;
var CY2 = cc.offsetHeight + CY1;
if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) ||
(CY2 < EY1)) {
if (!cc.__msh_save_visibility) {
cc.__msh_save_visibility = getVisib(cc);
}
cc.style.visibility = cc.__msh_save_visibility;
} else {
if (!cc.__msh_save_visibility) {
cc.__msh_save_visibility = getVisib(cc);
}
cc.style.visibility = "hidden";
}
}
}
};
/** Internal function; it displays the bar with the names of the weekday.
*/
Calendar.prototype._displayWeekdays = function () {
var fdow = this.firstDayOfWeek;
var cell = this.firstdayname;
var weekend = Calendar._TT["WEEKEND"];
for (var i = 0; i < 7; ++i) {
cell.className = "day name";
var realday = (i + fdow) % 7;
if (i) {
cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s",
Calendar._DN[realday]);
cell.navtype = 100;
cell.calendar = this;
cell.fdow = realday;
Calendar._add_evs(cell);
}
if (weekend.indexOf(realday.toString()) != -1) {
Calendar.addClass(cell, "weekend");
}
cell.innerHTML = Calendar._SDN[(i + fdow) % 7];
cell = cell.nextSibling;
}
};
/** Internal function. Hides all combo boxes that might be displayed. */
Calendar.prototype._hideCombos = function () {
this.monthsCombo.style.display = "none";
this.yearsCombo.style.display = "none";
};
/** Internal function. Starts dragging the element. */
Calendar.prototype._dragStart = function (ev) {
if (this.dragging) {
return;
}
this.dragging = true;
var posX;
var posY;
if (Calendar.is_ie) {
posY = window.event.clientY + document.body.scrollTop;
posX = window.event.clientX + document.body.scrollLeft;
} else {
posY = ev.clientY + window.scrollY;
posX = ev.clientX + window.scrollX;
}
var st = this.element.style;
this.xOffs = posX - parseInt(st.left);
this.yOffs = posY - parseInt(st.top);
with (Calendar) {
addEvent(document, "mousemove", calDragIt);
addEvent(document, "mouseup", calDragEnd);
}
};
// BEGIN: DATE OBJECT PATCHES
/** Adds the number of days array to the Date object. */
Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
/** Constants used for time computations */
Date.SECOND = 1000 /* milliseconds */;
Date.MINUTE = 60 * Date.SECOND;
Date.HOUR = 60 * Date.MINUTE;
Date.DAY = 24 * Date.HOUR;
Date.WEEK = 7 * Date.DAY;
Date.parseDate = function(str, fmt) {
var today = new Date();
var y = 0;
var m = -1;
var d = 0;
var a = str.split(/\W+/);
var b = fmt.match(/%./g);
var i = 0, j = 0;
var hr = 0;
var min = 0;
for (i = 0; i < a.length; ++i) {
if (!a[i])
continue;
switch (b[i]) {
case "%d":
case "%e":
d = parseInt(a[i], 10);
break;
case "%m":
m = parseInt(a[i], 10) - 1;
break;
case "%Y":
case "%y":
y = parseInt(a[i], 10);
(y < 100) && (y += (y > 29) ? 1900 : 2000);
break;
case "%b":
case "%B":
for (j = 0; j < 12; ++j) {
if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() ==
a[i].toLowerCase()) { m = j; break; }
}
break;
case "%H":
case "%I":
case "%k":
case "%l":
hr = parseInt(a[i], 10);
break;
case "%P":
case "%p":
if (/pm/i.test(a[i]) && hr < 12)
hr += 12;
else if (/am/i.test(a[i]) && hr >= 12)
hr -= 12;
break;
case "%M":
min = parseInt(a[i], 10);
break;
}
}
if (isNaN(y)) y = today.getFullYear();
if (isNaN(m)) m = today.getMonth();
if (isNaN(d)) d = today.getDate();
if (isNaN(hr)) hr = today.getHours();
if (isNaN(min)) min = today.getMinutes();
if (y != 0 && m != -1 && d != 0)
return new Date(y, m, d, hr, min, 0);
y = 0; m = -1; d = 0;
for (i = 0; i < a.length; ++i) {
if (a[i].search(/[a-zA-Z]+/) != -1) {
var t = -1;
for (j = 0; j < 12; ++j) {
if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() ==
a[i].toLowerCase()) { t = j; break; }
}
if (t != -1) {
if (m != -1) {
d = m+1;
}
m = t;
}
} else if (parseInt(a[i], 10) <= 12 && m == -1) {
m = a[i]-1;
} else if (parseInt(a[i], 10) > 31 && y == 0) {
y = parseInt(a[i], 10);
(y < 100) && (y += (y > 29) ? 1900 : 2000);
} else if (d == 0) {
d = a[i];
}
}
if (y == 0)
y = today.getFullYear();
if (m != -1 && d != 0)
return new Date(y, m, d, hr, min, 0);
return today;
};
/** Returns the number of days in the current month */
Date.prototype.getMonthDays = function(month) {
var year = this.getFullYear();
if (typeof month == "undefined") {
month = this.getMonth();
}
if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400))))
&& month == 1) {
return 29;
} else {
return Date._MD[month];
}
};
/** Returns the number of day in the year. */
Date.prototype.getDayOfYear = function() {
var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0,
0, 0);
var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0);
var time = now - then;
return Math.floor(time / Date.DAY);
};
/** Returns the number of the week in year, as defined in ISO 8601. */
Date.prototype.getWeekNumber = function() {
var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0,
0, 0);
var DoW = d.getDay();
d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu
var ms = d.valueOf(); // GMT
d.setMonth(0);
d.setDate(4); // Thu in Week 1
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
};
/** Checks date and time equality */
Date.prototype.equalsTo = function(date) {
return ((this.getFullYear() == date.getFullYear()) &&
(this.getMonth() == date.getMonth()) &&
(this.getDate() == date.getDate()) &&
(this.getHours() == date.getHours()) &&
(this.getMinutes() == date.getMinutes()));
};
/** Set only the year, month, date parts (keep existing time) */
Date.prototype.setDateOnly = function(date) {
var tmp = new Date(date);
this.setDate(1);
this.setFullYear(tmp.getFullYear());
this.setMonth(tmp.getMonth());
this.setDate(tmp.getDate());
};
/** Prints the date in a string according to the given format. */
Date.prototype.print = function (str) {
var m = this.getMonth();
var d = this.getDate();
var y = this.getFullYear();
var wn = this.getWeekNumber();
var w = this.getDay();
var s = {};
var hr = this.getHours();
var pm = (hr >= 12);
var ir = (pm) ? (hr - 12) : hr;
var dy = this.getDayOfYear();
if (ir == 0)
ir = 12;
var min = this.getMinutes();
var sec = this.getSeconds();
s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME:
I18N]
s["%A"] = Calendar._DN[w]; // full weekday name
s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME:
I18N]
s["%B"] = Calendar._MN[m]; // full month name
// FIXME: %c : preferred date and time representation for the current
locale
s["%C"] = 1 + Math.floor(y / 100); // the century number
s["%d"] = (d < 10) ? ("0" + d) : d; // the day of
the month (range 01 to 31)
s["%e"] = d; // the day of the month (range 1 to 31)
// FIXME: %D : american date style: %m/%d/%y
// FIXME: %E, %F, %G, %g, %h (man strftime)
s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour,
range 00 to 23 (24h format)
s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour,
range 01 to 12 (12h format)
s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy)
: ("0" + dy)) : dy; // day of the year (range 001 to 366)
s["%k"] = hr; // hour, range 0 to 23 (24h format)
s["%l"] = ir; // hour, range 1 to 12 (12h format)
s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); //
month, range 01 to 12
s["%M"] = (min < 10) ? ("0" + min) : min; //
minute, range 00 to 59
s["%n"] = "\n"; // a newline character
s["%p"] = pm ? "PM" : "AM";
s["%P"] = pm ? "pm" : "am";
// FIXME: %r : the time in am/pm notation %I:%M:%S %p
// FIXME: %R : the time in 24-hour notation %H:%M
s["%s"] = Math.floor(this.getTime() / 1000);
s["%S"] = (sec < 10) ? ("0" + sec) : sec; //
seconds, range 00 to 59
s["%t"] = "\t"; // a tab character
// FIXME: %T : the time in 24-hour notation (%H:%M:%S)
s["%U"] = s["%W"] = s["%V"] = (wn < 10) ?
("0" + wn) : wn;
s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON)
s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN)
// FIXME: %x : preferred date representation for the current locale
without the time
// FIXME: %X : preferred time representation for the current locale
without the date
s["%y"] = ('' + y).substr(2, 2); // year without the
century (range 00 to 99)
s["%Y"] = y; // year with the century
s["%%"] = "%"; // a literal '%' character
var re = /%./g;
if (!Calendar.is_ie5 && !Calendar.is_khtml)
return str.replace(re, function (par) { return s[par] || par; });
var a = str.match(re);
for (var i = 0; i < a.length; i++) {
var tmp = s[a[i]];
if (tmp) {
re = new RegExp(a[i], 'g');
str = str.replace(re, tmp);
}
}
return str;
};
// END: DATE OBJECT PATCHES
// global object that remembers the calendar
window._dynarch_popupCalendar = null;