// Календарь
var aMonthNames = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
var CalObj = null;
var oldHandler = null;
var calset = false;
var now    = new Date();

function CalIni(){
	html = '<STYLE>'+
	'input.calendar {font-family: tahoma, verdana; font-size: 11px;	height: 19px; width: 88px;}'+
	'input.calbutton {font-family: tahoma, verdana; position: relative; height: 17px; left: -21px; margin-right: -20px; top: -1px; width: 20px; font-size: 9px;}'+
	'#dCalendar {overflow: hidden; position:absolute; left:9px; top:40px; width:152px; height:167px; z-index:1; background-color: #ECE9D8; padding: 1px 1px 1px 1px; z-index: 300}'+
	'#dCalendar select {font-family: tahoma, verdana; font-size: 11px;}'+
	'#dCalendar td {font-family: tahoma, verdana; font-size: 11px; text-align: center;}'+
	'#dCalendar a{text-decoration: none; color: black; height: 18px; width: 18px; padding : 3px 1px 1px 1px; cursor: default;}'+
	'#dCalendar a:hover{background-color: #C1D2EE; padding : 2px 0px 1px 0px; border: 1px solid #316AC5;}'+
	'.in {border: 1px solid White; border-color : #ACA899 White White #ACA899; background-color: #FFFFFF;}'+
	'.out {border: 1px solid White; border-color : White #ACA899 #ACA899 White; background-color: #ECE9D8;}'+
	'</STYLE>'+
	
	'<DIV ID=dCalendar STYLE="display: none;" onClick="event.cancelBubble = true;"> '+
	'<TABLE WIDTH=100% BORDER=0 CELLSPACING=3 CELLPADDING=0 CLASS=out>'+
	'<TR><TD CLASS=in>'+
	
	'<TABLE WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2 CLASS=out ID=tCalNav>'+
	'<TR><TD WIDTH=18></TD><TD></TD><TD WIDTH=18></TD></TR>'+
	'</TABLE>'+
	
	'<TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=1 ID=tCalBody>'+
	'<TR><TD>Пн</TD><TD>Вт</TD><TD>Ср</TD><TD>Чт</TD><TD>Пт</TD><TD>Сб</TD><TD><FONT COLOR=#CC3300>Вс</FONT></TD></TR>'+
	'<TR><TD HEIGHT=1 COLSPAN=7 BGCOLOR=#ACA899></TD></TR>';
	for (var i = 0; i < 6; i++) html += '<TR><TD></TD><TD></TD><TD></TD><TD></TD><TD></TD><TD></TD><TD></TD></TR>';
	html += '</TABLE>'+
	
	'<TABLE ID=tSelectors WIDTH=100% BORDER=0 CELLSPACING=0 CELLPADDING=2 CLASS=out STYLE="display: none;">'+
	'<TR><TD></TD></TR>'+
	'</TABLE>'+
	
	'</TD></TR></TABLE>'+
	'</DIV>';
	document.write(html);
	calset = true;
}

function Calendar(name, value){
	if (!calset) {CalIni();}
	document.write('<SPAN STYLE="width: 88px; overflow: hidden;"><INPUT TYPE=text NAME=' + name + ' ondblclick="showCalendar(this);" VALUE="' + value + '" CLASS=calendar onSelectStart="is_editable = true;"><INPUT onClick="showCalendar(d[this.sourceIndex-1])" TYPE=button CLASS=calbutton VALUE=...></SPAN>');
}

function WeekRow(){
	if (!calset) {CalIni();alert('calendar');}
	document.write('<SPAN STYLE="width: 88px; overflow: hidden;"><INPUT TYPE=text NAME=' + name + ' ondblclick="showCalendar(this);" VALUE="' + value + '" CLASS=calendar onSelectStart="is_editable = true;"><INPUT onClick="showCalendar(d[this.sourceIndex-1])" TYPE=button CLASS=calbutton VALUE=...></SPAN>');
}

function showCalendar(obj){
	if (CalObj != obj) {
		CalObj = obj;
		var dateRE = /^(\d+)\D(\d+)\D(\d+)$/;
		var aDate = new Array();
		if (obj.value) aDate  = dateRE.exec(obj.value);
	
		var day   = aDate[1] ? parseInt(aDate[1], 10) : now.getDate();
		var month = aDate[2] ? parseInt(aDate[2], 10) : now.getMonth() + 1;
		var year  = aDate[3] ? parseInt(aDate[3], 10) : now.getFullYear();
		if (year < 100)  year += 2000;
		if (year > 2020) year += now.getFullYear();
		if (month > 12) month = 12;
		if (month < 1)  month = 1;
		if (day > getDaysInMonth(year, month)) day = getDaysInMonth(year, month);
		if (day < 1) day = 1;
		var selectors = '<SELECT ID=sMonth STYLE="width: 80px;" onChange="drawCalendar(sYear.selectedIndex + 2000, this.selectedIndex + 1)">';
		for (var i = 0; i < 12; i++){
			selectors += '<OPTION>' + aMonthNames[i];
		}
		selectors += '</SELECT> <SELECT ID=sYear STYLE="width: 50px;" onChange="drawCalendar(this.selectedIndex + 2000, sMonth.selectedIndex + 1)">';
		for (var i = 2000; i < 2006; i++) {
			selectors += '<OPTION>' + i;
		}
		selectors += '</SELECT>';
		d.tSelectors.rows[0].cells[0].innerHTML = selectors;
		var x = getLeft(CalObj) - 1;
		d.dCalendar.style.left = document.body.clientWidth > 200 && x < document.body.clientWidth - 150 ? x : x - 150 + CalObj.offsetWidth;
		d.dCalendar.style.top  = getTop(CalObj) + CalObj.offsetHeight - (d.dEditBar ? 28 : 0);
		drawCalendar(year, month, day);
		d.dCalendar.style.display = '';
		oldHandler = document.body.onclick;
		document.body.onclick = CalHide;

	}
	else {
		d.dCalendar.style.display = 'none';
		CalObj = null;
	}
	window.event.cancelBubble = true;
	return false;
}

function CalHide(){
	d.dCalendar.style.display = 'none';
	CalObj = null;
	document.body.onclick = oldHandler;	
}

function drawCalendar(year, month, day){
	if (year < 2000) year = 2000;
	if (month < 1)  {month = 12; year -= 1;}
	if (month > 12) {month = 1; year += 1;}
	var firstDay = new Date(year, month - 1, 1);
	var FD = firstDay.getDay();
	if (FD < 2) FD += 7;
	var prevMonthDays = getDaysInMonth(year, month - 1);
	var thisMonthDays = getDaysInMonth(year, month);
	d.sMonth.selectedIndex = month - 1;
	d.sYear.selectedIndex  = year - 2000;
	with (d.tCalNav.rows[0]){
		cells[0].innerHTML = '<A HREF=javascript:; onClick="drawCalendar(' + year + ',' + (month-1) + ',' + day + ');"><IMG SRC=_sk/img/prev.gif BORDER=0 WIDTH=12 HEIGHT=12></A>';
		cells[1].innerHTML = '<A HREF=javascript:; onClick="Selectors();" STYLE="width:86px;" TITLE="Выбрать месяц">' + aMonthNames[month-1] + '&nbsp;' +  year + '</A>';
		cells[2].innerHTML = '<A HREF=javascript:; onClick="drawCalendar(' + year + ',' + (month+1) + ',' + day + ');"><IMG SRC=_sk/img/next.gif BORDER=0 WIDTH=12 HEIGHT=12></A>';
	}
	var n = 1-FD;
	for (var w = 1; w <= 6; w++){
		for (var dw = 1; dw <= 7; dw++){
			n++;
			with (d.tCalBody.rows[w + 1].cells[dw-1]){
				if (n < 1) {
					innerHTML = '<A HREF=javascript:; STYLE="color: #ACA899;" onClick="CalClick(' + year + ',' + (month-1) + ',' + (n +prevMonthDays) + ')">' + (n + prevMonthDays) + '</A>';
				}
				else if (n > thisMonthDays) {
					innerHTML = '<A HREF=javascript:; STYLE="color: #ACA899;" onClick="CalClick(' + year + ',' + (month+1) + ',' + (n - thisMonthDays) + ')">' + (n - thisMonthDays) + '</A>';
				}
				else {
					var sStyle = '';
					if (n == day) sStyle = 'padding : 2px 0px 1px 0px; border: 1px solid #800000; ';
					if (dw == 7)  sStyle += 'color: #CC3300;';
					if (sStyle)    sStyle = 'STYLE="' + sStyle + '"';
					innerHTML = '<A HREF=javascript:; onClick="CalClick(' + year + ',' + month + ',' + n + ')" ' + sStyle + '>' + n + '</A>';
				}
			}
		}
	}
}
function Selectors(){
	d.tSelectors.style.display = d.tSelectors.style.display == '' ? 'none' : '';
	d.dCalendar.style.height = d.tSelectors.style.display == '' ? 192 : 167;
}

function getDaysInMonth(year, month){
	var aDaysInMonth = [31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	return aDaysInMonth[month] + ((month == 2 && year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) ? 1 : 0);
}

function CalClick(year, month, day){
	CalObj.value = (day < 10 ? '0' + day : day) + '.' + (month < 10 ? '0' + month : month) + '.' + year;
	d.dCalendar.style.display = 'none';
	CalObj = null;
	window.event.cancelBubble = true;
}
