function getSelectedOption(form_name, select_name) {
select_obj = eval("document." + form_name + "." + select_name);
if (select_obj.selectedIndex < 0)
return "";
return select_obj.options[select_obj.selectedIndex].text;
}
function showHelp(subject, category) {
subject = escape(subject);
category = escape(category);
open("/IBSng/help/show_help.php?subject=" + subject + "&category=" + category, "", "width=500,height=300,scrollbars=yes,alwaysRaised=yes,dependent=yes,resizable=yes");
}
function showMultiStr(form_name, input_name, left_pad) {
input_obj = eval("document." + form_name + "." + input_name);
open("/IBSng/util/show_multistr.php?str=" + input_obj.value + "&left_pad=" + left_pad, "", "width=500,height=300,scrollbars=yes,alwaysRaised=yes,dependent=yes,resizable=yes");
}
function updateUserAddCheckImage(user_type, current_username, update_timer) {
if (update_timer >= 0) {
if ((window.user_add_check_timer && window.user_add_check_timer <= 0) || !window.user_add_check_timer)
setTimeout("updateUserAddCheckImage('" + user_type + "','" + current_username + "',-1)", 500);
window.user_add_check_timer = update_timer * 1000 + 500;
} else if (update_timer < 0) {
if (window.user_add_check_timer == 0) {
img_obj = eval("document." + user_type + "_user_exists");
username = eval("document.user_edit." + user_type + "_username");
img_obj.src = "/IBSng/admin/user/check_user_for_add.php?image=t&username=" + username.value + "&type=" + user_type + "&current_username=" + current_username;
} else {
window.user_add_check_timer -= 500;
setTimeout("updateUserAddCheckImage('" + user_type + "','" + current_username + "',-1)", 500);
}
}
}
function showUserAddCheckWindow(user_type, current_username) {
username = eval("document.user_edit." + user_type + "_username");
open("/IBSng/admin/user/check_user_for_add.php?image=f&username=" + username.value + "&type=" + user_type + "&current_username=" + current_username, "user_check", "width=500,height=300,scrollbars=yes,alwaysRaised=yes,dependent=yes");
}
function changeTRColor(obj, color) {
if (color == null) {
if (obj.original_color)
obj.style.backgroundColor = obj.original_color;
} else {
obj.original_color = getObjCurrentStyle(obj).backgroundColor;
obj.style.backgroundColor = color;
}
}
function getObjCurrentStyle(obj) {
if (window.getComputedStyle)
return window.getComputedStyle(obj, null);
else if (obj.currentStyle)
return obj.currentStyle;
}
function showReportLayer(layer_id, show_obj, hpos) {
layer_obj = document.getElementById(layer_id)
layer_obj.style.left = 0;
toggleDisplay(layer_obj);
obj_top = findPosY(show_obj) + show_obj.offsetTop;
layer_obj.style.top = obj_top;
obj_left = findPosX(show_obj);
if (!hpos || hpos == "left")
obj_left -= layer_obj.offsetWidth;
else if (hpos == "right")
obj_left += show_obj.offsetWidth;
layer_obj.style.left = obj_left;
}
function moveLayer(evt, layer_obj) {
if (!window.start_move)
return;
if (window.event)
evt = window.event;
layer_obj.style.left = window.now_x + evt.clientX - window.offset_x;
layer_obj.style.top = window.now_y + evt.clientY - window.offset_y;
return false;
}
function startMove(evt, layer_obj) {
if (window.event)
evt = window.event;
window.start_move = true;
window.offset_x = evt.clientX;
window.offset_y = evt.clientY;
window.now_x = parseInt(layer_obj.style.left);
window.now_y = parseInt(layer_obj.style.top);
document.onmousemove = function(evt) {
moveLayer(evt, layer_obj);
}
}
function stopMove(evt) {
window.start_move = false;
document.onmousemove = null;
}
function sessionDateTypeChanged(http_request) {
if (http_request.readyState == 4 && http_request.status == 200) {
document.getElementById('session_date_select').style.display = 'none';
document.getElementById('current_session_date_type').innerHTML = http_request.responseText;
}
}
function changeSessionDateType(date_type) {
var http_request;
if (window.XMLHttpRequest)
http_request = new XMLHttpRequest();
else if (window.ActiveXObject)
http_request = new ActiveXObject("Microsoft.XMLHTTP");
if (http_request) {
window.request_send = new Date().getTime();
http_request.onreadystatechange = function() {
sessionDateTypeChanged(http_request)
};
var url = '/IBSng/util/session_date_type.php?date_type=' + date_type;
http_request.open('GET', url, true);
http_request.send(null);
}
else
alert("Browser doesn't support xmlhttp");
}
function toggleDisplay(obj) {
if (obj.style.display == 'none')
obj.style.display = '';
else
obj.style.display = 'none';
}
function toggleShowHide(show_hide_id, target_id) {
show_hide_obj = document.getElementById(show_hide_id);
target = document.getElementById(target_id);
if (target.style.display == 'none') {
target.style.display = '';
show_hide_obj.innerHTML = "Hide";
} else {
target.style.display = 'none';
show_hide_obj.innerHTML = "Show";
}
}
function toggleVisibility(obj) {
if (obj.style.visibility == 'hidden')
obj.style.visibility = 'visible';
else
obj.style.visibility = 'hidden';
}
function ibs_setup_calendar(input_id, trigger_id, select_id) {
select_obj = document.getElementById(select_id);
if (select_obj.value == "gregorian")
setup_calendar(input_id, trigger_id, "G");
else if (select_obj.value == "jalali")
setup_calendar(input_id, trigger_id, "J");
else {
if (window.DATE_TYPE == "jalali")
select_obj.value = "jalali";
else
select_obj.value = "gregorian";
ibs_setup_calendar(input_id, trigger_id, select_id);
}
}
function findPosX(obj) {
var curleft = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curleft += obj.offsetLeft
obj = obj.offsetParent;
}
}
else if (obj.x)
curleft += obj.x;
return curleft;
}
function findPosY(obj) {
var curtop = 0;
if (obj.offsetParent) {
while (obj.offsetParent) {
curtop += obj.offsetTop
obj = obj.offsetParent;
}
}
else if (obj.y)
curtop += obj.y;
return curtop;
}
var window_onloads = [];
function windowOnload() {
for (idx in window_onloads) {
window_onloads[idx]();
}
}
function addToWindowOnloads(method) {
window_onloads.push(method);
window.onload = windowOnload;
}
function showMessage(message_id) {
toggleDisplay(document.getElementById("message_text_truncated_" + message_id));
toggleDisplay(document.getElementById("message_text_" + message_id));
return false;
}
function isArray(check) {
if (typeof check == "object")
return(check.constructor.toString().match(/array/i) != null);
return false;
}
function formatPrice(price) {
precision = 2;
var price = parseFloat(price);
var sign = price < 0 ? -1 : 1;
price *= sign;
if (precision) {
var int_price = Math.floor(price);
var float_part = Math.round((price - int_price) * Math.pow(10, precision));
} else {
var int_price = Math.round(price);
var float_part = 0;
}
int_part = String(int_price);
var str = "";
while (int_part.length > 3) {
var part = int_part.substr(int_part.length - 3, 3);
int_part = int_part.substr(0, int_part.length - 3);
str = "," + part + str;
}
str = int_part + str;
if (float_part > 0)
str += "." + float_part;
if (sign == -1)
str = "-" + str;
return str;
}
function formatDuration(seconds) {
var hours = parseInt(seconds / 3600);
if (hours < 10)
hours = "0" + hours;
var rest = seconds % 3600;
var mins = parseInt(rest / 60);
if (mins < 10)
mins = "0" + mins;
var secs = parseInt(rest % 60);
if (secs < 10)
secs = "0" + secs;
return hours + ":" + mins + ":" + secs;
}
function formatByte(bytes) {
var units = ["B","K","M","G"];
for (var i in units) {
if (bytes < 1024) {
return String(Math.round(bytes)) + units[i];
}
bytes /= 1024;
}
return String(Math.round(bytes)) + units[i];
}
function breakString(str, length, glue) {
var broken_str = "";
while (str.length > length) {
broken_str += str.substr(0, length) + glue;
str = str.substr(length);
}
return broken_str + str;
}
function playPauseOnClick() {
img_obj = document.getElementById("refresh_play_pause");
switch (window.refresh_timer_status) {
case "play":
case undefined:
window.refresh_timer_status = "pause";
img_obj.src = "/IBSng/images/icon/play.gif";
break;
case "pause":
window.refresh_timer_status = "play";
img_obj.src = "/IBSng/images/icon/pause.gif"
break;
}
}

var g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];
var j_month_name = ["", "Farvardin", "Ordibehesht", "Khordad", "Tir",
"Mordad", "Shahrivar", "Mehr", "Aban", "Azar",
"Dey", "Bahman", "Esfand"];
function gregorian_to_jalali(
g_y,
g_m,
g_d)
{
var gy, gm, gd;
var jy, jm, jd;
var g_day_no, j_day_no;
var j_np;
var i;
gy = g_y - 1600;
gm = g_m - 1;
gd = g_d - 1;
var g_day_no = 365 * gy + Math.floor((gy + 3) / 4) - Math.floor((gy + 99) / 100) + Math.floor((gy + 399) / 400);
for (i = 0; i < gm; ++i)
g_day_no += 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;
j_day_no = g_day_no - 79;
j_np = Math.floor(j_day_no / 12053);
j_day_no %= 12053;
jy = 979 + 33 * j_np + 4 * Math.floor(j_day_no / 1461);
j_day_no %= 1461;
if (j_day_no >= 366) {
jy += Math.floor((j_day_no - 1) / 365);
j_day_no = (j_day_no - 1) % 365;
}
for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; ++i) {
j_day_no -= j_days_in_month[i];
}
jm = i + 1;
jd = j_day_no + 1;
return [jy,jm,jd];
}
function jalali_to_gregorian(
j_y,
j_m,
j_d)
{
var gy, gm, gd;
var jy, jm, jd;
var g_day_no, j_day_no;
var leap;
var i;
jy = j_y - 979;
jm = j_m - 1;
jd = j_d - 1;
j_day_no = 365 * jy + Math.floor(jy / 33) * 8 + Math.floor((jy % 33 + 3) / 4);
for (i = 0; i < jm; ++i)
j_day_no += j_days_in_month[i];
j_day_no += jd;
g_day_no = j_day_no + 79;
gy = 1600 + 400 * Math.floor(g_day_no / 146097);
g_day_no = g_day_no % 146097;
leap = 1;
if (g_day_no >= 36525)
{
g_day_no--;
gy += 100 * Math.floor(g_day_no / 36524);
g_day_no = g_day_no % 36524;

if (g_day_no >= 365)
g_day_no++;
else
leap = 0;
}
gy += 4 * Math.floor(g_day_no / 1461);
g_day_no %= 1461;
if (g_day_no >= 366) {
leap = 0;

g_day_no--;
gy += Math.floor(g_day_no / 365);
g_day_no = g_day_no % 365;
}
for (i = 0; g_day_no >= g_days_in_month[i] + (i == 1 && leap); i++)
g_day_no -= g_days_in_month[i] + (i == 1 && leap);
gm = i + 1;
gd = g_day_no + 1;
return [gy,gm,gd];
}

window.DateType = 'J';
Date.prototype.__old_getDate = Date.prototype.getDate;
Date.prototype.__old_getDay = Date.prototype.getDay;
Date.prototype.__old_getMonth = Date.prototype.getMonth;
Date.prototype.__old_getYear = Date.prototype.getYear;
Date.prototype.__old_getFullYear = Date.prototype.getFullYear;
Date.prototype.__old_setDate = Date.prototype.setDate;
Date.prototype.__old_setDay = Date.prototype.setDay;
Date.prototype.__old_setMonth = Date.prototype.setMonth;
Date.prototype.__old_setYear = Date.prototype.setYear;
Date.prototype.__old_setFullYear = Date.prototype.setFullYear;
Date.prototype.convertToJalali = function() {
var r = gregorian_to_jalali(this.__old_getFullYear(), this.__old_getMonth() + 1, this.__old_getDate());
r[1] --;
return r;
}
Date.prototype.setJalaliDate = function(jd) {
var r = jalali_to_gregorian(jd[0], jd[1] + 1, jd[2]);
r[1] --;
this.__old_setDate(r[2]);
this.__old_setMonth(r[1]);
this.__old_setFullYear(r[0]);
}
Date.prototype.getDate = function() {
if (this.DateType != 'J')
return this.__old_getDate();
var ret = this.convertToJalali();
return ret[2];
}
Date.prototype.getMonth = function() {
if (this.DateType != 'J')
return this.__old_getMonth();
var ret = this.convertToJalali();
return ret[1];
}
Date.prototype.getYear = function() {
if (this.DateType != 'J')
return this.__old_getYear();
var ret = this.convertToJalali();
var x = ret[0].toString();
return x.substr(2);
}
Date.prototype.getFullYear = function() {
if (this.DateType != 'J')
return this.__old_getFullYear();
var ret = this.convertToJalali();
return ret[0];
}
Date.prototype.setDate = function(p) {
if (this.DateType != 'J')
return this.__old_setDate(p);
var ret = this.convertToJalali();
ret[2] = p;
this.setJalaliDate(ret);
}
Date.prototype.setMonth = function(p) {
if (this.DateType != 'J')
return this.__old_setMonth(p);
var ret = this.convertToJalali();
ret[1] = p;
this.setJalaliDate(ret);
}
Date.prototype.setYear = function(p) {
if (this.DateType != 'J')
return this.__old_setYear(p);
var ret = this.convertToJalali();
ret[0] = 1300 + p;
this.setJalaliDate(ret);
}
Date.prototype.setFullYear = function(p) {
if (this.DateType != 'J')
return this.__old_setFullYear(p);
var ret = this.convertToJalali();
ret[0] = p;
this.setJalaliDate(ret);
}
Date.prototype.setType = function(c) {
if (!c)
alert("jdate.js : invalid date type! (" + c + ")");
else
this.DateType = c;
}

Calendar = function (dateType, firstDayOfWeek, dateStr, onSelected, onClose) {
this.DateType = dateType;
this.setDateSystem(this.DateType);
this.activeDiv = null;
this.currentDateEl = null;
this.getDateStatus = null;
this.timeout = null;
this.onSelected = onSelected || null;
this.onClose = onClose || null;
this.dragging = false;
this.hidden = false;
this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"];
this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"];
this.isPopup = true;
this.weekNumbers = true;
this.showsOtherMonths = false;
this.dateStr = dateStr;
this.ar_days = null;
this.showsTime = false;
this.time24 = true;
this.yearStep = 2;
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 ar = new Array();
for (var i = 8; i > 0;) {
ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len);
}
Calendar._SDN = ar;
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;
}
};
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(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;
};
Calendar.getElement = function(ev) {
if (Calendar.is_ie) {
return window.event.srcElement;
} else {
return ev.currentTarget;
}
};
Calendar.getTargetElement = function(ev) {
if (Calendar.is_ie) {
return window.event.srcElement;
} else {
return ev.target;
}
};
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) {
el.attachEvent("on" + evname, func);
} else if (el.addEventListener) {
el.addEventListener(evname, func, true);
} else {
el["on" + evname] = func;
}
};
Calendar.removeEvent = function(el, evname, func) {
if (el.detachEvent) {
el.detachEvent("on" + evname, func);
} else if (el.removeEventListener) {
el.removeEventListener(evname, func, true);
} else {
el["on" + evname] = null;
}
};
Calendar.createElement = function(type, parent) {
var el = null;
if (document.createElementNS) {
el = document.createElementNS("http://www.w3.org/1999/xhtml", type);
} else {
el = document.createElement(type);
}
if (typeof parent != "undefined") {
parent.appendChild(el);
}

return el;
};
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.firstChild.data = 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")
ycw = 50;
s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px";
}
s.top = (cd.offsetTop + cd.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);
date.setType(cal.DateType);
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);
date.setType(cal.DateType);
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.firstChild.data = 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.firstChild.data;
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.firstChild.data = el.ttip;
}
if (el.navtype != 300) {
Calendar.addClass(el, "hilite");
if (el.caldate) {
Calendar.addClass(el.parentNode, "rowhilite");
}
}
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");
}
el.calendar.tooltips.firstChild.data = _TT["SEL_DATE"];
return stopEvent(ev);
}
};
Calendar.cellClick = function(el, ev) {
var cal = el.calendar;
var closing = false;
var newdate = false;
var date = null;
if (typeof el.navtype == "undefined") {
Calendar.removeClass(cal.currentDateEl, "selected");
Calendar.addClass(el, "selected");
closing = (cal.currentDateEl == el);
if (!closing) {
cal.currentDateEl = el;
}
cal.date = new Date(el.caldate);
cal.date.setType(cal.DateType);
date = cal.date;
newdate = true;
if (!(cal.dateClicked = !el.otherMonth))
cal._init(cal.firstDayOfWeek, date);
} else {
if (el.navtype == 200) {
Calendar.removeClass(el, "hilite");
cal.callCloseHandler();
return;
}
date = (el.navtype == 0) ? new Date() : new Date(cal.date);
date.setType(cal.DateType);
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 {
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 <mishoo@infoiasi.ro> 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.firstChild.data;
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.firstChild.data = newval;
cal.onUpdateTime();
return;
case 0:
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;
}
}
if (newdate) {
cal.callHandler();
}
if (closing) {
Calendar.removeClass(el, "hilite");
cal.callCloseHandler();
}
};
Calendar.prototype.create = function (_par) {
var parent = null;
if (! _par) {
parent = document.getElementsByTagName("body")[0];
this.isPopup = true;
} else {
parent = _par;
this.isPopup = false;
}
this.date = this.dateStr ? new Date(this.dateStr) : new Date();
this.date.setType(this.DateType);

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;
if (text.substr(0, 1) != "&") {
cell.appendChild(document.createTextNode(text));
}
else {
cell.innerHTML = text;
}
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("&#x00d7;", 1, 200).ttip = Calendar._TT["CLOSE"];
}
row = Calendar.createElement("tr", thead);
row.className = "headrow";
this._nav_py = hh("&#x00ab;", 1, -2);
this._nav_py.ttip = Calendar._TT["PREV_YEAR"];
this._nav_pm = hh("&#x2039;", 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("&#x203a;", 1, 1);
this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"];
this._nav_ny = hh("&#x00bb;", 1, 2);
this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"];
row = Calendar.createElement("tr", thead);
row.className = "daynames";
if (this.weekNumbers) {
cell = Calendar.createElement("td", row);
cell.className = "name wn";
cell.appendChild(document.createTextNode(Calendar._TT["WK"]));
}
for (var i = 7; i > 0; --i) {
cell = Calendar.createElement("td", row);
cell.appendChild(document.createTextNode(""));
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);
cell.appendChild(document.createTextNode(""));
}
for (var j = 7; j > 0; --j) {
cell = Calendar.createElement("td", row);
cell.appendChild(document.createTextNode(""));
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"] || "&nbsp;";
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.appendChild(document.createTextNode(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.appendChild(document.createTextNode(":"));
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 = "&nbsp;";

cal.onSetTime = function() {
var hrs = this.date.getHours();
var mins = this.date.getMinutes();
var pm = (hrs > 12);
if (pm && t12) hrs -= 12;
H.firstChild.data = (hrs < 10) ? ("0" + hrs) : hrs;
M.firstChild.data = (mins < 10) ? ("0" + mins) : mins;
if (t12)
AP.firstChild.data = pm ? "pm" : "am";
};
cal.onUpdateTime = function() {
var date = this.date;
var h = parseInt(H.firstChild.data, 10);
if (t12) {
if (/pm/i.test(AP.firstChild.data) && h < 12)
h += 12;
else if (/am/i.test(AP.firstChild.data) && h == 12)
h = 0;
}
var d = date.getDate();
var m = date.getMonth();
var y = date.getFullYear();
date.setHours(h);
date.setMinutes(parseInt(M.firstChild.data, 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.appendChild(document.createTextNode(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";
yr.appendChild(document.createTextNode(""));
div.appendChild(yr);
}
this._init(this.firstDayOfWeek, this.date);
parent.appendChild(this.element);
};
Calendar._keyEvent = function(ev) {
if (!window.calendar) {
return false;
}
(Calendar.is_ie) && (ev = window.event);
var cal = window.calendar;
var act = (Calendar.is_ie || ev.type == "keypress");
if (ev.ctrlKey) {
switch (ev.keyCode) {
case 37:
act && Calendar.cellClick(cal._nav_pm);
break;
case 38:
act && Calendar.cellClick(cal._nav_py);
break;
case 39:
act && Calendar.cellClick(cal._nav_nm);
break;
case 40:
act && Calendar.cellClick(cal._nav_ny);
break;
default:
return false;
}
} else switch (ev.keyCode) {
case 32:
Calendar.cellClick(cal._nav_now);
break;
case 27:
act && cal.callCloseHandler();
break;
case 37:
case 38:
case 39:
case 40:
if (act) {
var date = cal.date.getDate() - 1;
var el = cal.currentDateEl;
var ne = null;
var prev = (ev.keyCode == 37) || (ev.keyCode == 38);
switch (ev.keyCode) {
case 37:
(--date >= 0) && (ne = cal.ar_days[date]);
break;
case 38:
date -= 7;
(date >= 0) && (ne = cal.ar_days[date]);
break;
case 39:
(++date < cal.ar_days.length) && (ne = cal.ar_days[date]);
break;
case 40:
date += 7;
(date < cal.ar_days.length) && (ne = cal.ar_days[date]);
break;
}
if (!ne) {
if (prev) {
Calendar.cellClick(cal._nav_pm);
} else {
Calendar.cellClick(cal._nav_nm);
}
date = (prev) ? cal.date.getMonthDays() : 1;
el = cal.currentDateEl;
ne = cal.ar_days[date - 1];
}
Calendar.removeClass(el, "selected");
Calendar.addClass(ne, "selected");
cal.date = new Date(ne.caldate);
cal.date.setType(this.DateType);
cal.callHandler();
cal.currentDateEl = ne;
}
break;
case 13:
if (act) {
cal.callHandler();
cal.hide();
}
break;
default:
return false;
}
return Calendar.stopEvent(ev);
};
Calendar.prototype._init = function (firstDayOfWeek, date) {
var today = new Date();
today.setType(this.DateType);
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);
this.date.setType(this.DateType);
var month = date.getMonth();
var mday = date.getDate();
var no_days = date.getMonthDays();
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 = new Array();
var weekend = Calendar._TT["WEEKEND"];
for (var i = 0; i < 6; ++i,row = row.nextSibling) {
var cell = row.firstChild;
if (this.weekNumbers) {
cell.className = "day wn";
cell.firstChild.data = date.getWeekNumber();
cell = cell.nextSibling;
}
row.className = "daysrow";
var hasdays = false;
for (var j = 0; j < 7; ++j,cell = cell.nextSibling,date.setDate(date.getDate() + 1)) {
var iday = date.getDate();
var wday = date.getDay();
cell.className = "day";
var current_month = (date.getMonth() == month);
if (!current_month) {
if (this.showsOtherMonths) {
cell.className += " othermonth";
cell.otherMonth = true;
} else {
cell.className = "emptycell";
cell.innerHTML = "&nbsp;";
cell.disabled = true;
continue;
}
} else {
cell.otherMonth = false;
hasdays = true;
}
cell.disabled = false;
cell.firstChild.data = iday;
if (typeof this.getDateStatus == "function") {
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) {
ar_days[ar_days.length] = cell;
cell.caldate = new Date(date);
cell.caldate.setType(this.DateType);
cell.ttip = "_";
if (current_month && iday == mday) {
cell.className += " selected";
this.currentDateEl = cell;
}
if (date.getFullYear() == today.getFullYear() &&
date.getMonth() == today.getMonth() &&
iday == today.getDate()) {
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.ar_days = ar_days;
this.title.firstChild.data = Calendar._MN[month] + ", " + year;
this.onSetTime();
this.table.style.visibility = "visible";
};
Calendar.prototype.setDate = function (date) {
date.setType(this.DateType);
if (!date.equalsTo(this.date)) {
this._init(this.firstDayOfWeek, date);
}
};
Calendar.prototype.refresh = function () {
this._init(this.firstDayOfWeek, this.date);
};
Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) {
this._init(firstDayOfWeek, this.date);
this._displayWeekdays();
};
Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) {
this.getDateStatus = unaryFunction;
};
Calendar.prototype.setRange = function (a, z) {
this.minYear = a;
this.maxYear = z;
};
Calendar.prototype.callHandler = function () {
if (this.onSelected) {
this.onSelected(this, this.date.print(this.dateFormat));
}
};
Calendar.prototype.callCloseHandler = function () {
if (this.onClose) {
this.onClose(this);
}
this.hideShowCovered();
};
Calendar.prototype.destroy = function () {
var el = this.element.parentNode;
el.removeChild(this.element);
Calendar._C = null;
window.calendar = null;
};
Calendar.prototype.reparent = function (new_parent) {
var el = this.element;
el.parentNode.removeChild(el);
new_parent.appendChild(el);
};
Calendar._checkCalendar = function(ev) {
if (!window.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) {
window.calendar.callCloseHandler();
return Calendar.stopEvent(ev);
}
};
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.calendar = 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 (x, y) {
var s = this.element.style;
s.left = x + "px";
s.top = y + "px";
this.show();
};
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;
} 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_fucking_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);
}
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
}
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 "r": p.x += el.offsetWidth - w; break;
case "l": break;
}
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_fucking_khtml_browser()", 10);
else
Calendar.continuation_for_the_fucking_khtml_browser();
};
Calendar.prototype.setDateFormat = function (str) {
this.dateFormat = str;
};
Calendar.prototype.setTtDateFormat = function (str) {
this.ttDateFormat = str;
};
Calendar.prototype.parseDate = function (str, fmt) {
var y = 0;
var m = -1;
var d = 0;
var a = str.split(/\W+/);
if (!fmt) {
fmt = this.dateFormat;
}
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);
if (this.DateType == 'J')
y += (y < 100) ? 1300 : 0;
else
(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;
break;

case "%M":
min = parseInt(a[i], 10);
break;
}
}
if (y != 0 && m != -1 && d != 0) {
if (this.DateType == 'J') {
x = new Date(1990, 0, 1, hr, min, 0);
x.setType(this.DateType);
x.setJalaliDate([y, m, d]);
this.setDate(x);
}
else
this.setDate(new Date(y, m, d, hr, min, 0));
return;
}
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);
if (this.DateType == 'J')
y += (y < 100) ? 1300 : 0;
else
(y < 100) && (y += (y > 29) ? 1900 : 2000);
} else if (d == 0) {
d = a[i];
}
}
if (y == 0) {
var today = new Date();
today.setType(this.DateType);
y = today.getFullYear();
}
if (m != -1 && d != 0) {
if (this.DateType == 'J') {
x = new Date(1990, 0, 1, hr, min, 0);
x.setType(this.DateType);
x.setJalaliDate([y, m, d]);
this.setDate(x);
}
else
this.setDate(new Date(y, m, d, hr, min, 0));
}
};
Calendar.prototype.hideShowCovered = function () {
var self = this;
Calendar.continuation_for_the_fucking_khtml_browser = function() {
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 = self.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 (self.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";
}
}
}
};
if (Calendar.is_khtml)
setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10);
else
Calendar.continuation_for_the_fucking_khtml_browser();
};
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.firstChild.data = Calendar._SDN[(i + fdow) % 7];
cell = cell.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.J_MD = new Array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
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.prototype.setToDayBegin = function() {
this.setHours(0);
this.setMinutes(0);
this.setSeconds(0);
this.setMilliseconds(0);
}
Date.prototype.getMonthDays = function(month) {
var year = this.getFullYear();
if (typeof month == "undefined") {
month = this.getMonth();
}

if (this.DateType == 'J') {
if (((0 == (year % 4)) && ( (0 != (year % 100)) || (0 == (year % 400)))) && month == 11) {
return 30;
} else {
return Date.J_MD[month];
}

} else {
if (((0 == (year % 4)) && ( (0 != (year % 100)) || (0 == (year % 400)))) && month == 1) {
return 29;
} else {
return Date._MD[month];
}
}
};
Date.prototype.getDayOfYear = function() {
var now = new Date(this);
now.setType(this.DateType);
now.setToDayBegin();
var then = new Date(this.__old_getFullYear(), 0, 0, 0, 0, 0);
then.setType(this.DateType);
if (this.DateType == 'J')
then.setJalaliDate([this.getFullYear(), 0, 1]);
var time = now - then;
return Math.floor(time / Date.DAY);
};
Date.prototype.getWeekNumber = function() {
var d = new Date(this);
d.setType(this.DateType);
d.setToDayBegin();
if (this.DateType == 'J')
{
var ys = new Date(this);
ys.setType(this.DateType);
ys.setJalaliDate([ys.getFullYear(), 0, 1]);
return Math.round((d.getTime() - ys.getTime()) / (7 * 864e5)) + 1;

} else {
var DoW = d.getDay();
d.setDate(d.getDate() - (DoW + 6) % 7 + 3);
// Nearest Thu
var ms = d.valueOf();
// GMT
d.__old_setMonth(0);
d.__old_setDate(4);
// Thu in Week 1
return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1;
}
};
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()));
};
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];
s["%A"] = Calendar._DN[w];
s["%b"] = Calendar._SMN[m];
s["%B"] = Calendar._MN[m];
s["%C"] = 1 + Math.floor(y / 100);
s["%d"] = (d < 10) ? ("0" + d) : d;
s["%e"] = d;
s["%H"] = (hr < 10) ? ("0" + hr) : hr;
s["%I"] = (ir < 10) ? ("0" + ir) : ir;
s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy;
s["%k"] = hr;
s["%l"] = ir;
s["%m"] = (m < 9) ? ("0" + (1 + m)) : (1 + m);
s["%M"] = (min < 10) ? ("0" + min) : min;
s["%n"] = "\n";
s["%p"] = pm ? "PM" : "AM";
s["%P"] = pm ? "pm" : "am";
s["%s"] = Math.floor(this.getTime() / 1000);
s["%S"] = (sec < 10) ? ("0" + sec) : sec;
s["%t"] = "\t";
s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn;
s["%u"] = w + 1;
s["%w"] = w;
s["%y"] = ('' + y).substr(2, 2);
s["%Y"] = y;
s["%%"] = "%";
var re = /%./g;
if (!Calendar.is_ie5)
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;
};
Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear;
Date.prototype.setFullYear = function(y) {
var d = new Date(this);
d.setType(this.DateType);
d.__msh_oldSetFullYear(y);
if (d.getMonth() != this.getMonth())
this.setDate(28);
this.__msh_oldSetFullYear(y);
};
Calendar.prototype.setDateSystem = function(c) {
if (c == 'J') {
this.minYear = 1300;
this.maxYear = 1500;
this.firstDayOfWeek = 6;
this.DateType = 'J';
set_JA();
} else {
this.minYear = 1900;
this.maxYear = 2100;
this.firstDayOfWeek = 0;
this.DateType = 'G';
set_EN();
}
}
window.calendar = null;


Calendar.setup = function (params) {
function param_default(pname, def) {
if (typeof params[pname] == "undefined") {
params[pname] = def;
}
}
;
param_default("inputField", null);
param_default("displayArea", null);
param_default("button", null);
param_default("eventName", "click");
param_default("ifFormat", "%Y/%m/%d");
param_default("daFormat", "%Y/%m/%d");
param_default("singleClick", true);
param_default("disableFunc", null);
param_default("dateStatusFunc", params["disableFunc"]);
param_default("firstDay", 0);
param_default("align", "Br");
param_default("range", [1900, 2999]);
param_default("weekNumbers", true);
param_default("flat", null);
param_default("flatCallback", null);
param_default("onSelect", null);
param_default("onClose", null);
param_default("onUpdate", null);
param_default("date", null);
param_default("showsTime", false);
param_default("timeFormat", "24");
param_default("electric", true);
param_default("step", 2);
param_default("position", null);
param_default("cache", false);
param_default("showOthers", false);
param_default("dateType", 'J');
var tmp = ["inputField", "displayArea", "button"];
for (var i in tmp) {
if (typeof params[tmp[i]] == "string") {
params[tmp[i]] = document.getElementById(params[tmp[i]]);
}
}
if (!(params.flat || params.inputField || params.displayArea || params.button)) {
alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");
return false;
}
function onSelect(cal) {
var p = cal.params;
var update = (cal.dateClicked || p.electric);
if (update && p.flat) {
if (typeof p.flatCallback == "function")
p.flatCallback(cal);
else
alert("No flatCallback given -- doing nothing.");
return false;
}
if (update && p.inputField) {
p.inputField.value = cal.date.print(p.ifFormat);
if (typeof p.inputField.onchange == "function")
p.inputField.onchange();
}
if (update && p.displayArea)
p.displayArea.innerHTML = cal.date.print(p.daFormat);
if (update && p.singleClick && cal.dateClicked)
cal.callCloseHandler();
if (update && typeof p.onUpdate == "function")
p.onUpdate(cal);
}
;
if (params.flat != null) {
if (typeof params.flat == "string")
params.flat = document.getElementById(params.flat);
if (!params.flat) {
alert("Calendar.setup:\n  Flat specified but can't find parent.");
return false;
}
var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect);
cal.showsTime = params.showsTime;
cal.time24 = (params.timeFormat == "24");
cal.params = params;
cal.weekNumbers = params.weekNumbers;
cal.setRange(params.range[0], params.range[1]);
cal.setDateStatusHandler(params.dateStatusFunc);
cal.create(params.flat);
cal.show();
return false;
}
var dateEl = params.inputField || params.displayArea;
var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
var mustCreate = false;
var cal = window.calendar;
if (!(cal && params.cache)) {
window.calendar = cal = new Calendar(params.dateType,
params.firstDay,
params.date,
params.onSelect || onSelect,
params.onClose || function(cal) {
cal.hide();
});
cal.showsTime = params.showsTime;
cal.time24 = (params.timeFormat == "24");
cal.weekNumbers = params.weekNumbers;
mustCreate = true;
} else {
if (params.date)
cal.setDate(params.date);
cal.hide();
}
cal.showsOtherMonths = params.showOthers;
cal.yearStep = params.step;
cal.params = params;
cal.setDateStatusHandler(params.dateStatusFunc);
cal.setDateFormat(dateFmt);
if (mustCreate)
cal.create();
cal.parseDate(dateEl.value || dateEl.innerHTML);
cal.refresh();
if (!params.position)
cal.showAtElement(params.button || params.displayArea || params.inputField, params.align);
else
cal.showAt(params.position[0], params.position[1]);

return false;
};



