Xoffset = 10;    // modify these values to
Yoffset = 20;    // change the popup position.

var skn;

var ns4=document.layers;
var ns6=document.getElementById&&!document.all;
var ie4=document.all;

if (ns4) skn = document.popnow;
else if (ns6) skn = document.getElementById("popnow").style;
else if (ie4) skn = document.all.popnow.style;

if (ns4) document.captureEvents(Event.MOUSEMOVE);
else {
	skn.visibility="visible";
	skn.display="none";
}

document.onmousemove=get_mouse;


function popup(aDay, aDate, aMonth, aYear, eventBoolean, bdayBoolean) {
	var bdayPerson = getBday(aDate-1, aMonth);
	var content = "<table width=150px border=1 bordercolor=#eeeeee bgcolor=#ffffff style='filter:progid:DXImageTransform.Microsoft.Shadow(color=#999999,direction=135,strength=4);'><tr><td align=right class=special style='padding:3; text-align:left;'>" + getDisplayDate(aYear + "" + getExactLength(aMonth+1,2) + "" + getExactLength(aDate,2)) + "</td></tr>";

	if (bdayBoolean) content += "<tr><td style='padding:3; text-align:left;'><b>Bday : </b>" + bdayPerson + "</td></tr>";
	if (eventBoolean) content += "<tr><td style='padding:3; text-align:left;'><b>Event : </b>" + getEvent(aDate, aMonth+1, aYear) + "</td></tr>";

	content += "</table>";

	if (ns4) { skn.document.write(content);skn.document.close(); skn.visibility="visible" }
	if (ns6) { document.getElementById("popnow").innerHTML=content; skn.display=""; }
	if (ie4) { document.all("popnow").innerHTML=content; skn.display=""; }

}

function get_mouse(e) {
	var x=(ns4||ns6)?e.pageX:event.x+document.body.scrollLeft;skn.left=x+Xoffset;
	var y=(ns4||ns6)?e.pageY:event.y+document.body.scrollTop;skn.top=y+Yoffset;
}

function kill() {
	if (ns4) skn.visibility="hidden";
	else if (ns6||ie4) skn.display="none";
}











function move(num) {
	Calendar.setMonth(Calendar.getMonth()+num*2);
	showCal();
}

function gotoToday() {
	Calendar.setYear(year);
	Calendar.setMonth(month);
	Calendar.setDate(date);
	showCal();
}

function cdigit(num, len) {
	if (num >= (len-1)*10) return num;
	else return "0" + num;
}

function chkEvent(cDate, cMonth, cYear) {
	var check = cYear + "" + cdigit(cMonth,2) + "" + cdigit(cDate,2);
	for (x=0; x<uDate.length; x++) if (check == uDate[x]) return true;
	return false;
}

function getEvent(cDate, cMonth, cYear) {
	var check = cYear + "" + cdigit(cMonth,2) + "" + cdigit(cDate,2);
	for (x=0; x<uDate.length; x++) if (check == uDate[x]) return uEvent[x];
	return false;	
}

function getBday(cDate, cMonth) {
	return day[cMonth][cDate];
}

function chkBday(cPerson) {
	if (cPerson != "") return true;
	return false;
}

function showCal() {

var noOfDay = new Array();
if (LeapYear(Calendar.getFullYear())) noOfDay = DAY_NO_LY;
else noOfDay = DAY_NO;
var result = "";

var currentMth = noOfDay[Calendar.getMonth()];


Calendar.setDate(1);    // Start the calendar day at '1'

// set month & year label
result = "<table width=\"100%\"><tr><td title='Previous Month' onClick='javascript:move(-1);' class=cevent><</td><td colspan=5 class=clabel><a href=# onClick=\"javascript:gotoToday()\" title=\"Go to today\">" + month_of_year[Calendar.getMonth()] + " " + Calendar.getFullYear() + "</a></td><td title='Next Month' onClick='javascript:move(0);' class=cevent>></td></tr>";


result += "<tr>";

// set day label
for (var x=0; x<day_of_week.length; x++) result += "<td class=clabel style=\"border-top:1 solid #e4e4e4; border-bottom:1 solid #e4e4e4\"><font class=special>" + day_of_week[x] + "</font></td>";

result += "</tr>";


// set empty cells
if (Calendar.getDay() > 0) {
	result += "<tr>";
	for (var x=0; x<Calendar.getDay(); x++) result += "<td class='clabel'>&nbsp;</td>";
}

// get number of empty cells at the end
//var emptyCellsAtEnd = 7 - ((currentMth + Calendar.getDay()) % 7);
var emptyCellsAtEnd = 7 - (currentMth % 7);

// set remaining days
for (var x=1; x<=currentMth; x++) {
	var eventBoolean = chkEvent(Calendar.getDate(), Calendar.getMonth()+1, Calendar.getFullYear());
	var bdayPerson = getBday(Calendar.getDate()-1, Calendar.getMonth());
	var bdayBoolean = chkBday(bdayPerson);

	result += "<td align=center";
	// check today
	if (Calendar.getDate() == date && Calendar.getMonth() == month && Calendar.getFullYear() == year) result += " style='background:#ddddff;'";

	// check occupied date

	if (bdayBoolean || eventBoolean) result += " OnMouseOver=\"popup(" + Calendar.getDay() + "," + Calendar.getDate() + "," + Calendar.getMonth() + "," + Calendar.getFullYear() + "," + eventBoolean + "," + bdayBoolean + ")\" onMouseOut=\"kill();\"";

	if (bdayBoolean && eventBoolean) result += " class=cboth>";
	else if (bdayBoolean) result += " class=cbirthday>";
	else if (eventBoolean) result += " class=cevent>" ;
	else result += " class=cal>";

	result += cdigit(x, 2) + "</td>";
	if (Calendar.getDay() == 6) result += "</tr><tr>";
	Calendar.setDate(Calendar.getDate()+1);
}

	// if the last day for last date is saturday,
	// then no need to add empty cells
	if (Calendar.getDay() == 0) emptyCellsAtEnd = 0;

	// add empty cells at the end
	while (emptyCellsAtEnd>0 && x-1<=currentMth) {
		result += "<td style=\"width:14%;\">&nbsp;</td>";
		emptyCellsAtEnd--;
	}


	result += "</tr></table>";

	if (ie4) document.all("calendar").innerHTML = result;
	else document.getElementById("calendar").innerHTML = result;

}


showCal();