kalendarz_layers          = new Array();
kalendarz_mouseoverStatus = false;
kalendarz_mouseX          = 0;
kalendarz_mouseY          = 0;
function kalendarz(objName, callbackFunc, startyear, yearrangePREV, yearrangeFF, pathtotemplate)
{
	this.today          = new Date();
	this.date           = this.today.getDate();
	this.month          = this.today.getMonth();
	this.year           = startyear;
	this.yearrangePREV		= yearrangePREV;
	this.yearrangeFF		= yearrangeFF;
	this.objName        = objName;
	this.callbackFunc   = callbackFunc;
	this.imagesPath     = pathtotemplate + 'img/kalendarz/';
	this.layerID        = 'kalendarz_layer_' + kalendarz_layers.length;
	this.currentMonth   = this.month;
	this.currentYear    = this.year;
	this.show              = kalendarz_show;
	this.writeHTML         = kalendarz_writeHTML;
	this._getLayer         = kalendarz_getLayer;
	this._hideLayer        = kalendarz_hideLayer;
	this._showLayer        = kalendarz_showLayer;
	this._setLayerPosition = kalendarz_setLayerPosition;
	this._setHTML          = kalendarz_setHTML;
	this._getDaysInMonth   = kalendarz_getDaysInMonth;
	this._mouseover        = kalendarz_mouseover;
	kalendarz_layers[kalendarz_layers.length] = this;
	this.writeHTML();
}
function kalendarz_show()
{
	var month, year, monthnames, numdays, thisMonth, firstOfMonth;
	var ret, row, i, cssClass, linkHTML, previousMonth, previousYear;
	var nextMonth, nextYear, prevImgHTML, prevLinkHTML, nextImgHTML, nextLinkHTML;
	var monthComboOptions, monthCombo, yearComboOptions, yearCombo, html;
	this.currentMonth = month = arguments[0] != null ? arguments[0] : this.currentMonth;
	this.currentYear  = year  = arguments[1] != null ? arguments[1] : this.currentYear;
	monthnames = new Array('Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień');
	numdays    = this._getDaysInMonth(month, year);
	thisMonth    = new Date(year, month, 1);
	firstOfMonth = thisMonth.getDay();
	ret = new Array(new Array());
	for(i=0; i<firstOfMonth; i++){
		ret[0][ret[0].length] = '<td>&nbsp;</td>';
	}
	row = 0;
	i   = 1;
	while(i <= numdays){
		if(ret[row].length == 7){
			ret[++row] = new Array();
		}
		cssClass = (i == this.date && month == this.month && year == this.year) ? 'kalendarz_today' : 'kalendarz_day';
		ret[row][ret[row].length] = '<td align="center" class="' + cssClass + '" bgColor=\'#FFFFFF\' onMouseout="this.bgColor=\'#FFFFFF\', this.style.color=\'#000000\'" onMouseover="style.cursor=\'pointer\', this.bgColor=\'#C70000\', this.style.color=\'#FFFFFF\'" ><a class="kalendarz_a" href="javascript: ' + this.callbackFunc + '(' + i + ', ' + (Number(month) + 1) + ', ' + year + '); ' + this.objName + '._hideLayer()" >' + (i++) + '</a></td>';

//		ret[row][ret[row].length] = '<td align="center" class="' + cssClass + '">' + linkHTML + '</td>';
	}
	for(i=0; i<ret.length; i++){
		ret[i] = ret[i].join('\n') + '\n';
	}
	previousYear  = thisMonth.getFullYear();
	previousMonth = thisMonth.getMonth() - 1;
	if(previousMonth < 0){
		previousMonth = 11;
		previousYear--;
	}
	nextYear  = thisMonth.getFullYear();
	nextMonth = thisMonth.getMonth() + 1;
	if(nextMonth > 11){
		nextMonth = 0;
		nextYear++;
	}
	prevImgHTML  = '<img src="' + this.imagesPath + 'prev.gif" alt="<<" border="0" />';
	prevLinkHTML = '<a href="javascript: ' + this.objName + '.show(' + previousMonth + ', ' + previousYear + ')">' + prevImgHTML + '</a>';
	nextImgHTML  = '<img src="' + this.imagesPath + 'next.gif" alt=">>" border="0" />';
	nextLinkHTML = '<a href="javascript: ' + this.objName + '.show(' + nextMonth + ', ' + nextYear + ')">' + nextImgHTML + '</a>';
		monthComboOptions = '';
		for (i=0; i<12; i++) {
			selected = (i == thisMonth.getMonth() ? 'selected="selected"' : '');
			monthComboOptions += '<option value="' + i + '" ' + selected + '>' + monthnames[i] + '</option>';
		}
		monthCombo = '<select name="months" class="kalendarzselect" style="border: 0px groove" onchange="' + this.objName + '.show(this.options[this.selectedIndex].value, ' + this.objName + '.currentYear)">' + monthComboOptions + '</select>';
		yearComboOptions = '';
		for (i = thisMonth.getFullYear() - this.yearrangePREV; i <= (thisMonth.getFullYear() + this.yearrangeFF); i++) {
			selected = (i == thisMonth.getFullYear() ? 'selected="selected"' : '');
			yearComboOptions += '<option value="' + i + '" ' + selected + '>' + i + '</option>';
		}
		yearCombo = '<select class="kalendarzselect" style="border: 0px groove" name="years" onchange="' + this.objName + '.show(' + this.objName + '.currentMonth, this.options[this.selectedIndex].value)">' + yearComboOptions + '</select>';
	html = '<table border="0" cellspacing="2" cellpadding="0">';
	html += '<tr><td class="kalendarz_header">' + prevLinkHTML + '</td><td colspan="5" align="center" class="kalendarz_header">' + monthCombo + ' ' + yearCombo + '</td><td align="right" class="kalendarz_header">' + nextLinkHTML + '</td></tr>';
	html += '<tr height="20">';
	html += '<td width="30" class="kalendarz_dayname"><img src="' + this.imagesPath + 'kal_ndz.gif" alt="Ndz" border="0"></td>';
	html += '<td width="30" class="kalendarz_dayname"><img src="' + this.imagesPath + 'kal_pon.gif" alt="Pon" border="0"></td>';
	html += '<td width="30" class="kalendarz_dayname"><img src="' + this.imagesPath + 'kal_wtr.gif" alt="Wtr" border="0"></td>';
	html += '<td width="30" class="kalendarz_dayname"><img src="' + this.imagesPath + 'kal_srd.gif" alt="Śrd" border="0"></td>';
	html += '<td width="30" class="kalendarz_dayname"><img src="' + this.imagesPath + 'kal_czw.gif" alt="Czw" border="0"></td>';
	html += '<td width="30" class="kalendarz_dayname"><img src="' + this.imagesPath + 'kal_pia.gif" alt="Pią" border="0"></td>';
	html += '<td width="30" class="kalendarz_dayname"><img src="' + this.imagesPath + 'kal_sob.gif" alt="Sob" border="0"></td></tr>';
	html += '<tr>' + ret.join('</tr>\n<tr>') + '</tr>';
	html += '</table>';
	this._setHTML(html);
	if (!arguments[0] && !arguments[1]) {
		this._showLayer();
		this._setLayerPosition();
	}
}
function kalendarz_writeHTML()
{
		document.write('<a href="javascript: ' + this.objName + '.show()"><img src="' + this.imagesPath + 'kalendarz.gif" border="0"></a>');
		document.write('<div class="kalendarz" id="' + this.layerID + '" onmouseover="' + this.objName + '._mouseover(true)" onmouseout="' + this.objName + '._mouseover(false)"></div>');
}
function kalendarz_getLayer()
{
	var layerID = this.layerID;
	if (document.getElementById(layerID)) {
		return document.getElementById(layerID);
	} else if (document.all(layerID)) {
		return document.all(layerID);
	}
}
function kalendarz_hideLayer()
{
	this._getLayer().style.visibility = 'hidden';
}
function kalendarz_showLayer()
{
	this._getLayer().style.visibility = 'visible';
}
function kalendarz_setLayerPosition()
{
	this._getLayer().style.top  = (kalendarz_mouseY + 5) + 'px';
	this._getLayer().style.left = (kalendarz_mouseX + 5) + 'px';
}
function kalendarz_setHTML(html)
{
	this._getLayer().innerHTML = html;
}
function kalendarz_getDaysInMonth(month, year)
{
	monthdays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if (month != 1) {
		return monthdays[month];
	} else {
		return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ? 29 : 28);
	}
}
function kalendarz_mouseover(status)
{
	kalendarz_mouseoverStatus = status;
	return true;
}
kalendarz_oldOnmousemove = document.onmousemove ? document.onmousemove : new Function;
document.onmousemove = function ()
{
		if (arguments[0]) {
			kalendarz_mouseX = arguments[0].pageX;
			kalendarz_mouseY = arguments[0].pageY;
		} else {
			kalendarz_mouseX = event.clientX + document.body.scrollLeft;
			kalendarz_mouseY = event.clientY + document.body.scrollTop;
			arguments[0] = null;
		}
	
		kalendarz_oldOnmousemove();
}
kalendarz_oldOnclick = document.onclick ? document.onclick : new Function;
document.onclick = function ()
{
		if(!kalendarz_mouseoverStatus){
			for(i=0; i<kalendarz_layers.length; ++i){
				kalendarz_layers[i]._hideLayer();
			}
		}
		kalendarz_oldOnclick(arguments[0] ? arguments[0] : null);
}