var monthNames = new Hash();
monthNames.set("1", "январь");
monthNames.set("2", "февраль");
monthNames.set("3", "март");
monthNames.set("4", "апрель");
monthNames.set("5", "май");
monthNames.set("6", "июнь");
monthNames.set("7", "июль");
monthNames.set("8", "август");
monthNames.set("9", "сентябрь");
monthNames.set("10", "октябрь");
monthNames.set("11", "ноябрь");
monthNames.set("12", "декабрь");

var monthNums = new Hash();
monthNums.set("январь", "1");
monthNums.set("февраль", "2");
monthNums.set("март", "3");
monthNums.set("апрель", "4");
monthNums.set("май", "5");
monthNums.set("июнь", "6");
monthNums.set("июль", "7");
monthNums.set("август", "8");
monthNums.set("сентябрь", "9");
monthNums.set("октябрь", "10");
monthNums.set("ноябрь", "11");
monthNums.set("декабрь", "12");


function buildCalendar(y, m) {
	var currentDate = new Date();
	currentDate.setYear(y);
	currentDate.setMonth(m);
	m = currentDate.getMonth();
	y = currentDate.getFullYear();
	var mn = (m + 1) % 12;
	var mp = (m + 11) % 12;
	var yn = (m == 11) ? y + 1 : y;
	var yp = (m == 0) ? y - 1 : y;

	var i;
	var j;

	var s = '<div class="week">';

	currentDate.setDate(1);
	var pre = (currentDate.getDay() == 0)? 6 : (currentDate.getDay()-1);
	if (pre > 0)
	{
	// previous month
		var d2 = new Date(0);
		d2.setYear(yp);
		var j = 33;
		while (--j >= 0) {
			d2.setMonth(mp);
			d2.setDate(j);
			if (d2.getMonth() == mp)
			break;
		}  

		var d = ''+yp+'-'+(mp+1>9?mp+1:'0'+(mp+1))+'-'+(i>9?i:'0'+i)+'';

		for (i = j - pre + 1; i <= j; ++i)

//			s += '<div class="digit'+(availDates.indexOf(d) > -1 ? '-a' : '')+' prev">'+(availDates.indexOf(d) > -1 ? '<a href="'+basePath+'/'+i+'-'+(mp+1)+'-'+yp+'">'+i+'</a>' : i)+'</div>';
			s += "<div class='digit'>&nbsp;</div>";
		if (pre == 7)
			s += '<div style="clear: both"></div></div><div class="week">';
	}

	var wend;

// this month

	for (currentDate.setDate(i = 1), j = currentDate.getDay(); currentDate.getMonth() == m; ++j, currentDate.setDate(++i)) {

		d = ''+y+'-'+((m+1)>9?(m+1):'0'+(m+1))+'-'+(i>9?i:'0'+i)+'';

		s += '<div class="digit'+(availDates.indexOf(d) > -1 ? '-a' : '')+(i == currDate && m == currMonth ? ' current' : '')+'">'+(availDates.indexOf(d) > -1 ? '<a href="'+basePath+'/'+i+'-'+(m+1)+'-'+y+'">'+i+'</a>' : i)+'</div>';
		wend = 0;
		if ((j % 7) == 0) { s += '<div style="clear: both"></div></div><div class="week">'; wend = 1; }
	}	

	if (!wend && 0)
	{
	// next month
		pre = (currentDate.getDay() == 0) ? 1 : (8 - currentDate.getDay());

		for (i = 1; i <= pre; ++i)

			s += '<div class="digit'+(availDates.indexOf(yn+'-'+((mn+1)>9?(mn+1):'0'+(mn+1))+'-'+(i>9?i:'0'+i)) > -1 ? '-a' : '')+' next">'+(availDates.indexOf(yn+'-'+((mn+1)>9?(mn+1):'0'+(mn+1))+'-'+(i>9?i:'0'+i)) > -1 ? '<a href="'+basePath+'/'+i+'-'+(mn+1)+'-'+yn+'">'+i+'</a>' : i)+'</div>';
	}

	s += '<div style="clear: both"></div></div>';
	$("monthName").update(monthNames.get(m + 1) + ", " + y);
	$("monthName").removeClassName("current");
	if (dispMonth == currMonth && !currDate && currMonth) {
		$("monthName").addClassName("current");
	}
	$("monthName").setAttribute("href", basePath+'/'+(m+1)+'-'+y);

	$("weeks").update(s);
}


function scrollCalendar(dir) {
	var currDate = new Date();

	dir > 0 ? dispMonth++ % 12 : dispMonth-- % 12;
//	if (dispMonth > 11) dispMonth = 0;
//	if (dispMonth < 0) dispMonth = 11;
	buildCalendar(dispYear, dispMonth);
}
