var x, y; 

var m_calendars = new Array();

var curObject = null;

var curCalendar = null;



function LoadCalendar(Year, Month, Day, DateMin, DateMax,owner_name) {



    var owner = document.getElementById(owner_name);

	if (!owner) return noOwner();

	var calendar = c_get(owner.getAttribute("calendar"));

	if (!calendar) return noCalendar();



	if (!DateMin) DateMin = new Date().setYear(new Date().getFullYear() - 100).valueOf();

	if (!DateMax) DateMax = new Date().setYear(new Date().getFullYear() + 100).valueOf();

	

	var objDateCurrent	= new Date(Year, Month, Day);

	var objDateMax		= new Date(DateMax);

	var objDateMin		= new Date(DateMin);



DateChoose = owner.getAttribute("DateChoose");



 

dd = new Date();

DateNow = dd.getDate() + ".";

DateNow += (dd.getMonth() + 1) + ".";

DateNow += dd.getYear();

//24.09.2003

if (DateChoose=='') DateChoose = DateNow;



var objDateChoose =  DateChoose;

var Day_Choose = objDateChoose.substring(0,2);

var Mon_Choose = objDateChoose.substring(3,5);

var Year_Choose = objDateChoose.substring(6,10);





	var objDate = new Date();



	var lDay = GetLastDay(Year, Month, Day);



	var fDay = GetFirstDayOfWeek(Year, Month);



	var bufStr = '<table border=0 class="CalendarWidth">';



	var DayCounter = 0;



	var Today = objDate.getDate();



	var DayCode = '<a href="#" class="DayRef" onclick="ApplyValue(\'';



	var NotValidDayCode = '<a href="#" class="DayNotValidRef" onclick="ApplyValue(\'';



	var bufDate ='';



	var arrowRef = '<a onclick="e=event; eventStop();" href="JavaScript:LoadCalendar(';







	bufStr += '<TR><TD colspan="7"><table border="0" width="100%"><TR>';



	bufStr += '<TD class="month">' + arrowRef + (Year) + ',' + ((Month > 1) ? Month-1:12) + ',' +  Day  + ',\'' + DateMin + '\',\'' + DateMax +  '\',' + '\'' + owner_name + '\');"><img src="img/calendar_left.gif" width="10" height="9" border="0"></a></TD>';



	bufStr += '<TD class="month" width="100%">' + Months[Month-1] + '</TD>';



	bufStr += '<TD class="month">' + arrowRef + (Year) + ',' + (Month < 12 ? Month + 1: 1) + ',' + Day + ',\'' + DateMin + '\',\'' + DateMax +  '\',' + '\'' + owner_name + '\');"><img src="img/calendar_right.gif" width="10" height="9" border="0"></a></TD>';



	bufStr += '<TD class="month" style="padding-left: 7">' + arrowRef + (Year - 1) + ',' + (Month) + ',' +  Day  + ',\'' + DateMin + '\',\'' + DateMax +  '\',' + '\'' + owner_name + '\');"><img src="img/calendar_left.gif" width="10" height="9" border="0"></a></TD>';



	bufStr += '<TD class="month">' + Year + '</TD>';



	bufStr += '<TD class="month">' + arrowRef + (Year + 1) + ',' + (Month) + ',' + Day + ',\'' + DateMin + '\',\'' + DateMax +  '\',' + '\'' + owner_name + '\');"><img src="img/calendar_right.gif" width="10" height="9" border="0"></a></TD>';



	bufStr += '</TR></table></TD></TR>';







	bufStr+= '<TR>';



	for (var i=0; i < Days.length; i++) {



		bufStr += '<TD class="topic">' + Days[i] + '</TD>';



	}



	



	bufStr+= '<TR>';				



	for (var i=1; i < fDay;i++){



		bufStr += '<TD></TD>';



		DayCounter++;



	}







	for (var i = 1; i < lDay+1; i++) {



//Именно тут формируем дату для по	 следующего ее использоваания а не отображения	



		bufDate = Year + '/' + Month + '/' +  i;



		var objDateBuff = new Date(bufDate);



	



		if (DayCounter == 7) {



			bufStr += '<TR>';



			DayCounter = 0;



		}







		DayCounter++;



		if (i != Day && i != Day_Choose) {



			var validDay = (objDateBuff.valueOf() >= objDateMin.valueOf()) && (objDateBuff.valueOf() <= objDateMax.valueOf());



			switch (DayCounter) {



				case 1: case 2: case 3: case 4: case 5: case 6:



					bufStr += '<TD  class="';



					bufStr += (validDay) ? 'day' : 'notValidDate';



					bufStr += '">';



					bufStr += (validDay) ? DayCode : NotValidDayCode;



					bufStr += bufDate + '\',\'' + owner_name + '\');">&nbsp;' + i + '&nbsp;</a></TD>';



					break;



				case 7:



					bufStr+= '<TD class="weekend">' + DayCode + bufDate + '\',\'' + owner_name + '\');">&nbsp;' + i + '&nbsp;</a></TD>';



			}



		} 



		else



		{//



		



		if(i == Day_Choose && i != Day) {



			bufStr+= '<TD class="ChooseDay">'+ DayCode + bufDate + '\',\'' + owner_name + '\');">&nbsp;' + i + '&nbsp;</a></TD>';



		}



		else {



			bufStr+= '<TD class="today">'+ DayCode + bufDate + '\',\'' + owner_name + '\');">&nbsp;' + i + '&nbsp;</a></TD>';



		}



		



		}//



		



	}



 d = new Date();



 s = d.getYear() + "/";



 s += (d.getMonth() + 1) + "/";



 s += d.getDate();



bufStr+= '<tr><TD colspan="8" class="today">'+ DayCode + s + '\',\'' + owner_name + '\');">&nbsp;' +'за сьогодні'+ '&nbsp;</a></TD></tr>';



	



	



	bufStr += '</TABLE>';



	calendar.innerHTML = bufStr;



}



		function GetLastDay(Year,Month){



			var	objDate = new Date(Year,Month,1);



		



			objDate.setDate(objDate.getDate()-1);



//!			



			//window.status = "GetLastDay : " + objDate.getDay()



//!	



		return objDate.getDate();



		}



   



		function GetFirstDayOfWeek(Year,Month){



			var bufStr = Month + '/' + 1 + '/' + Year;



			var objDate = new Date(bufStr);







//			objDate.setDate(Year,Month,1);



//!			



//			window.status = "GetFirstDayOfWeek : [y " + Year + " m " + Month+ "]  return "  + objDate.getDay();



//!



			if (objDate.getDay() > 0){



				return objDate.getDay();



			}else{



				return 7;



			}



		}



/*



                                 	



function GetLastDay(Year,Month) {



	var	objDate = new Date(Year,Month,1);



	objDate.setDate(objDate.getDate()-1);



	return objDate.getDate();



}







function GetFirstDayOfWeek(Year,Month) {



	var bufStr = Month + '/' + 1 + '/' + Year;



	var objDate = new Date(bufStr);



	objDate.setDate(Year, Month, 1);



	return (objDate.getDay() > 0) ? objDate.getDay() : 7;



}



	



*/



function ApplyValue(value, owner_name) {



	var d = new Date(value);



	var owner = document.getElementById(owner_name);



	if (!owner) return noOwner();



	var calendar = c_get(owner.getAttribute("calendar"));



	if (!calendar) return noCalendar();



	



	var DateMax = new Date(owner.getAttribute("DateMax"));



	var DateMin = new Date(owner.getAttribute("DateMin"));



	







	if (d.valueOf() > DateMax.valueOf() || d.valueOf() < DateMin.valueOf()) {



		var msg = new String(CAL_RES_STR_1);



		msg = msg.replace("%MAX%",DateMax.getDate() + ' ' + Month_[DateMax.getMonth()] + ' ' + DateMax.getFullYear() + ' СЂ.');



		msg = msg.replace("%MIN%",DateMin.getDate() + ' ' + Month_[DateMin.getMonth()] + ' ' + DateMin.getFullYear() + ' СЂ.');



		alert(msg.toString());



		return;







	}



	



	owner.setAttribute('DateValue', value);



	//owner.value = d.getDate() + ' ' + Month_[d.getMonth()] + ' ' + d.getFullYear() + ' ';



	//owner.value = d.getDate() + '.' + d.getMonth() + '.' + d.getFullYear() + ' ';



if (d.getDate()<10)



day = '0'+d.getDate().toString();



else



day = d.getDate().toString();







	owner.value = day + '.' + Month_Digit[d.getMonth()] + '.' + d.getFullYear() + '';



	



	if (!calendar.getAttribute("aot")) {



		c_hide();



	} else {



		ShowCalendar2(owner_name);



	}







fireEventChange(owner); // вместо onChange (под NN событие Change не возникает)







//alert('FormName');



//alert(TransferForm.action);



//alert(document.TransferForm.date_calendar.value);



//document.forms['TransferForm'].submit();



//TransferForm.submit();



}







// календарь прячущийся



function ShowCalendar(event, id) {



	var calendar = getCalendar(id);



	calendar.style.left = getCalendarX();



	calendar.style.top = getCalendarY();



	ShowCalendarCommon();



	e = event;



	eventStop();







}



// календарь открытый



function ShowCalendar2(id) {



	getCalendar(id);



	ShowCalendarCommon();



}



// запускает календарь



function ShowCalendarCommon() {



	var bufStr = new String(curObject.getAttribute("DateValue"));



	var bufDate = new Date(bufStr.valueOf());



	LoadCalendar(



					bufDate.getFullYear(),



					bufDate.getMonth()+1,



					bufDate.getDate(),



					curObject.getAttribute("DateMin"),



					curObject.getAttribute("DateMax"),



					curObject.id);



	c_show(curObject.getAttribute("calendar"));



}



// TOOLS



// ищет календарь, связанный с объектом 



function getCalendar(id) {



	curObject = document.getElementById(id);



	var calendar = c_get(curObject.getAttribute("calendar"));



	if (!calendar) return noCalendar()



	else return calendar;



}



//



function c_hide() {



	for (var i = 0; i < m_calendars.length; i++)



		m_calendars[i].style.display = "none";



}







function c_show(cal_name) {



	var c = c_get(cal_name);



	if (c) c.style.display = "block";	



}







function c_push(id) {



	m_calendars.push(document.getElementById(id));



    var o = m_calendars[0]; 



}







function c_get(cal_name) {



	for (var i = 0; i < m_calendars.length; i++) 



		if (m_calendars[i].id == cal_name) return m_calendars[i];



}



function noOwner() {



	alert("Calendar owner not found"); return false;



}



function noCalendar() {



	alert("Calendar not found"); return false;



}







