//*******************************************************************************************************//
//*********************************************** JS - календарь ****************************************//
//**************************************** Сделано в Контеграл, 2006 ************************************//
//*******************************************************************************************************//

var IE = (document.all) ? false : true; 		// IE-Based браузер
var NN = (document.layers) ? true : false; 		// Netscape-браузер

var calendarWinSize								= [160,120];	// Размеры окна JS-календаря

//*********************************************** Названия месяцев **************************************//
var calendarMonths 								= ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'];

//******************************************* Названия дней недели **************************************//
var calendarWeek 								= ['Пн','Вт','Ср','Чт','Пт','Сб','Вс'];

//***************************************** Количество дней в месяцах ***********************************//
var calendarMonthDays 							= [31,28,31,30,31,30,31,31,30,31,30,31];


var currentInput 								= null;

var today										= new Date();

var yearFrom									= today.getFullYear() - 2;
var yearTo										= today.getFullYear() + 2;

var useEffects 									= false;	// Эффект перемещения в MSIE
var calendarOpacity 							= 100;		// Итоговое значение opasity в MSIE
var calendarOpacitySteps 						= 10;		// Число шагов при изменении opasity в MSIE

if (NN)
	document.write('<layer id="myCalendar" visibility="hide" bgcolor="#dddddd"><br></layer>');
else
	document.write('<div id="myCalendar" class="popup" style="visibility: visible; position: absolute; display: none; background-color: #6699FF;"></div>');


//*******************************************************************************************************//

function calendarGetDate(dateButton, dateField) 
	{
	calendarPositionX 							= (NN) ? dateButton.x : dateButton.offsetLeft; 

	calendarPositionY 							= (NN) ? dateButton.y : dateButton.offsetTop + dateButton.offsetHeight;

	for(element	= dateButton.offsetParent; element != null; element=element.offsetParent) 
		{
		calendarPositionX 						+= element.offsetLeft; 
		calendarPositionY 						+= element.offsetTop;
		}

	if(!NN) 
		{
		bodyWidth 								= (IE) ? document.body.offsetWidth : document.body.clientWidth-5;
	
		while ((calendarPositionX > 0) && ((calendarPositionX + calendarWinSize[0]) > bodyWidth)) calendarPositionX--;
		}

	currentInput 								= (IE) ? dateField : dateField.name;
	currentDate 								= dateField.value.split("."); 
	today 										= new Date();

	currentDate[1] 								= parseInt(currentDate[1]); 
	currentDate[2] 								= parseInt(currentDate[2]);
	
	if (currentDate[1]);

	calendarFill((((currentDate[1] >= 1) && (currentDate[1] <= 12)) ? (currentDate[1] - 1) : today.getMonth()), ((currentDate[2] >= 1900) ? currentDate[2] : today.getFullYear()));

	objCalendar									= (NN) ? document.layers.myCalendar : (IE) ? document.getElementById('myCalendar') : document.all.myCalendar;

	if (NN) 
		{
		objCalendar.left 						= calendarPositionX; 
		objCalendar.top 						= calendarPositionY;
		objCalendar.visibility 					= 'show';
		} 
	else 
		{
		objCalendar.style.left 					= calendarPositionX; 
		objCalendar.style.top 					= calendarPositionY;

		if (IE || ((!IE) && (!useEffects)))
			objCalendar.style.display 			= 'block'; 
		else 
			calendarTransitShow(true, 0);
		}

	return false;
	}



//*******************************************************************************************************//

function calendarTransitShow(isShow, step) 
	{
	obj 										= document.all.myCalendar;

	opacityStart								= (isShow) ? 0 : calendarOpacity;
	opacityEnd 									= (isShow) ? calendarOpacity : 0;

	if(!step) 
		{
		obj.style.filter 						= 'alpha(opacity=' + opacityStart + ')';
		obj.style.display 						= '';

		setTimeout('calendarTransitShow(' + isShow + ',' + (step + 1) + ')', 1);
		} 
	else if (step <= (calendarOpacitySteps + 1)) 
		{
		opacity 								= parseInt( (opacityStart - opacityEnd) * (step - 1) / calendarOpacitySteps );

		if(opacity < 0) opacity 				= -opacity;
		if(!isShow) opacity 					= 100 - opacity;

		obj.style.filter 						= 'alpha(opacity=' + opacity + ')';

		setTimeout('calTransitShow(' + isShow + ',' + (step + 1) + ')', 1);
		} 
	else 
		{
		obj.style.display 						= (isShow) ? '' : 'none';
		}
	}



//*******************************************************************************************************//

function calendarExit(D, M, Y) 
	{
	if (NN) 
		{
		with (document.layers.myCalendar.document) 
			{
			open('text/html'); 
			write('<br>'); 
			close();
			}

		document.layers.myCalendar.visibility 	= "hide";
		} 
	else 
		{
		obj 									= document.getElementById('myCalendar');

		if(IE || (!IE && !useEffects)) 
			obj.style.display 					= 'none'; 
		else 
			calendarTransitShow(false, 0);
		}
	
	if (currentInput && D && (++M) && Y) 
		{
		currentInputObj 						= (IE) ? currentInput : document.all[currentInput];
		currentInputObj.value 					= ((D < 10) ? '0' : '') + D + "." + ((M < 10) ? '0' : '') + M + "." + Y;
		}

	return false;
	}




//*******************************************************************************************************//

function calendarFill(M, Y) 
	{
	dateNew										= new Date(Y, M, 0);

	weekNew 									= dateNew.getDay(); 
	monthDays 									= calendarMonthDays[M] + (((M == 1) && (!(Y % 4))) ? 1 : 0);

	objCalendar									= (NN) ? document.layers.myCalendar : (IE) ? document.getElementById('myCalendar') : document.all.myCalendar;

	if(NN) 
		{
		objCalendar.width 						= calendarWinSize[0]; 
		objCalendar.height 						= calendarWinSize[1] + (((monthDays + weekNew) > 35) ? 16 : 0);	
		} 
	else 
		{
		objCalendar.style.width 				= calendarWinSize[0]; 
		objCalendar.style.height 				= calendarWinSize[1] + (((monthDays + weekNew) > 35) ? 16 : 0);
		}

	OUTPUT										='';


	if (NN) 
		{
		OUTPUT 									+= '<table border="1" width="' + (4 + calendarWinSize[0]) + '" cellspacing="1" cellpadding="0">' +
													'<tr><th>' + 
													'<div>' +
													'<A href="javascript: onclick=\'return calendarFill(' + ((M > 0) ? M - 1 : 11 ) + ',' + Y + ');\'">&lt;&lt;&nbsp;</A>' +
													calendarMonths[M] +
													'<A href="javascript: onclick=\'return calendarFill(' + ((M < 11) ? M + 1:0) + ',' + Y + ');\'">&nbsp;&gt;&gt;</A>' + 
													'</div>' +
													'</th><th>' +
													'<div>' + 
													'<A href="javascript: onclick=\'return calendarFill(' + M + ',' + (Y - 1) + ');\'">&lt;&lt;&nbsp;</A>' +
													Y + 
													'<A href="javascript: onclick=\'return calendarFill(' + M + ',' + (Y + 1) + ');\'">&nbsp;&gt;&gt;</A>' +
													'</div>' +
													'</th><th>' + 
													'<A href="javascript: onclick=\'return calendarExit(0,0,0);\'"><img src="'+ myConfig.img_dir + '/close.gif" border="0"></A>' +
													'</th></tr></table>';
		} 
	else 
		{
		OUTPUT 									+= '<table border="0" width="100%" cellspacing="0" cellpadding="0">' +
													'<tr>' +
														'<td class="popupTitleBG"><DIV class="popupTitle">Календарь</DIV></td>' +
														'<td width="1%" align="right" class="popupTitleBG">' +
														'<A ' + ((IE) ? 'href=\'javascript: ' : '') + 'style="cursor: hand;" onClick="return calendarExit(0,0,0);" title="Выход"><img src="'+ myConfig.img_dir + '/close.gif" border="0"></A><BR>' +
														'</td>' +
													'</tr>' +
													'<tr>' +
														'<td width="50%">' +
														'<select name="calendarMonth" class="textField1" style="width: 93px;" onChange="calendarFill(this.value,' + Y + ')">';

		for(i = 0; i < 12; i++) 
			OUTPUT 								+= '<option value="' + i + '"' + ((i == M) ? ' selected' : '') + '>' + calendarMonths[i] + '</option>';


		OUTPUT 									+= '</select>' +
													'</td><td width="10%" colspan="2">' + 
													'<select name="calendarYear" class="textField1" style="width: 65px;" onChange="calendarFill(' + M + ',this.value)">';


		for(i = yearFrom; i <= yearTo; i++) 
			OUTPUT 								+= '<option value="' + i + '"' + ((i == Y) ? ' selected' : '') + '>' + i + '</option>';

		OUTPUT 									+= '</select>' +
													'</td>' +
													'</tr></table>';
		}


	OUTPUT 										+= '<table width="' + ((NN) ? 4 + calendarWinSize[0] : '100%') + '" border="' + ((NN) ? 1 : 0) + '" cellspacing="1" cellpadding="0" cols="7"><tr>';

	for(i = 0; i < 7; i++) 
		OUTPUT 									+= ((NN) ? '<td align="center">' + calendarWeek[i] + '</td>' : '<td align="center"><div style="color: #FF6600;"><B>' + calendarWeek[i] + '</B></div></td>');

	OUTPUT 										+= '</TR>';

	if (weekNew > 0) 
		{
		OUTPUT 									+= '<TR>';

		for(dayCount = 0; dayCount < weekNew; dayCount++) 
			OUTPUT 								+= '<TD></TD>'; 
		} 
	else 
		dayCount 								= 0;


	for(i = 0; i < 31; i++) 
		{
		if (i >= monthDays) 
			break;
		
		if (!(dayCount % 7)) 
			{
			if (dayCount > 0) 
				OUTPUT 							+= '</TR>';
	
			OUTPUT 								+= '<TR>';
			}

		OUTPUT 									+= '<TD align="center">';
		OUTPUT									+= '<A style="cursor: hand;" ' + ((IE|NN) ? 'href="javascript: void(0)" ' : '') + 'onClick="return calendarExit(' + (i + 1) + ',' + M + ',' + Y + ');">' + (i + 1) + '</A></TD>';

		dayCount++;
		}

	OUTPUT 										+= '</tr></table>';

	if (NN) 
		{
		with(document.layers.myCalendar.document) 
			{
			open("text/html"); write(OUTPUT); close();
			}
		} 
	else 
		{
		obj = (IE) ? document.getElementById('myCalendar') : document.all.myCalendar;
		obj.innerHTML 							= OUTPUT;
		}
	
	return false;

	}
