 
Calendar=function (mondayFirst, dateStr, onSelected, onClose) {
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.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.mondayFirst=mondayFirst;
this.dateStr=dateStr;
this.ar_days=null;
this.showsTime=false;
this.time24=true;
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_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=Calendar.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;
};
/** 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
s.left=(cd.offsetLeft+cd.offsetWidth - mc.offsetWidth)+"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 ? 2 : -2;
}
if (show) {
var s=yc.style;
s.display="block";
if (cd.navtype < 0)
s.left=cd.offsetLeft+"px";
else
s.left=(cd.offsetLeft+cd.offsetWidth - yc.offsetWidth)+"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);
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 in range))
i=range.length - 1;
} else if (!(++i in range))
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, "mouseover", stopEvent);
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;
addClass(el, "hilite active");
addEvent(document, "mouseover", tableMouseOver);
addEvent(document, "mousemove", tableMouseOver);
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)=="_") {
var date=null;
with (el.calendar.date) {
date=new Date(getFullYear(), getMonth(), el.caldate);
}
el.ttip=date.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);
}
};
/**
* 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") {
Calendar.removeClass(cal.currentDateEl, "selected");
Calendar.addClass(el, "selected");
closing=(cal.currentDateEl==el);
if (!closing) {
cal.currentDateEl=el;
}
cal.date.setDate(el.caldate);
date=cal.date;
newdate=true;
cal.dateClicked=true;
} else {
if (el.navtype==200) {
Calendar.removeClass(el, "hilite");
cal.callCloseHandler();
return;
}
date=(el.navtype==0) ? new Date() : new Date(cal.date);
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="Wybierz odpowiedniš datę poprzez kliknięcie na odpowiedni dzień. \nPrzytrzymaj na strzałkach aby rozwinšć menu. \nKalendarz można również obsługiwać za pomocš klawiatury - klawiszy kursora ";
}
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.setMondayFirst(!cal.mondayFirst);
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 in range))
i=range.length - 1;
} else if (!(++i in range))
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();
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="cal_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="cal_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="&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.mondayFirst, 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.hide();
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.setDate(ne.caldate);
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 (mondayFirst, date) {
var today=new Date();
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.mondayFirst=mondayFirst;
this.date=new Date(date);
var month=date.getMonth();
var mday=date.getDate();
var no_days=date.getMonthDays();
date.setDate(1);
var wday=date.getDay();
var MON=mondayFirst ? 1 : 0;
var SAT=mondayFirst ? 5 : 6;
var SUN=mondayFirst ? 6 : 0;
if (mondayFirst) {
wday=(wday > 0) ? (wday - 1) : 6;
}
var iday=1;
var row=this.tbody.firstChild;
var MN=Calendar._SMN[month];
var hasToday=((today.getFullYear()==year) && (today.getMonth()==month));
var todayDate=today.getDate();
var week_number=date.getWeekNumber();
var ar_days=new Array();
for (var i=0; i < 6; ++i) {
if (iday > no_days) {
row.className="emptyrow";
row=row.nextSibling;
continue;
}
var cell=row.firstChild;
if (this.weekNumbers) {
cell.className="day wn";
cell.firstChild.data=week_number;
cell=cell.nextSibling;
}
++week_number;
row.className="daysrow";
for (var j=0; j < 7; ++j) {
cell.className="day";
if ((!i && j < wday) || iday > no_days) {
cell.innerHTML="&nbsp;";
cell.disabled=true;
cell=cell.nextSibling;
continue;
}
cell.disabled=false;
cell.firstChild.data=iday;
if (typeof this.getDateStatus=="function") {
date.setDate(iday);
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=iday;
cell.ttip="_";
if (iday==mday) {
cell.className +=" selected";
this.currentDateEl=cell;
}
if (hasToday && (iday==todayDate)) {
cell.className +=" today";
cell.ttip +=Calendar._TT["PART_TODAY"];
}
if (wday==SAT || wday==SUN) {
cell.className +=" weekend";
}
}
++iday;
((++wday) ^ 7) || (wday=0);
cell=cell.nextSibling;
}
row=row.nextSibling;
}
this.ar_days=ar_days;
this.title.firstChild.data=Calendar._MN[month]+", "+year;
this.onSetTime();
};
Calendar.prototype.setDate=function (date) {
if (!date.equalsTo(this.date)) {
this._init(this.mondayFirst, date);
}
};
Calendar.prototype.refresh=function () {
this._init(this.mondayFirst, this.date);
};
Calendar.prototype.setMondayFirst=function (mondayFirst) {
this._init(mondayFirst, 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;
}
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; 
}
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; 
}
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.replace(/(%.)/g, function(str, par) {
return b[b.length]=par;
});
var i=0, j=0;
var hr=0;
var min=0;
for (i=0; i < a.length; ++i) {
if (b[i]=="%a" || b[i]=="%A") {
continue;
}
if (b[i]=="%d" || b[i]=="%e") {
d=parseInt(a[i], 10);
}
if (b[i]=="%m") {
m=parseInt(a[i], 10) - 1;
}
if (b[i]=="%Y" || b[i]=="%y") {
y=parseInt(a[i], 10);
(y < 100) && (y +=(y > 29) ? 1900 : 2000);
}
if (b[i]=="%b" || b[i]=="%B") {
for (j=0; j < 12; ++j) {
if (Calendar._MN[j].substr(0, a[i].length).toLowerCase()==a[i].toLowerCase()) { m=j; break; }
}
} else if (/%[HIkl]/.test(b[i])) {
hr=parseInt(a[i], 10);
} else if (/%[pP]/.test(b[i])) {
if (/pm/i.test(a[i]) && hr < 12)
hr +=12;
} else if (b[i]=="%M") {
min=parseInt(a[i], 10);
}
}
if (y !=0 && m !=-1 && d !=0) {
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);
(y < 100) && (y +=(y > 29) ? 1900 : 2000);
} else if (d==0) {
d=a[i];
}
}
if (y==0) {
var today=new Date();
y=today.getFullYear();
}
if (m !=-1 && d !=0) {
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") { 
if (!Calendar.is_khtml)
value=document.defaultView.
getComputedStyle(obj, "").getPropertyValue("visibility");
else
value='';
} else if (obj.currentStyle) { 
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();
};
/** Internal function; it displays the bar with the names of the weekday. */
Calendar.prototype._displayWeekdays=function () {
var MON=this.mondayFirst ? 0 : 1;
var SUN=this.mondayFirst ? 6 : 0;
var SAT=this.mondayFirst ? 5 : 6;
var cell=this.firstdayname;
for (var i=0; i < 7; ++i) {
cell.className="day name";
if (!i) {
cell.ttip=this.mondayFirst ? Calendar._TT["SUN_FIRST"] : Calendar._TT["MON_FIRST"];
cell.navtype=100;
cell.calendar=this;
Calendar._add_evs(cell);
}
if (i==SUN || i==SAT) {
Calendar.addClass(cell, "weekend");
}
cell.firstChild.data=Calendar._SDN[i+1 - MON];
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, "mouseover", stopEvent);
addEvent(document, "mouseup", calDragEnd);
}
};
Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);
Date.SECOND=1000 /* milliseconds */;
Date.MINUTE=60 * Date.SECOND;
Date.HOUR=60 * Date.MINUTE;
Date.DAY=24 * Date.HOUR;
Date.WEEK=7 * Date.DAY;
/** 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];
}
};
Date.prototype.getDayOfYear=function() {
var now=new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var then=new Date(this.getFullYear(), 0, 1, 0, 0, 0);
var time=now - then;
return Math.floor(time / Date.DAY);
};
Date.prototype.getWeekNumber=function() {
var now=new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0);
var then=new Date(this.getFullYear(), 0, 1, 0, 0, 0);
var time=now - then;
var day=then.getDay(); 
if (day==0) day=7;
(day > 4) && (day -=4) || (day +=3);
return Math.round(((time / Date.DAY)+day) / 7);
};
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=Date._msh_formatRegexp;
if (typeof re=="undefined") {
var tmp="";
for (var i in s)
tmp +=tmp ? ("|"+i) : i;
Date._msh_formatRegexp=re=new RegExp("("+tmp+")", 'g');
}
return str.replace(re, function(match, par) { return s[par]; });
};
window.calendar=null;





// Polish| dariush pietrzak, eyck@ghost.anime.pl
// ** I18N
Calendar._DN = new Array
("Niedziela",
 "Poniedziałek",
 "Wtorek",
 "Środa",
 "Czwartek",
 "Piątek",
 "Sobota",
 "Niedziela");
Calendar._MN = new Array
("Styczeń",
 "Luty",
 "Marzec",
 "Kwiecień",
 "Maj",
 "Czerwiec",
 "Lipiec",
 "Sierpień",
 "Wrzesień",
 "Październik",
 "Listopad",
 "Grudzień");

// tooltips
Calendar._TT = {};
Calendar._TT["TOGGLE"] = "zmień pierwszy dzień tygodnia";
Calendar._TT["PREV_YEAR"] = "poprzedni rok (trzymaj dla menu)";
Calendar._TT["PREV_MONTH"] = "poprzedni miesiąc (trzymaj dla menu)";
Calendar._TT["GO_TODAY"] = "powrót do dzisiaj";
Calendar._TT["NEXT_MONTH"] = "następny miesiąc (trzymaj dla menu)";
Calendar._TT["NEXT_YEAR"] = "następny rok (trzymaj dla menu)";
Calendar._TT["SEL_DATE"] = "wybierz datę";
Calendar._TT["DRAG_TO_MOVE"] = "przeciągnij";
Calendar._TT["PART_TODAY"] = " (dzisiaj)";
Calendar._TT["MON_FIRST"] = "wyświetl poniedziałek pierwszy";
Calendar._TT["SUN_FIRST"] = "wyświetl niedzielę pierwszą";
Calendar._TT["CLOSE"] = "zamknij";
Calendar._TT["TODAY"] = "dzisiaj";

// date formats
Calendar._TT["DEF_DATE_FORMAT"] = "y-mm-dd";
Calendar._TT["TT_DATE_FORMAT"] = "%Y-%m-%d";

Calendar._TT["WK"] = "wk";





/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/
 * ---------------------------------------------------------------------------
 *
 * The DHTML Calendar
 *
 * Details and latest version at:
 * http://dynarch.com/mishoo/calendar.epl
 *
 * This script is distributed under the GNU Lesser General Public License.
 * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html
 *
 * This file defines helper functions for setting up the calendar. They are
 * intended to help non-programmers get a working calendar on their site
 * quickly. This script should not be seen as part of the calendar. It just
 * shows you what one can do with the calendar, while in the same time
 * providing a quick and simple method for setting it up. If you need
 * exhaustive customization of the calendar creation process feel free to
 * modify this code to suit your needs (this is recommended and much better
 * than modifying calendar.js itself).
 */

// $Id: calendar-setup.js,v 1.7 2003/11/03 05:54:09 mishoo Exp $
 
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"]); // takes precedence if both are defined
 param_default("mondayFirst", true);
 param_default("align", "Bl");
 param_default("range", [2008, 2009]);
 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");

 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) {
 if (cal.params.flat) {
 if (typeof cal.params.flatCallback == "function") {
 cal.params.flatCallback(cal);
 } else {
 alert("No flatCallback given -- doing nothing.");
 }
 return false;
 }
 if (cal.params.inputField) {
 cal.params.inputField.value = cal.date.print(cal.params.ifFormat);
 }
 if (cal.params.displayArea) {
 cal.params.displayArea.innerHTML = cal.date.print(cal.params.daFormat);
 }
 if (cal.params.singleClick && cal.dateClicked) {
 cal.callCloseHandler();
 }
 if (typeof cal.params.onUpdate == "function") {
 cal.params.onUpdate(cal);
 }
 };

 if (params.flat != null) {
 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.mondayFirst, 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 triggerEl = params.button || params.displayArea || params.inputField;
 triggerEl["on" + params.eventName] = function() {
 var dateEl = params.inputField || params.displayArea;
 var dateFmt = params.inputField ? params.ifFormat : params.daFormat;
 var mustCreate = false;
 var cal = window.calendar;
 if (!window.calendar) {
 window.calendar = cal = new Calendar(params.mondayFirst,
 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 {
 cal.hide();
 }
 cal.setRange(params.range[0], params.range[1]);
 cal.params = params;
 cal.setDateStatusHandler(params.dateStatusFunc);
 cal.setDateFormat(dateFmt);
 if (mustCreate)
 cal.create();
 cal.parseDate(dateEl.value || dateEl.innerHTML);
 cal.refresh();
 cal.showAtElement(params.displayArea || params.inputField, params.align);
 return false;
 };
};

