var target=null;
var today = new Date();
var monthNames = new Array(12); 
var dateType='date';
var iDelay = 500; // Delay to hide in milliseconds
var sDisplayTimer = null, oLastItem = null;
var calVisible = false;
monthNames[0] = "Jan";
monthNames[1] = "Feb";
monthNames[2] = "Mar";
monthNames[3] = "Apr";
monthNames[4] = "May";
monthNames[5] = "Jun";
monthNames[6] = "Jul";
monthNames[7] = "Aug";
monthNames[8] = "Sep";
monthNames[9] = "Oct";
monthNames[10] = "Nov";
monthNames[11] = "Dec";


function calendar(src,dest,dateformat){
	//alert('Calendar');
	if(calVisible){stopTimer();return;}
	var month = today.getMonth();
	var year = today.getFullYear();
	dateType = dateformat;
	window.calendarTarget = document.getElementById(src);
	//alert('window.calendarTarget : ' + window.calendarTarget.name);
	target= dest;
	window.calendarDiv = document.getElementById('calDiv');
	window.calendarFrame = document.getElementById('calFrame');
	createCal(month,year);
	showCalendar();
}	

function createCal(iMonth, iYear){
	var HeaderStr;
	var currDate;
	var currMonth;
	var pBody;
	var calBody;
	var nBody;
	var pMonth;
	var pYear;
	var ppYear;
	var nMonth;
	var nYear;
	var nnYear;
	var cMonth;
	var cYear;
	var pMonthDays;
	var cMonthDays;
	var nMonthDays;
	var pStart;
	var cStart;
	var dayCount;
	var rowCount;
	var iDate;
	var i,j,k;
	var today1;
	var timeSelect;
	var tmpDate;
	var tmpMonth;
	var nDays;

	tmpDate = new Date();
	tmpDate.setDate(1);
	tmpDate.setMonth(iMonth);
	tmpDate.setFullYear(iYear);
	
	today1 = today.getDate();//this is to validate the current day...
	cMonth = today.getMonth();
	cYear = today.getFullYear();
	
	if(iMonth == 11){
		nMonth = 0;
		nYear = iYear+1;
		pMonth = iMonth-1;
		pYear = iYear;
	}else{
		nMonth = iMonth+1;
		nYear = iYear;
		if(iMonth == 0){
			pMonth = 11;
			pYear = iYear - 1;
		}else{
			pMonth = iMonth - 1;
			pYear = iYear;
		}
	}
	
	ppYear = iYear - 1;
	nnYear = iYear + 1;
	pMonthDays = getMonthDays(pMonth, pYear);
	cMonthDays = getMonthDays(iMonth, iYear);
	nMonthDays = getMonthDays(nMonth, nYear);
	
	HeaderStr = "";
	HeaderStr = "<div id=div-calendar><table id=popup-calendar border=0 cellspacing=0 cellpadding=1>" +
				"<caption><a href=javascript:createCal(" + pMonth + "," + pYear + ") class='prev'>&#139;</a>" + 
				"<span>" + monthNames[iMonth] + "&nbsp;" + iYear + "</span>" +
				"<a href=javascript:createCal(" + nMonth + "," + nYear + ") class='next'>&#155;</a></caption>" + 
				"<tr><th>S</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th></tr>";
	//alert(HeaderStr);
	calBody = "<tr>";
	pStart = pMonthDays - tmpDate.getDay() + 1;
	tmpMonth = pMonth + 1;
	rowCount = 1;
	for(i=pStart;i<=pMonthDays;i++){
		calBody = calBody + 
				"<td><a class=old href=javascript:fillDate(" +
				tmpMonth + "," +
				i + "," +
				pYear + ",'" +
				target + "')>" +
				+ i + "</a></td>";
	}
	dayCount = tmpDate.getDay();
	tmpMonth = iMonth + 1;

	for(i=1;i<=cMonthDays;i++){
		if((i==today1) && (iMonth==cMonth) && (iYear==cYear)){
			calBody = calBody + 
				"<td class=today><a href=javascript:fillDate('" +
						tmpMonth + "','" +
						i + "','" +
						iYear + "','" +
						target + "')>" +
						+ i + "</a></td>";
		}else{
			calBody = calBody + 
				"<td><a href=javascript:fillDate('" +
						tmpMonth + "','" +
						i + "','" +
						iYear + "','" +
						target + "')>" +
						+ i + "</a></td>";
		}
		dayCount = dayCount + 1;
		if(dayCount%7 == 0){
			rowCount = rowCount + 1;
			//start on next row...
			calBody = calBody + "</tr><tr>";
		}
	}//end of for loop...
	k = dayCount%7;

	if(6-rowCount > 0)
		nDays = (6-rowCount+1) * 7 - k;
	else
		nDays = 7-k;
	tmpMonth = nMonth + 1;
//	for(i=1;i<=7-k;i++){
	for(i=1;i<=nDays;i++){
		calBody = calBody + 
				"<td><a class=old href=javascript:fillDate('" +
						tmpMonth + "','" +
						i + "','" +
						nYear + "','" +
						target + "')>" +
						+ i + "</a></td>";
		dayCount = dayCount + 1;
		if(dayCount%7 == 0){
			calBody = calBody + "</tr><tr>";
		}
	}
//	calBody = calBody + "</tr></table>";
	calBody = calBody + "</tr>";
	currMonth = today.getMonth() + 1;
/*	currDate = "<tr><td colspan=7 align=center class=last>" + 
				"<a href=javascript:fillDate('" +
					currMonth + "','" +
						today.getDate() + "','" +
						today.getFullYear() + "','" +
						target + "')>" +
							"Today" + "</a></td></tr>"; */
	currDate = "";						
	calBody = calBody + currDate + "</table></div>";
	//alert(HeaderStr);
	window.calendarDiv.innerHTML = HeaderStr + calBody;
}

function getMonthDays(month, year){
	var days;
	switch(month){
		case 0:
		case 2:
		case 4:
		case 6:
		case 7:
		case 9:
		case 11:
				days = 31;
				break;
		case 3:
		case 5:
		case 8:
		case 10:
				days = 30;
				break;
		case 1:
				if (year%4 > 0)
					days = 28;
				else
					if (year%100 == 0 && year%400 > 0)
						days = 28;
					else
						days = 29;
					break;
	}
	return(days);
}	

function fillDate(month, day, year, targetElement)
{
//	alert('filling date!');
	var tmpDate1 = new Date();
	var hours = tmpDate1.getHours();
	var minutes = tmpDate1.getMinutes();
	var seconds = tmpDate1.getSeconds();
	var timepart = "";
	var result = "";
	if(dateType == 'datetime'){
		if(hours < 10)
			timepart = timepart + '0' + hours + ":";
		else
			timepart = timepart + hours + ":";
		if(minutes < 10)
			timepart = timepart + '0' + minutes + ":";
		else
			timepart = timepart + minutes + ":";
		if(seconds < 10)
			timepart = timepart + '0' + seconds;
		else
			timepart = timepart + seconds;	
	}
	if(month.length < 2)
		month = "0"+month;
	if(day.length < 2)
		day = "0"+day;

	if(dateType == 'datetime')
		result = month + "/" + day + "/" + year + " " + timepart;
	else
		result = month + "/" + day + "/" + year;
	document.getElementById(targetElement).value = result;	
	hideCalendar();
	document.getElementById(targetElement).focus();
}	

function filltheColor(cell)
{
	cell.bgColor = "blue";
}
function cleartheColor(cell)
{
	cell.bgColor = "";
}

function getRealPos(i,which) {
	iPos = 0
	while (i!=null) {
	 	iPos += i["offset" + which]
		i = i.offsetParent
	}
	return iPos
}

function stopTimer() {
	if(sDisplayTimer)clearTimeout(sDisplayTimer);
	sDisplayTimer=null;
}
  
function startTimer() {
		stopTimer();
		sDisplayTimer = setTimeout("hideCalendar()",iDelay);
}

function hideCalendar() {
	if(calVisible){
		window.calendarDiv.style.visibility = 'hidden';
		window.calendarFrame.style.visibility = 'hidden';
		window.calendarFrame.style.cursor = 'default';
		window.calendarDiv.style.cursor = 'default';
		calVisible = false;
		
	}
	
}

function showCalendar() {
		dest = window.calendarDiv;
		hideCalendar();
		if (dest) {
				dest.style.pixelLeft = getRealPos(window.calendarTarget,'Left');
			   	dest.style.pixelTop = getRealPos(window.calendarTarget,'Top') + 20;
				dest.style.left = dest.style.pixelLeft + 'px';
				dest.style.top = dest.style.pixelTop + 'px';
				dest.style.zIndex = 100;
				dest.style.visibility = 'visible';
				window.calendarFrame.style.width = dest.offsetWidth + 'px';
			    window.calendarFrame.style.height = dest.offsetHeight + 'px';
				window.calendarFrame.style.top = dest.style.pixelTop + 'px';
			    window.calendarFrame.style.left= dest.style.pixelLeft + 'px';
			    window.calendarFrame.style.zIndex = dest.style.zIndex - 1;
				window.calendarFrame.style.visibility = 'visible'; 
		}
		calVisible = true;
		oLastItem = dest;
		stopTimer();
}