﻿	var currentYear = currentMonth = currentDate = null;
	var currentInput = null;
	
	var daysName = ['Пон', 'Вто', 'Сря', 'Чет', 'Пет', 'Съб', 'Нед'];
	var monthName = [
		'Януари',
		'Февруари',
		'Март',
		'Април',
		'Май',
		'Юни',
		'Юли',
		'Август',
		'Септември',
		'Октомври',
		'Ноември',
		'Декември'
	];
	
	function getFirstDayInMonth(year, month)
	{
		var day = new Date(year, month, 1).getDay() - 1;
		
		return (day == -1) ? 6 : day;
	}
	
	function getDaysInMonth(year, month)
	{
		return new Date(year, ++month, 0).getDate();
	}
	
	function renderCalendar(year_title, month_title, calendar_content)
	{
		document.getElementById(year_title).innerHTML = currentYear;
		document.getElementById(month_title).innerHTML = monthName[currentMonth];
			
		var calCode = '<table id="content_calendar" cellspacing="0" cellpadding="0"><tr>';
		
		for (var i = 0; i < daysName.length; i++)
		{
			calCode += '<td class="daysName">' + daysName[i] + '</td>';
		}
		
		var firstDay = getFirstDayInMonth(currentYear, currentMonth);
		var daysMonth = getDaysInMonth(currentYear, currentMonth);
		
		if (currentDate > daysMonth) currentDate = daysMonth;
		
		for (var i = 0, day = 1, j = 1; i < 42; i++, j++)
		{
			if (i % 7 == 0)
			{
				calCode += '</tr><tr>';
				j = 0;
			}
			
			if (i >= firstDay && day <= daysMonth)
			{
				calCode += '<td '+ (j == 5 || j == 6 ? 'class="weekendDay"' : '') +' onmouseover="changeBgColor(this, \'#595959\')" onmouseout="changeBgColor(this, \'\')" onclick="setActiveDate(this)" ' +(day == currentDate ? 'id="active_day"' : '') +' style="cursor: pointer;">' + (day++) + '</td>';
				continue;
			}
			
			calCode += '<td></td>';
		}
		
		document.getElementById(calendar_content).innerHTML = calCode + '</tr></table>';
	}
	
	function moveUpDownProperty(property, step)
	{
		window[property] += step;
		
		if (property == 'currentMonth')
		{
			if (currentMonth > 11)
			{
				currentMonth = 0;
				currentYear ++;
			}
			if (currentMonth < 0)
			{
				currentMonth = 11;
				currentYear --;
			}
		}
		
		renderCalendar('year_title', 'month_title', 'calendarInner');
	}
	
	function setActiveDate(sender)
	{
		if (sender.id != 'active_day')
		{
			document.getElementById('active_day').id = '';
			sender.id = 'active_day';
			currentDate = parseInt(sender.firstChild.data);
		}
	}
	
	function showCalendar(sender)
	{
		var obj = document.getElementById('calendar_container');
		if (obj.style.display != 'block')
		{
			currentInput = sender;
			parseDateFromInput();
			sender.parentNode.style.zIndex = 100000;
			sender.parentNode.insertBefore(obj, sender.parentNode.lastChild);
			obj.style.display = 'block';
			renderCalendar('year_title', 'month_title', 'calendarInner');
		}
	}
	
	function hideCalendar(flag)
	{
		(!flag) ? parseDateFromInput() : setValueInput();
		
		var obj = document.getElementById('calendar_container');
			obj.style.display = '';
			obj.parentNode.style.zIndex = '';
	}
	
	function fixedDigit(sender)
	{
		if (sender < 10) return '0' + sender;
		
		return sender;
	}
	
	function setValueInput()
	{
		currentInput.value = fixedDigit(currentDate) + '.' + fixedDigit(currentMonth + 1) + '.' + currentYear;
	}
	
	function parseDateFromInput()
	{
		var arrDate = currentInput.value.split(".");
			currentDate = new Number(arrDate[0]);
			currentMonth = new Number(arrDate[1]) - 1;
			currentYear = new Number(arrDate[2]);
	}
	
	function changeBgColor(sender, color)
	{
		sender.style.backgroundColor = color;
	}