function fAttachEvent(obj, ev, handler, useCapture) {if(obj.addEventListener) {obj.addEventListener(ev, handler, useCapture ? useCapture : false);} else if (obj.attachEvent) {obj.attachEvent('on' + ev, handler);} else {obj["on"+ev] = handler;}}
function de(o) {if(o) o.parentNode.removeChild(o);}
function ge(id) {return document.getElementById(id);}
function ce(elem, parent, params, styles) {var o = document.createElement(elem); if(parent) parent.appendChild(o); if(params) {for(var i in params){o[i] = params[i];}}if(styles){for(var i in styles){o.style[i] = styles[i];}}return o;}
function addZero(n) {if(n<10) return '0'+n; else return n;}

var MIN_CALENDAR_YEAR = 2000;

Date.prototype.lastday = function() {
	var d = new Date(this.getFullYear(), this.getMonth() + 1, 0);
	return d.getDate();
};

function getDateFromUrl(){
	var result = /\d{4}\-\d{2}\-\d{2}/.exec(window.location.href);
	if(result != null)
		return result[0];
	else
		return false;	
}

function initCalendar(el, link_prefix, link_postfix, href_until_today)
{
	if(href_until_today == NaN)
		href_until_today = true;
	var urlDate = getDateFromUrl();
	if(urlDate)
	{
		var urlYear = urlDate.substr(0,4);
		var urlMonth = urlDate.substr(5,2);
		var urlDay = urlDate.substr(8,2);
		//var d = new Date(urlYear, (urlMonth-1), urlDay);
	}
	var d = new Date();
	var cyear = parseInt(d.getFullYear());
	var cmonth = parseInt(d.getMonth());
	var cday = parseInt(d.getDate());

	function href(y, m, d)
	{
		if(y > cyear || (y == cyear && m > cmonth) || (y == cyear && m == cmonth && d >= cday))
			return d;

		if ((y==2000 && m<8) || (y==2000 && m==8 && d<=5))
			return d;
		
		if(y<2011 || (y == 2011 && m<=4 && d<=31))
			return '<a target="_blank" href="/gb.sema?d=' + y +'-'+ addZero(m+1) +'-'+ addZero(d) + '&p=a">'+ d +'</a>';
		else
			return '<a target="_blank" href="/guest/gb/'+ link_prefix + y +'-'+ addZero(m+1) +'-'+ addZero(d) + link_postfix +'">'+ d +'</a>';
	}
	
	var calendar = ge(el);
	var maxy = parseInt(d.getFullYear())

	var firstLaunch = (calendar.innerHTML == '');
	if(firstLaunch)
	{
		var year = cyear;
		var month = cmonth;

		var selectorF = ce('FORM', calendar, {onsubmit: function () {return false;}});

		var yearSelect = ce('select', selectorF);
		for(var y=MIN_CALENDAR_YEAR; y<=maxy; y++)
		{
			ce('OPTION', yearSelect, {value: y, innerHTML: y});
		}
		yearSelect.options[year-MIN_CALENDAR_YEAR].selected = true;
	
		var monthes = ['ßíâàðü', 'Ôåâðàëü', 'Ìàðò', 'Àïðåëü', 'Ìàé', 'Èþíü', 'Èþëü', 'Àâãóñò', 'Ñåíòÿáðü', 'Îêòÿáðü', 'Íîÿáðü', 'Äåêàáðü'];
		var monthSelect = ce('SELECT', selectorF);
		for (var m=0; m<monthes.length; m++)
		{
			ce('OPTION', monthSelect, {value: m, innerHTML: monthes[m]});
		}
		monthSelect.options[month].selected = true;
   
		monthSelect.onchange = function(){initCalendar(el, link_prefix, link_postfix)};
		yearSelect.onchange = function(){initCalendar(el, link_prefix, link_postfix)};
	}
	else
	{
		var yearSelect = calendar.firstChild.firstChild;
		var monthSelect = yearSelect.nextSibling;

		var year = parseInt(yearSelect.options[yearSelect.selectedIndex].value);
		var month = parseInt(monthSelect.options[monthSelect.selectedIndex].value);

		de(calendar.childNodes[1]);
	}
	var calendarTable = ce('TABLE', calendar);
	var weekdays = ["Ïí", "Âò", "Ñð", "×ò", "Ïò", "Ñá", "Âñ"];
	var tbody = ce('TBODY', calendarTable);
	for(var row=1; row<=7; row++)
	{
		var tr = ce('TR', tbody);
		for(var cell=1; cell<=7; cell++)
		{
			var td = ce((row==1 ? 'TH':'TD'), tr);
			if(cell == 6 || cell == 7)
				td.className = 'holid';
			if(row==1)
				td.innerHTML = weekdays[cell-1];
		}
	}

	var firstDay = new Date(year, month, 1);
	var firstDayWeekDay = firstDay.getDay();
	var monthDays = firstDay.lastday();
	var firstRowCells = calendarTable.rows[1].childNodes;
	var firstDayTd =  (firstDayWeekDay != 0) ? firstRowCells[firstDayWeekDay-1] : firstRowCells[6];
	firstDayTd.innerHTML = href(year,  month, 1);
	if(firstDayWeekDay == 0 || firstDayWeekDay == 6)
		firstDayTd.className = 'holid';

	var day = 2;
	if(firstDayWeekDay != 0)
	{
		for(var i = firstDayWeekDay; i<=(firstRowCells.length-1); i++)
		{
			firstRowCells[i].innerHTML = href(year, month, day);
			if(i==5 || i==6)
				firstRowCells[i].className = 'holid';
			day++;		
		}
	}
	for(var i=2; i<calendarTable.rows.length; i++)
	{
		var cells = calendarTable.rows[i].childNodes;
		var t = day;
		for(var c = 0; c < cells.length && day <= monthDays; c++)
		{
			cells[c].innerHTML = href(year, month, day);
			if(c==5 || c==6)
				cells[c].className = 'holid';
			day++;	
		}
	}
	if(calendarTable.rows[calendarTable.rows.length-1].firstChild.innerHTML == '')
		de(calendarTable.rows[calendarTable.rows.length-1]);
}
