var cal_parent = 'calendar_right';

function calendarMonthName(id)
{
	var months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
	return months[id];
}

function calendarDefineObjects(cPrefix, monthFilled)
{
	//создаём элементы
	var calBody = document.createElement('div');
	var calMonth = document.createElement('div');
	var calTable = document.createElement('table');
	//определение идентификаторов
	if (navigator.userAgent.indexOf('MSIE') != -1)
	{
		calBody.id = cPrefix + 'calBody';
		calMonth.id = cPrefix + 'calMonth';
		calTable.id = cPrefix + 'calTable';
	}
	else
	{
		calBody.setAttribute('id', cPrefix + 'calBody');
		calMonth.setAttribute('id', cPrefix + 'calMonth');
		calTable.setAttribute('id', cPrefix + 'calTable');
	}
	//цепляем оформление
	calBody.className = 'cal_body';
	calMonth.className = 'cal_month' + (monthFilled ? '_filled' : '');
	calTable.className = 'cal_table';
	//привязываем
	calBody.appendChild(calMonth);
	calBody.appendChild(calTable);
	if (document.getElementById(cal_parent))
	{
		document.getElementById(cal_parent).appendChild(calBody);
	}
}

function calendarSetTitle(calMonth,calYear,cPrefix,cTop,cRight,cBottom,cLeft,calHandler) {
	var calDate = new Date();
	calDate.setDate(1);
	if (!calMonth&&!calYear) {
		calMonth = calDate.getMonth();
	} else {
		calDate.setMonth(calMonth);
	}
	if (!calYear) {
		calYear = calDate.getFullYear();
	} else {
		calDate.setFullYear(calYear);
	}

	var calTable = document.getElementById(cPrefix+'calTable');
	if (calTable) {
		while(calTable.rows.length) calTable.deleteRow(0);
		calTable.style.textAlign = 'center';

		var cMonth, cYear;
		if (calDate.getMonth()==0) {
			cMonth = 11;
			cYear = calDate.getFullYear()-1;
		} else {
			cMonth = calDate.getMonth()-1;
			cYear = calDate.getFullYear();
		}
		var month = '<a href="javascript:calendarInit('+cMonth+','+cYear+',\''+cPrefix+'\','+cTop+','+cRight+','+cBottom+','+cLeft+',\''+calHandler+'\')" class="footer">&laquo;</a>&nbsp;';

		month += calendarMonthName(calMonth)+' '+calYear;

		if (calDate.getMonth()==11) {
			cMonth = 0;
			cYear = calDate.getFullYear()+1;
		} else {
			cMonth = calDate.getMonth()+1;
			cYear = calDate.getFullYear();
		}
		month += '&nbsp;<a href="javascript:calendarInit('+cMonth+','+cYear+',\''+cPrefix+'\','+cTop+','+cRight+','+cBottom+','+cLeft+',\''+calHandler+'\')" class="footer">&raquo;</a>&nbsp;';

		document.getElementById(cPrefix+'calMonth').innerHTML = month;

		var row = calTable.insertRow(calTable.rows.length);
		row.className = 'title';
		var cell = row.insertCell(0);
		cell.innerHTML = 'Вс';
		cell = row.insertCell(0);
		cell.innerHTML = 'Сб';
		cell = row.insertCell(0);
		cell.innerHTML = 'Пт';
		cell = row.insertCell(0);
		cell.innerHTML = 'Чт';
		cell = row.insertCell(0);
		cell.innerHTML = 'Ср';
		cell = row.insertCell(0);
		cell.innerHTML = 'Вт';
		cell = row.insertCell(0);
		cell.innerHTML = 'Пн';
	}
}

function calendarPrintTable(calMonth,calYear,cPrefix,calHandler) {
	var calDate = new Date();
	calDate.setDate(1);
	if (!calMonth&&!calYear) {
		calMonth = calDate.getMonth();
	} else {
		calDate.setMonth(calMonth);
	}
	if (!calYear) {
		calYear = calDate.getFullYear();
	} else {
		calDate.setFullYear(calYear);
	}
	var calTable = document.getElementById(cPrefix+'calTable');
	if (calTable) {
		var presentMonth = calDate.getMonth();
		calDate.setDate('-5');
		var print = 1;
		var i = 0;
		var row, cell, date, tempDate, calBool, b = 0;
		while (print) {
			if ((calDate.getMonth()==presentMonth+1&&i==0)||(calDate.getMonth()==0&&presentMonth==11&&i==0)) {
				print = 0;
			} else {
				if (!b) {
					while (calDate.getDay()!=1) calDate.setDate(calDate.getDate()+1);
					b = 1;
				}
				if (i==0) {
					row = calTable.insertRow(calTable.rows.length);
				}
				cell = row.insertCell(row.cells.length);
				calBool = 0;
				if ((calDate.getMonth()==presentMonth-1)||(calDate.getMonth()==presentMonth+1)||((calDate.getMonth()==0||calDate.getMonth()==10)&&presentMonth==11)||(calDate.getMonth()==11&&presentMonth==0)) {
					calBool = 1;
				}
				if (calBool) {
					/*cell.innerHTML = '<div style="display:none">'+calDate.getDate()+'.'+(calDate.getMonth()+1)+'.'+calDate.getFullYear()+'</div>'+calDate.getDate();*/
					cell.className = 'past';
				} else {
					cell.innerHTML = '<div style="display:none">' + (calDate.getDate() < 10 ? '0' + calDate.getDate() : calDate.getDate()) + '.' + ((calDate.getMonth() + 1) < 10 ? '0' + (calDate.getMonth() + 1) : (calDate.getMonth() + 1)) + '.' + calDate.getFullYear() + '</div>' + (calHandler ? '<a class="link" onclick="' + calHandler + '">' : '') + calDate.getDate() + (calHandler ? '</a>' : '');
				}
				tempDate = new Date();
				tempDate.setDate(tempDate.getDate()+1);
				tempDate.setHours(0);
				tempDate.setMinutes(0);
				date = new Date();
				if (calDate.getTime()<tempDate.getTime() && calDate.getMonth() == date.getMonth()) {
					cell.className += ' old';
				}
				if (calDate.getDay()==0||calDate.getDay()==6) {
					cell.className += ' free';
				}
				if (calDate.getDate()==date.getDate()&&calDate.getMonth()==date.getMonth()&&calDate.getYear==date.getYear) {
					cell.className += ' today';
					cell.setAttribute('title', 'Сегодня');
				}
				if (i==6) {
					i = -1;
				}
			}
			calDate.setDate(calDate.getDate()+1);
			i++;
		}

		if (calHandler)
		{
			row = calTable.insertRow(calTable.rows.length);
			cell = row.insertCell(row.cells.length);
			cell.colSpan = 7;
			cell.innerHTML = '<div style="display:none">00.00.0000</div><a class="link" onclick="' + calHandler + '">нет</a>';
		}
	}
}

function calendarSetPosition(cPrefix, cTop, cRight, cBottom, cLeft)
{
	var calBody = document.getElementById(cPrefix + 'calBody');

	if (calBody)
	{
		if (cTop)
		{
			calBody.style.top = cTop + 'px';
		}
		if (cRight)
		{
			calBody.style.right = cRight + 'px';
		}
		if (cBottom)
		{
			calBody.style.bottom = cBottom + 'px';
		}
		if (cLeft)
		{
			calBody.style.left = cLeft + 'px';
		}

		if (!cTop && !cRight && !cBottom && !cLeft)
		{
			calBody.style.position = 'static';
		}
	}
}

function calendarSetHolidays(calMonth,calYear,cPrefix) {
	var calDate = new Date();
	calDate.setDate(1);
	if (!calMonth&&!calYear) {
		calMonth = calDate.getMonth();
	}
	if (!calYear) {
		calYear = calDate.getFullYear();
	}
	var calTable = document.getElementById(cPrefix+'calTable');
	if (calTable) {
		$.ajax({
			url: "/ajax/holidays/" + calYear + "/" + (parseInt(calMonth) + 1),
			success: function(str){
				if (str) {
					var lines = calTable.getElementsByTagName('td');
					var j = str.split(';');
					var cell;
					var n;
					for (var i=0;i<lines.length;i++) {
						cell = lines[i].getElementsByTagName('div')[0];
						if (cell) {
							for(var o=0;o<j.length;o++) {
								n = j[o].split(':');
								if (cell.innerHTML==n[1]) {
									if (n[0]==1) {
										cell.parentNode.className += ' holiday';
										cell.parentNode.setAttribute('title',n[2]);
									} else if (n[0]==3) {
										cell.parentNode.className = cell.parentNode.className.replace("holiday","");
									} else if (n[0]==2) {
										cell.parentNode.className = 'preday';
										cell.parentNode.setAttribute('title','Сокращенный на 1 час рабочий день');
									}
								}
							}
						}
					}
				}
			}
		});
	}
}

function calendarSetNews(calMonth,calYear,cPrefix) {
	var calDate = new Date();
	calDate.setDate(1);
	if (!calMonth&&!calYear) {
		calMonth = calDate.getMonth();
	}
	if (!calYear) {
		calYear = calDate.getFullYear();
	}
	var calTable = document.getElementById(cPrefix+'calTable');
	if (calTable) {
		$.ajax({
			url: "/ajax/news/" + calYear + "/" + (parseInt(calMonth) + 1),
			success: function(str){
				if (str) {
					var lines = calTable.getElementsByTagName('td');
					var j = str.split(';');
					var cell, n, tit, link;
					for (var i=0;i<lines.length;i++) {
						cell = lines[i].getElementsByTagName('div')[0];
						if (cell) {
							for(var o=0;o<j.length;o++) {
								n = j[o].split(':');
								if (n[1] != '0' && cell.innerHTML == n[0]) {
									tit = cell.parentNode.getAttribute('title');

									if (tit) {
										cell.parentNode.setAttribute('title', tit + "; Новостей: " + n[1]);
									} else {
										cell.parentNode.setAttribute('title', "Новостей: " + n[1]);
									}

									link = document.createElement('<a>');
									link.setAttribute('href', '/news/date/' + n[0])
									link.innerHTML = lines[i].childNodes[1].nodeValue;

									lines[i].removeChild(lines[i].lastChild);
									lines[i].appendChild(link);
								}
							}
						}
					}
				}
			}
		});
	}
}

function calendarInit(calMonth,calYear,cPrefix,cTop,cRight,cBottom,cLeft,calHandler) {
	var calendar = document.getElementById(cPrefix+'calBody');
	var page = document.getElementById(cal_parent);
	if (calendar&&page) {
		page.removeChild(calendar);
	}
	if (!calHandler) {
		calHandler = '';
	}
	if (!cTop) {
		cTop = 0;
	}
	if (!cRight) {
		cRight = 0;
	}
	if (!cBottom) {
		cBottom = 0;
	}
	if (!cLeft) {
		cLeft = 0;
	}
	//инициализация календаря
	//#######################
	//определение объектов
	calendarDefineObjects(cPrefix, calHandler);
	//создание заголовка
	calendarSetTitle(calMonth,calYear,cPrefix,cTop,cRight,cBottom,cLeft,calHandler);
	//отрисовка календаря
	calendarPrintTable(calMonth,calYear,cPrefix,calHandler);
	calendarSetPosition(cPrefix,cTop,cRight,cBottom,cLeft);
	calendarSetHolidays(calMonth,calYear,cPrefix);
	calendarSetNews(calMonth,calYear,cPrefix);
}

function getCalDate(id, bObj, ajax, data)
{
	if (!bObj)
	{
		var cal = document.getElementById('date_calBody');
		if (cal)
		{
			cal.parentNode.removeChild(cal);
			return;
		}

		var dateBox = document.getElementById(id);
		if (dateBox)
		{
			var bLeft = 0, bTop = 0;
			bTop = $('#' + id).offset().top + $('#' + id).height();
			bLeft = $('#' + id).offset().left + $('#' + id).width() - 192;

			var date = new Date();
			calendar_id = id;
			calendarInit(date.getMonth(), date.getFullYear(), 'date_', bTop, '', '', bLeft, 'getCalDate(calendar_id, this, ' + ajax + ', ' + data + ')');
		}
	}
	else
	{
		var date = bObj.parentNode.getElementsByTagName('div')[0].innerHTML;
		var obj = document.getElementById(id);
		if (obj)
		{
			if (ajax)
			{
				changeDateAjax(data, date);
			}
			else
			{
				obj.value = date;
			}
		}

		var cal = document.getElementById('date_calBody');
		if (cal)
		{
			cal.parentNode.removeChild(cal);
		}
	}
}

function add() {
	if(navigator.appName == 'Netscape') {
		window.sidebar.addPanel (top.document.title, top.location.href, ' ' )
	}
	else {
		window.external.AddFavorite (top.location.href,top.document.title);
	}
}

