//Пока что не пригодился прослушиватель событий
Object.prototype.attachEvent = function(ev, hand)
{
	this.addEventListener(ev.indexOf("on") == 0 ? ev.replace("on","") : ev, hand, false);
}

var tempov;

function firstDay()
{
//	var this.data.tmp = this.data.getDate();
	this.data.setDate(1);
	return this.data.getDay();
}


//======== Вывод календаря =====//
function text()
{	
//	var monthColor = ()//

	var text = "";
	if(!document.getElementById('divKldr'))
	text += "<div id='divKldr' style='position:absolute; z-index:998; display:none'>\n";
	text += "<table id='tblKldr'>\n<tr>\n<td colspan=7>\n";
	text += "<table width='100%' class='monthTbl'>\n";
	text += "<tr>\n	<td><img src='/img/cal_left.png' onClick='kalendar.nextMonth(-1);' style='cursor:pointer;'></td>\n";

	text += "	<td>" + this.month[this.data.getMonth()] + " " + this.data.getFullYear() + "</td>\n";
	text += "	<td><img src='/img/cal_right.png' onClick='kalendar.nextMonth(1);' style='cursor:pointer;'></td>\n</tr>";
	text += "<tr>\n</table>\n";
	text += "</td>\n</tr>\n";

	for(var i=0; i<7; i++) //>
	{
		text += ((i>=5) ? "<td style='color:red'>" : "<td style='color:#1a97ea;'>") + this.dayOfWeek[i] + "</td>\n";
	}

	var k=1;
	var fist = this.firstDay();
	text += "</tr>\n";
	for(var i=0; i<this.nedeli; i++) //>
	{
		text += "	<tr>\n";
		for(var j=0; j<7; j++) //>
		{
			text += "		<td>";
			if(fist == 0) fist=7;
			if(j >= (fist-1) && i==0)
			{
				if(k == this.curDate && this.data.getFullYear() == this.curFullYear && 	this.curMonth == this.data.getMonth())	text += "<a href='#' onClick='kalendar.setDate(this.innerHTML); return false;' style='color:#1071b1; font-weight:bold; font-size:99%'>" + k + "</a>";
				else text += ((j >= 5) ? "<a href='#' onClick='kalendar.setDate(this.innerHTML); return false;' style='color:#ff3737'>" : "<a href='#' onClick='kalendar.setDate(this.innerHTML); return false;' class='weekend'>") + k + "</a>";
				k++;
			}
			else if(i>0 && k<=this.days[this.data.getMonth()]){
				if(k == this.curDate && this.data.getFullYear() == this.curFullYear && 	this.curMonth == this.data.getMonth())	text += "<a href='#' onClick='kalendar.setDate(this.innerHTML); return false;' style='color:#1071b1; font-weight:bold;font-size:99%'>" + k + "</a>";
				else text += ((j >= 5) ? "<a href='#' onClick='kalendar.setDate(this.innerHTML); return false;' style='color:#ff3737'>" : "<a href='#' onClick='kalendar.setDate(this.innerHTML); return false;' class='weekend'>") + k + "</a>";
				k++;

			} //>
			text += "</td>\n";
		}
		text += "	</tr>\n";
	}

	text += "</table>\n";
	text += "</div>\n";

	return text;
}

function nextMonth(num)
{
	this.data.setMonth(this.data.getMonth() + num);
	this.targCalc.innerHTML = this.text();
	this.move();

}

function move(callObj)
{
if(callObj)
{
	var top = 0;
	var left = 0;
	var rect = callObj.getBoundingClientRect();
	this.targCalc = document.getElementById('divKldr');
	if(callObj.offsetParent)
	{
		do
		{
			top += callObj.offsetTop;
		}
		while(callObj = callObj.offsetParent)
	}
	this.targCalc.style.top = top - rect.top + rect.bottom + 4 + "px";
	this.targCalc.style.left = rect.left + "px";
}
}

//======== Хрен его знает что тут пошло... лень придумывать дальше описание, опишу как-нить... =====//

function getId()
{
	this.targ = document.getElementById(this.id);
	return this.targ;
}

function getName()
{
	this.targ = document.getElementsByName(this.name)[0];
	return this.targ;
}

function setDate(obj, callObj)
{
	var pizdec = obj;
	var targ;
	document.getElementById("divKldr").style.display = (document.getElementById("divKldr").style.display=="none") ? "" : "none";
	if(typeof obj == "object") tempov = obj;
	else obj = tempov;

	obj.getName = getName;
	obj.getId = getId;

	if(obj.name) targ = obj.getName();
	else if(obj.id) targ = obj.getId();
	else alert("Не выбрано поле вставки {'name':'name1'} || {'id':'id1'}");	

	if(typeof pizdec != "object")
	{
		targ.value = mini(pizdec) + "." + mini(this.data.getMonth()+1) + "." + this.data.getFullYear();
		mini(pizdec);
	}

	function mini(num)
	{
		return num <= 9 ? "0" + num : num;
	}
	kalendar.move(callObj);
}





function drawCalc()
{
//======== Объява данных =====//
	this.data = new Date();
	
	this.firstDay = firstDay;
	this.text = text;
	this.move = move;
	this.nextMonth = nextMonth;
	this.curDate = this.data.getDate();
	this.curMonth = this.data.getMonth();
	this.curFullYear = this.data.getFullYear();
	this.setDate = setDate;

	this.month = ["Январь",
	"Февраль",
	"Март",
	"Апрель",
	"Май",
	"Июнь",
	"Июль",
	"Август",
	"Сентябрь",
	"Октябрь",
	"Ноябрь",
	"Декабрь"];

	this.days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

	this.dayOfWeek = ["Пн","Вт","Ср","Чт","Пт","Сб","Вс"];

	this.nedeli = parseInt(this.days[this.data.getMonth()]/7)+2;
}

var kalendar = new drawCalc();
document.write(kalendar.text());
kalendar.move();

//добавляем ко всему кроме инпута функцию скрытия календаря по клику в любое место
window.onload = function()
{
if(document.getElementById('divKldr')) //делать всё это порево, если календарь есть на странице.
	{
	document.getElementById("content").attachEvent("onclick", function(e){
		var srcElement = "srcElement"; //кроссбраузерная хрень, для обработки объектов вызвавших событие
		if(!e[srcElement]) srcElement = "target";
		if(document.getElementById('divKldr').style.display != "none" && e[srcElement].tagName != "INPUT")
		{
			var srcElement = "srcElement";
			if(!e[srcElement]) srcElement = "target";
			document.getElementById('divKldr').style.display = "none";
		}
	}, false);
	}
}
