	var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	var days = new Array("S", "M", "T", "W", "T", "F", "S");
	
	today = new getToday();	
	var element_id;
	
	function getDays(month, year) 
	{
		// Test for leap year when February is selected.
		if (1 == month)
			return ((0 == year % 4) && (0 != (year % 100))) ||
				(0 == year % 400) ? 29 : 28;
		else
			return daysInMonth[month];
	}
	
	function getToday()
	{
		var dd;
		// Generate today's date.
		this.now = new Date();
		this.year = this.now.getFullYear() ; // Returned year XXXX
		this.month = this.now.getMonth();
		dd = this.now.getDate();
		if (dd < 10)
			this.day = "0" + dd;
		else
			this.day = dd;
	}
	
	 
	function newCalendar() 
	{
		var parseYear = parseInt(document.getElementById("year")  [document.getElementById("year").selectedIndex].text);
	 
		var newCal = new Date(parseYear , document.getElementById("month").selectedIndex, 1);
		var day = -1;
		var startDay = newCal.getDay();
		var daily = 0; 
	
		today = new getToday(); // 1st call
		if ((today.year == newCal.getFullYear() ) && (today.month == newCal.getMonth()))
		   day = today.day;
		// Cache the calendar table's tBody section, dayList.
		var tableCal = document.getElementById("dayList");
	
		var intDaysInMonth = getDays(newCal.getMonth(), newCal.getFullYear() );
	
		for (var intWeek = 0; intWeek < tableCal.rows.length;  intWeek++)
			for (var intDay = 0; intDay < tableCal.rows[intWeek].cells.length; intDay++)
			{
				var cell = tableCal.rows[intWeek].cells[intDay];
	
			  // Start counting days.
			  if ((intDay == startDay) && (0 == daily))
				 daily = 1;
	
			  // Highlight the current day.
			  cell.style.color = (day == daily) ? "red" : "";
			  if(day == daily)
			  {
					document.getElementById("todayday").innerHTML= "Today: " +  day + "/" + 
						(newCal.getMonth()+1) + "/" + newCal.getFullYear() ;
			  }
			  // Output the day number into the cell.
			  if ((daily > 0) && (daily <= intDaysInMonth))
				 cell.innerHTML = daily++;
			  else
				 cell.innerHTML = "";
		   }
	
	}
		  
		 function getTodayDay()
		 {
			var dd;
			var mm;

			dd = today.day;

			if ((today.month + 1) < 10)
				mm = "0" + (today.month + 1);
			else
				mm = (today.month + 1);

			document.getElementById(element_id).value = dd + "/" + mm + 
				"/" + today.year; 

			//document.all.calendar.style.visibility="hidden";
			document.getElementById("calendar").style.display = "none";
			document.getElementById("month").selectedIndex = today.month; 
			document.getElementById("year").selectedIndex = today.year - 1900;   
		 }
	 
		function getDate(evt) 
		 {
			var dd;
			var evtTarget;

			(evt) ? evt : ((window.event) ? window.event : "")

			if (document.all)
				evtTarget = evt.srcElement;
			else
				evtTarget = evt.target;
			
			// This code executes when the user clicks on a day
			// in the calendar.
			if ("td" == evtTarget.tagName.toLowerCase())
			   // Test whether day is valid.
			   if ("" != evtTarget.innerHTML)
			   { 
				 var mn = (document.getElementById("month").selectedIndex + 1).toString();
				 if (mn.length < 2)
				 	mn = "0" + mn;
				 var Year = document.getElementById("year") [document.getElementById("year").selectedIndex].text;
				 dd = evtTarget.innerHTML;
				 if (dd.length < 2)
				 	dd = "0" + dd;
				 document.getElementById(element_id).value = dd + "/" + mn + "/" + Year;
				 //document.all.calendar.style.visibility="hidden";
				 document.getElementById("calendar").style.display = "none";
			}
		 }
	 
	function getBodyOffsetX(el_name, shift)
	{
		var x;
		var y;
		x = 0;
		y = 0;
	
		var elem = document.getElementById(el_name);
		do 
		{
			x += elem.offsetLeft;
			y += elem.offsetTop;
			if (elem.tagName == "BODY")
				break;
			elem = elem.offsetParent; 
		} while  (1 > 0);
	
		shift[0] = (x + 5);
		shift[1] = y;
		return  x;
	}	
	
	function setCalendarOnElement(el_name)
	{
		if (el_name=="") 
		el_name = element_id;
		var shift = new Array(2);
		getBodyOffsetX(el_name, shift);
		var elem = document.getElementById("calendar");
		if (document.all)
		{
			elem.style.pixelLeft  = shift[0] + 80; //  - document.all.calendar.offsetLeft;

			if ((shift[1] + xHeight(elem) + 20) <= (xClientHeight() + document.documentElement.scrollTop))
			{
				elem.style.pixelTop = shift[1] + 25;
			}
			else
			{
				elem.style.pixelTop = ((shift[1] - xHeight(elem)) + 3);
			}
		}
		else
		{
			elem.style.left  = shift[0] + 'px'; //  - document.all.calendar.offsetLeft;

			if (((document.documentElement.scrollTop + xClientHeight()) - xHeight(elem)) >= shift[1])
			{
				elem.style.top = (shift[1] + 25) + 'px';
			}
			else
			{
				elem.style.top = (shift[1] - xHeight(elem)) + 'px';
			}
		}
	}
		  
		  
				   
	function showCalendar(elem_name)
	{
			if (elem_name=="")
			elem_name = element_id;
	
			element_id	= elem_name; // element_id is global variable
			newCalendar();
			//document.all.calendar.style.visibility = "visible";
			document.getElementById("calendar").style.display = "inline";
			setCalendarOnElement(element_id);
	}
	
	function hideCalendar()
	{
		//document.all.calendar.style.visibility="hidden";
		document.getElementById("calendar").style.display = "none";
	}
	
	function toggleCalendar(elem_name)
	{
		//if (document.all.calendar.style.visibility == "hidden")
		if(document.getElementById("calendar").style.display=="none")
			showCalendar(elem_name);
		else 
			hideCalendar();
	}
