function Calendar(year, month)
{
	var days = ["пн", "вт", "ср", "чт", "пт", "сб", "вс"]
	var months = ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"]
	var date = new Date()
	this.year = year || date.getFullYear()
	this.month = month? month-1: date.getMonth()
	this.GetHtml = function()
	{
		var dayscount = [31,((this.year%400==0)||(this.year%4==0 && this.year%100!=0))?29:28,31,30,31,30,31,31,30,31,30,31][this.month];
	
		var s = ""
		s += "<table class=calendar>"
		s += "<tr><td></td><td class=arrow id='calendar_minusyear'>&lt;&lt;</td> <td style='text-align: center;' colspan=3>"+this.year+"</td> <td class=arrow id='calendar_plusyear'>&gt;&gt;</td><td></td></tr>"
		s += "<tr><td></td><td class=arrow id='calendar_minusmonth'>&lt;&lt;</td> <td style='text-align: center;' colspan=3>"+months[this.month]+"</td> <td class=arrow id='calendar_plusmonth'>&gt;&gt;</td><td></td></tr>"
		var firstday = (new Date(this.year, this.month, 1, 0, 1)).getDay()
		if (!firstday) firstday=7;
				
		s += "<tr>"
		for (var j=0; j<5; j++) s += "<th class=day>"+days[j]+"</th>"
		for (var j=5; j<7; j++) s += "<th class=weekend>"+days[j]+"</th>"
		s += "</tr>"
		
		for (var i=0; i<6; i++)
		{
			s += "<tr>"
			for (var j=0; j<7; j++)
			{
				var daynum = 2 + j+7*i-firstday;
				if (daynum <=0 || daynum > dayscount) daynum = "";
				var cl = j>=5? "weekend": "day";
				var daynum2 = daynum>9? daynum: "0"+daynum;
				var month2 = (this.month+1)>9? (this.month+1): "0"+(this.month+1);
				var linkindex = daynum2+"_"+month2+"_"+this.year;
				if (calendar_links && calendar_links[linkindex])
				{
					daynum = "<a href='"+calendar_links[linkindex]+"'>"+daynum+"</a>";
				}
				s += "<td class="+cl+" style='text-align: center;' >"+daynum+"</td>"
				
			}
			s += "</tr>"
		}
		s += "</table>"
		return s
	}
	
	this.AttachTo = function(id_element)
	{
		this.el = document.getElementById(id_element);
		this.el.innerHTML = this.GetHtml();
		this.Init();
	}
	
	this.Refresh = function()
	{
		this.el.innerHTML = this.GetHtml();
		this.Init();
	}
	
	this.Init = function()
	{
		var thus = this;
		document.getElementById("calendar_minusyear").onclick = function()
		{
			if (thus.year >1971) thus.year--;
			thus.Refresh();
		}
		document.getElementById("calendar_plusyear").onclick = function()
		{
			if (thus.year < 2037) thus.year++;
			thus.Refresh();
		}
		document.getElementById("calendar_plusmonth").onclick = function()
		{
			if (thus.month == 11 && thus.year < 2037) thus.year++;
			thus.month = (thus.month + 1) % 12;
			thus.Refresh();
		}
		document.getElementById("calendar_minusmonth").onclick = function()
		{
			if (thus.month == 0 && thus.year >1971) thus.year--;
			thus.month = (thus.month + 11) % 12;
			thus.Refresh();
		}
	}
	
	var onunload = document.body.onunload;
	document.body.onunload = function()
	{
		if (document.getElementById("calendar_minusyear"))
		{
			document.getElementById("calendar_minusyear").onclick = null;
			document.getElementById("calendar_plusyear").onclick = null;
			document.getElementById("calendar_plusmonth").onclick = null;
			document.getElementById("calendar_minusmonth").onclick = null;
		}
		if (onunload) onunload();
		document.body.onunload = null;
	}
}