var calendar;
var objForm;

// Class --------------
	function Calendar()
	{
		this.date			= new Date();
		this.day			= this.date.getDate();
		this.monthToday		= this.date.getMonth();
		this.yearToday		= this.date.getFullYear();
		this.monthDisp		= this.monthToday;
		this.yearDisp		= this.yearToday;
		
		this.CgetToday		= C_getToday;
		this.CgetMonthToday = C_getMonthToday;
		this.CgetYearToday	= C_getYearToday;
		this.display		= display;
		this.divName        = "contCalendar";
		
		this.CgetDispMonth	= C_getDispMonth;	// �����, ������� ������ ������������ �� ���������
		this.CgetDispYear	= C_getDispYear;	// ���, ������� ������ ������������ �� ���������
		this.CsetNewMonth	= C_setNewMonth;
		this.CsetNewYear	= C_setNewYear;
		
		this.CgetTime		= C_getTime;		// ���������� �����
		this.CgetDays		= C_getDays;		// ���������� ���������� ���� � ������
		this.CgetMonth		= C_getMonth;		// ���������� �������� ������
		this.CgetYear		= C_getYear;		// ���������� ����� ����
		this.CgetLeapYear	= C_getLeapYear;	// ��������� ���������� �� ���
		this.CwriteCalendar = C_writeCalendar;	// ������ ���������
	}
	
// Method ----------------------------------------------
	function C_getToday()
	{ return this.day; }
// Method ----------------------------------------------
	function C_getMonthToday()
	{ return this.monthToday; }
// Method ----------------------------------------------
	function C_getYearToday()
	{ return this.yearToday }
// Method ----------------------------------------------
	function C_getDispMonth()
	{ return this.monthDisp; }
// Method ----------------------------------------------
	function C_getDispYear()
	{ return this.yearDisp;	}

	function C_setNewMonth(flag)
	{
		if(flag == true)
		{	
			if( parseInt(this.CgetDispMonth()) < 11 )
				this.monthDisp++;
			else
			{
				this.monthDisp = 0;
				this.yearDisp  = this.CgetYear( parseInt(this.CgetDispYear()+1) );
			}
		}
		else
		{
			if( parseInt(this.CgetDispMonth()) > 0 )
				this.monthDisp--;
			else
			{
				this.monthDisp = 11;
				this.yearDisp  = this.CgetYear( parseInt(this.CgetDispYear()-1) );
			}
		}
	}
// Method ----------------------------------------------	

	function C_setNewYear(flag)
	{
		if(flag == true)
		{	
			/*if( parseInt(this.CgetDispMonth()) < 11 )
				this.monthDisp++;
			else
			{
				this.monthDisp = 0;
				this.yearDisp  = this.CgetYear( parseInt(this.CgetDispYear()+1) );
			}*/
			this.yearDisp = this.CgetYear( parseInt(this.CgetDispYear()+1) );
		}
		else
		{
		    this.yearDisp = this.CgetYear( parseInt(this.CgetDispYear()-1) );
			/*if( parseInt(this.CgetDispMonth()) > 0 )
				this.monthDisp--;
			else
			{
				this.monthDisp = 11;
				this.yearDisp  = this.CgetYear( parseInt(this.CgetDispYear()-1) );
			}*/
		}
	}
	
	
// Method ----------------------------------------------
	function C_getTime()
	{
		var date   = new Date();
		var obj	   = document.getElementById("panelTime");
		
		var hour   = date.getHours()<10 ? "0"+date.getHours() : date.getHours();
		var minute = date.getMinutes()<10 ? "0"+date.getMinutes() : date.getMinutes();
		var second = date.getSeconds()<10 ? "0"+date.getSeconds() : date.getSeconds();
		
		
		var returnStr = hour + ":" + minute + ":" + second;

		return returnStr;
//		setTimeout("showTime()", 1000);	
	}
// Method ----------------------------------------------
	function C_getDays(month, year)
	{
		var arrDays = new Array(31, this.CgetLeapYear( this.CgetYear(year) ) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		
		return arrDays[month];
	}
// Method ----------------------------------------------
	function C_getMonth(month)
	{
		var arrMonth = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
		
		return arrMonth[month];
	}
// Method ----------------------------------------------
	function C_getLeapYear( year )
	{
		if (year % 4 == 0)
			return true;
		else
			return false;
	}
// Method ----------------------------------------------
	function C_getYear(year)
	{
		var date = new Date();
		
		if( year !== null )
			date.setFullYear(year);

		return date.getFullYear();
	}
	
	function display(flag)
	{	    
		var obj = document.getElementById(this.divName);
			flag == true ? obj.style.display = "block" : obj.style.display = "none";
	}
// Method ----------------------------------------------
	function C_writeCalendar( year, month )
	{		
		var contCal = document.getElementById(this.divName);		

//		alert(window.event)
//			contCal.style.left = event.clientX;
//			contCal.style.pop  = event.clientY;
		
		var setFirstDay 	= new Date(year, month, 1);
		var firstDay		= setFirstDay.getDay() + 1;
		var lastDay			= calendar.CgetDays(month, year)
		var cleanCell		= 1;		
		var numDayForWrite  = 1;
		
		var strInner = "<div style='background-color:#DEDEDE' class='calendarBackground'><table cellspacing='1' cellpadding='0' border='0'>\
			<tr><td  class='headCalendar'>";
		    strInner += "<a href='#' onClick='return prevYear()' title='Previous Month' class='next_prev'><</a>";
		    strInner += "<td align='center' class='MonthYearCalendar'>" + year + "</td><td class='headCalendar'><a href='#' onClick='return nextYear()' class='next_prev'>></a></td></tr>";
		    strInner += "</td></tr>";
			strInner += "<tr><td  class='headCalendar'>"
			if( calendar.CgetYearToday() == year)
			{ 
/*				if( calendar.CgetMonthToday() == month)
					strInner += "&nbsp;";
				else*/
					strInner += "<a href='#' onClick='return prevMonth()' title='Previous Month' class='next_prev'><</a>";
			}
			else
				strInner += "<a href='#' onClick='return prevMonth()' title='Previous Month' class='next_prev'><</a>";

			strInner += "</td><td align='center' class='MonthYearCalendar'>" + calendar.CgetMonth(month) +"</td><td class='headCalendar'><a href='#' onClick='return nextMonth()' class='next_prev'>></a></td></tr>\
			<tr><td>&nbsp;</td><td>\
				<table cellspacing='1' cellpadding='0' border='0'>\
				<tr><td class='headCalendar'>Su</td><td class='headCalendar'>M</td><td class='headCalendar'>T</td><td class='headCalendar'>W</td><td class='headCalendar'>Th</td><td class='headCalendar'>F</td><td class='headCalendar'>Sa</td></tr>";

				for (row = 1; row <= Math.ceil((lastDay + firstDay - 1) / 7); ++row)
				{
					strInner +=  "<tr>";
					
					for (col = 1; col <= 7; ++col)
					{
						if (numDayForWrite > lastDay)
							break
						
						if(cleanCell < firstDay)
						{
							strInner += "<td width='20' height='20'>&nbsp;</td>"
							cleanCell++
						}
						else
						{
							strInner += "<td class='dateCell' onMouseOver='MOV(this)' onMouseOut='MOT(this)' onClick='MC(this)'>";

								if(calendar.CgetToday() == numDayForWrite)
									strInner += "<strong>" + numDayForWrite + "</strong>";
								else
									strInner += numDayForWrite;
								
							strInner += "</td>";
							numDayForWrite++;
						}
					}
					strInner +=  "</tr>";
				}
			
			strInner += "</table></td><td>&nbsp;</td></tr></table>";
			strInner += "<div bgcolor='#999999' align='center'><a href='#' onClick='return closeCalendar()'><strong>Close</strong></a></div><br></div>";			
			contCal.innerHTML = strInner;			
			this.display(true);
	}
	

//---------------------
	function mainCalendar( elementForm,divName)
	{	    
		objForm = elementForm;
		if (null != calendar)
		{
		    alert("Please close old calendar before open new");
		    return false;
		}
		
		calendar = new Calendar();
		calendar.divName = divName;
		var date	 = new Date();
			calendar.CwriteCalendar( calendar.CgetDispYear(), calendar.CgetDispMonth() );
	}
	
	function closeCalendar()
	{	    
		calendar.display(false);
		calendar = null;
        return false;
	}
	
	function prevMonth()
	{
		calendar.CsetNewMonth(false);
		
			calendar.CwriteCalendar( calendar.CgetDispYear(), calendar.CgetDispMonth() );		
		return false;
	}
	
	function nextMonth()
	{
		calendar.CsetNewMonth(true);

			calendar.CwriteCalendar( calendar.CgetDispYear(), calendar.CgetDispMonth() );			
			return false;
	}
	
	function prevYear()
	{
		calendar.CsetNewYear(false);
		
			calendar.CwriteCalendar( calendar.CgetDispYear(), calendar.CgetDispMonth() );		
		return false;
	}
	
	function nextYear()
	{
		calendar.CsetNewYear(true);

			calendar.CwriteCalendar( calendar.CgetDispYear(), calendar.CgetDispMonth() );			
			return false;
	}
	
	function MOV(obj)
	{
		obj.style.backgroundColor = "#8A8A8A"
	}
	
	function MOT(obj)
	{
		obj.style.backgroundColor = ""
	}
	
	function MC(obj)
	{
		var date  = obj.innerHTML;
		var month = calendar.CgetDispMonth()+1;
		var clean = new RegExp("<[^>]*>", "g");	// ������ �� �����

			date = date.replace(clean, "");
		
		objForm.value = (month<10 ? "0"+month : month) + "/" + (date<10 ? "0"+date : date) + "/" + calendar.CgetDispYear();
		
		closeCalendar();
	}

