var weekend = [0,6];
var weekendColor = "#e0e0e0";
var fontface = "Verdana";
var fontsize = 2;
var gNow = new Date();
var ggWinCal;
isNav = (navigator.appName.indexOf("Netscape") != -1) ? true : false;
isIE = (navigator.appName.indexOf("Microsoft") != -1) ? true : false;
Calendar.Months = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"];
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
Calendar.lDOMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
function Calendar(p_item, p_WinCal, p_month, p_year, p_format) {
 if ((p_month == null) && (p_year == null))	return;
 if (p_WinCal == null)
 this.gWinCal = ggWinCal;
 else
 this.gWinCal = p_WinCal;
 if (p_month == null) {
 this.gMonthName = null;
 this.gMonth = null;
 this.gYearly = true;
 } else {
 this.gMonthName = Calendar.get_month(p_month);
 this.gMonth = new Number(p_month);
 this.gYearly = false;
 }
 this.gYear = p_year;
 this.gFormat = p_format;
 this.gBGColor = "white";
 this.gFGColor = "black";
 this.gTextColor = "black";
 this.gHeaderColor = "black";
 this.gReturnItem = p_item;
}
Calendar.get_month = Calendar_get_month;
Calendar.get_daysofmonth = Calendar_get_daysofmonth;
Calendar.calc_month_year = Calendar_calc_month_year;
Calendar.print = Calendar_print;
function Calendar_get_month(monthNo) {
 return Calendar.Months[monthNo];
}
function Calendar_get_daysofmonth(monthNo, p_year) {
 if ((p_year % 4) == 0) {
 if ((p_year % 100) == 0 && (p_year % 400) != 0)
 return Calendar.DOMonth[monthNo];
 return Calendar.lDOMonth[monthNo];
 } else
 return Calendar.DOMonth[monthNo];
}
function Calendar_calc_month_year(p_Month, p_Year, incr) {
 var ret_arr = new Array();
 if (incr == -1) {
 // B A C K W A R D
 if (p_Month == 0) {
 ret_arr[0] = 11;
 ret_arr[1] = parseInt(p_Year) - 1;
 }
 else {
 ret_arr[0] = parseInt(p_Month) - 1;
 ret_arr[1] = parseInt(p_Year);
 }
 } else if (incr == 1) {
 // F O R W A R D
 if (p_Month == 11) {
 ret_arr[0] = 0;
 ret_arr[1] = parseInt(p_Year) + 1;
 }
 else {
 ret_arr[0] = parseInt(p_Month) + 1;
 ret_arr[1] = parseInt(p_Year);
 }
 }
 return ret_arr;
}
function Calendar_print() {
 ggWinCal.print();
}
function Calendar_calc_month_year(p_Month, p_Year, incr) {
 var ret_arr = new Array();
 if (incr == -1) {
 // B A C K W A R D
 if (p_Month == 0) {
 ret_arr[0] = 11;
 ret_arr[1] = parseInt(p_Year) - 1;
 }
 else {
 ret_arr[0] = parseInt(p_Month) - 1;
 ret_arr[1] = parseInt(p_Year);
 }
 } else if (incr == 1) {
 // F O R W A R D
 if (p_Month == 11) {
 ret_arr[0] = 0;
 ret_arr[1] = parseInt(p_Year) + 1;
 }
 else {
 ret_arr[0] = parseInt(p_Month) + 1;
 ret_arr[1] = parseInt(p_Year);
 }
 }
 return ret_arr;
}
new Calendar();
Calendar.prototype.getMonthlyCalendarCode = function() {
 var vCode = "";
 var vHeader_Code = "";
 var vData_Code = "";
 vCode = vCode + "<TABLE BORDER=1 BGCOLOR=\"" + this.gBGColor + "\">";
 vHeader_Code = this.cal_header();
 vData_Code = this.cal_data();
 vCode = vCode + vHeader_Code + vData_Code;
 vCode = vCode + "</TABLE>";
 return vCode;
}
Calendar.prototype.show = function() {
 var vCode = "";
 this.gWinCal.document.open();
 this.wwrite("<html>");
 this.wwrite("<head><title>Calendar</title>");
 this.wwrite("</head>");
 this.wwrite("<body " +
 "link=\"" + this.gLinkColor + "\" " +
 "vlink=\"" + this.gLinkColor + "\" " +
 "alink=\"" + this.gLinkColor + "\" " +
 "onBlur=\"self.focus()\"" +
 "text=\"" + this.gTextColor + "\">");
 this.wwriteA("<FONT FACE='" + fontface + "' SIZE=2><B>");
 this.wwriteA(this.gMonthName + " " + this.gYear);
 this.wwriteA("</B><BR>");
 var prevMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, -1);
 var prevMM = prevMMYYYY[0];
 var prevYYYY = prevMMYYYY[1];
 var nextMMYYYY = Calendar.calc_month_year(this.gMonth, this.gYear, 1);
 var nextMM = nextMMYYYY[0];
 var nextYYYY = nextMMYYYY[1];
 this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"" +
 "javascript:window.opener.Build(" +
 "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)-1) + "', '" + this.gFormat + "'" +
 ");" +
 "\"><<<\/A>]</TD><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"" +
 "javascript:window.opener.Build(" +
 "'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" +
 ");" +
 "\"><<\/A>]</TD><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"" +
 "javascript:window.opener.Build(" +
 "'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" +
 ");" +
 "\">><\/A>]</TD><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"" +
 "javascript:window.opener.Build(" +
 "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)+1) + "', '" + this.gFormat + "'" +
 ");" +
 "\">>><\/A>]</TD></TR></TABLE><BR>");
 vCode = this.getMonthlyCalendarCode();
 this.wwrite(vCode);
 this.wwrite("</font></body></html>");
 this.gWinCal.document.close();
}
Calendar.prototype.showY = function() {
 var vCode = "";
 var i;
 var vr, vc, vx, vy;
 var vxf = 285;
 var vyf = 200;
 var vxm = 10;
 var vym;
 if (isIE)	vym = 75;
 else if (isNav)	vym = 25;
 this.gWinCal.document.open();
 this.wwrite("<html>");
 this.wwrite("<head><title>Calendar</title>");
 this.wwrite("<style type='text/css'>\n\n</style>");
 this.wwrite("</head>");
 this.wwrite("<body " +
 "link=\"" + this.gLinkColor + "\" " +
 "vlink=\"" + this.gLinkColor + "\" " +
 "alink=\"" + this.gLinkColor + "\" " +
 "onBlur=\"self.focus()\"" +
 "text=\"" + this.gTextColor + "\">");
 this.wwrite("<FONT FACE='" + fontface + "' SIZE=2><B>");
 this.wwrite("Year : " + this.gYear);
 this.wwrite("</B><BR>");
 var prevYYYY = parseInt(this.gYear) - 1;
 var nextYYYY = parseInt(this.gYear) + 1;
 this.wwrite("<TABLE WIDTH='100%' BORDER=1 CELLSPACING=0 CELLPADDING=0 BGCOLOR='#e0e0e0'><TR><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"" +
 "javascript:window.opener.Build(" +
 "'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" +
 ");" +
 "\" alt='Prev Year'><<<\/A>]</TD><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"javascript:window.print();\">Print</A>]</TD><TD ALIGN=center>");
 this.wwrite("[<A HREF=\"" +
 "javascript:window.opener.Build(" +
 "'" + this.gReturnItem + "', null, '" + nextYYYY + "', '" + this.gFormat + "'" +
 ");" +
 "\">>><\/A>]</TD></TR></TABLE><BR>");
 var j;
 for (i=11; i>=0; i--) {
 if (isIE)
 this.wwrite("<DIV ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
 else if (isNav)
 this.wwrite("<LAYER ID=\"layer" + i + "\" CLASS=\"lclass" + i + "\">");
 this.gMonth = i;
 this.gMonthName = Calendar.get_month(this.gMonth);
 vCode = this.getMonthlyCalendarCode();
 this.wwrite(this.gMonthName + "/" + this.gYear + "<BR>");
 this.wwrite(vCode);
 if (isIE)
 this.wwrite("</DIV>");
 else if (isNav)
 this.wwrite("</LAYER>");
 }
 this.wwrite("</font><BR></body></html>");
 this.gWinCal.document.close();
}
Calendar.prototype.wwrite = function(wtext) {
 this.gWinCal.document.writeln(wtext);
}
Calendar.prototype.wwriteA = function(wtext) {
 this.gWinCal.document.write(wtext);
}
Calendar.prototype.cal_header = function() {
 var vCode = "";
 vCode = vCode + "<TR>";
 vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Sun</B></FONT></TD>";
 vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Mon</B></FONT></TD>";
 vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Tue</B></FONT></TD>";
 vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Wed</B></FONT></TD>";
 vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Thu</B></FONT></TD>";
 vCode = vCode + "<TD WIDTH='14%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Fri</B></FONT></TD>";
 vCode = vCode + "<TD WIDTH='16%'><FONT SIZE='2' FACE='" + fontface + "' COLOR='" + this.gHeaderColor + "'><B>Sat</B></FONT></TD>";
 vCode = vCode + "</TR>";
 return vCode;
}
Calendar.prototype.cal_data = function() {
 var vDate = new Date();
 vDate.setDate(1);
 vDate.setMonth(this.gMonth);
 vDate.setFullYear(this.gYear);
 var vFirstDay=vDate.getDay();
 var vDay=1;
 var vLastDay=Calendar.get_daysofmonth(this.gMonth, this.gYear);
 var vOnLastDay=0;
 var vCode = "";
 vCode = vCode + "<TR>";
 for (i=0; i<vFirstDay; i++) {
 vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(i) + "></TD>";
 }
 for (j=vFirstDay; j<7; j++) {
 vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
 "<A HREF='#' " +
 "onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
 this.format_data(vDay) +
 "';window.close();\">" +
 this.format_day(vDay) +
 "</A>" +
 "</FONT></TD>";
 vDay=vDay + 1;
 }
 vCode = vCode + "</TR>";
 for (k=2; k<7; k++) {
 vCode = vCode + "<TR>";
 for (j=0; j<7; j++) {
 vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j) + "><FONT SIZE='2' FACE='" + fontface + "'>" +
 "<A HREF='#' " +
 "onClick=\"self.opener.document." + this.gReturnItem + ".value='" +
 this.format_data(vDay) +
 "';window.close();\">" +
 this.format_day(vDay) +
 "</A>" +
 "</FONT></TD>";
 vDay=vDay + 1;
 if (vDay> vLastDay) {
 vOnLastDay = 1;
 break;
 }
 }
 if (j == 6)
 vCode = vCode + "</TR>";
 if (vOnLastDay == 1)
 break;
 }
 if(this.gMonth <11) {
 this.gMonth = this.gMonth + 1;
 }
 else {
 var year = parseInt(this.gYear) + 1;
 this.gYear = new String(year);
 this.gMonth = 0;
 }
 vDay = 1;
 for (m=1; m<(7-j); m++) {
 if (this.gYearly)
 vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
 "></TD>";
 else {
 vCode = vCode + "<TD WIDTH='14%'" + this.write_weekend_string(j+m) +
 "><FONT SIZE='2' FACE='" + fontface + "' COLOR='gray'>";
 vCode = vCode + "<A HREF='#' " + "onClick=\"self.opener.document." + this.gReturnItem +
 ".value='" + this.format_data(vDay) + "';window.close();\">" + m + "</a></FONT></TD>";
 vDay++;
 }
 }
 return vCode;
}
Calendar.prototype.format_day = function(vday) {
 var vNowDay = gNow.getDate();
 var vNowMonth = gNow.getMonth();
 var vNowYear = gNow.getFullYear();
 if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
 return ("<FONT COLOR=\"RED\"><B>" + vday + "</B></FONT>");
 else
 return (vday);
}
Calendar.prototype.write_weekend_string = function(vday) {
 var i;
 for (i=0; i<weekend.length; i++) {
 if (vday == weekend[i])
 return (" BGCOLOR=\"" + weekendColor + "\"");
 }
 return "";
}
Calendar.prototype.format_data = function(p_day) {
 var vData;
 var vMonth = 1 + this.gMonth;
 vMonth = (vMonth.toString().length <2) ? "0" + vMonth : vMonth;
 var vMon = Calendar.get_month(this.gMonth).substr(0,3).toUpperCase();
 var vFMon = Calendar.get_month(this.gMonth).toUpperCase();
 var vY4 = new String(this.gYear);
 var vY2 = new String(this.gYear.substr(2,2));
 var vDD = (p_day.toString().length <2) ? "0" + p_day : p_day;
 switch (this.gFormat) {
 case "MM\/DD\/YYYY" :
 vData = vMonth + "\/" + vDD + "\/" + vY4;
 break;
 case "MM\/DD\/YY" :
 vData = vMonth + "\/" + vDD + "\/" + vY2;
 break;
 case "MM-DD-YYYY" :
 vData = vMonth + "-" + vDD + "-" + vY4;
 break;
 case "MM-DD-YY" :
 vData = vMonth + "-" + vDD + "-" + vY2;
 break;
 case "DD\/MON\/YYYY" :
 vData = vDD + "\/" + vMon + "\/" + vY4;
 break;
 case "DD\/MON\/YY" :
 vData = vDD + "\/" + vMon + "\/" + vY2;
 break;
 case "DD-MON-YYYY" :
 vData = vDD + "-" + vMon + "-" + vY4;
 break;
 case "DD-MON-YY" :
 vData = vDD + "-" + vMon + "-" + vY2;
 break;
 case "DD\/MONTH\/YYYY" :
 vData = vDD + "\/" + vFMon + "\/" + vY4;
 break;
 case "DD\/MONTH\/YY" :
 vData = vDD + "\/" + vFMon + "\/" + vY2;
 break;
 case "DD-MONTH-YYYY" :
 vData = vDD + "-" + vFMon + "-" + vY4;
 break;
 case "DD-MONTH-YY" :
 vData = vDD + "-" + vFMon + "-" + vY2;
 break;
 case "DD\/MM\/YYYY" :
 vData = vDD + "\/" + vMonth + "\/" + vY4;
 break;
 case "DD\/MM\/YY" :
 vData = vDD + "\/" + vMonth + "\/" + vY2;
 break;
 case "DD-MM-YYYY" :
 vData = vDD + "-" + vMonth + "-" + vY4;
 break;
 case "DD-MM-YY" :
 vData = vDD + "-" + vMonth + "-" + vY2;
 break;
 default :
 vData = vMonth + "\/" + vDD + "\/" + vY4;
 }
 return vData;
}
function Build(p_item, p_month, p_year, p_format) {
 var p_WinCal = ggWinCal;
 gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format);
 gCal.gBGColor="white";
 gCal.gLinkColor="black";
 gCal.gTextColor="black";
 gCal.gHeaderColor="darkgreen";
 if (gCal.gYearly)	gCal.showY();
 else	gCal.show();
}
function show_calendar() {
 p_item = arguments[0];
 if (arguments[1] == null)
 p_month = new String(gNow.getMonth());
 else
 p_month = arguments[1];
 if (arguments[2] == "" || arguments[2] == null)
 p_year = new String(gNow.getFullYear().toString());
 else
 p_year = arguments[2];
 if (arguments[3] == null)
 p_format = "DD-MON-YYYY";
 else
 p_format = arguments[3];
 vWinCal = window.open("", "Calendar",
 "width=250,height=250,status=no,resizable=no,top=200,left=200");
 vWinCal.opener = self;
 ggWinCal = vWinCal;
 Build(p_item, p_month, p_year, p_format);
}
function show_yearly_calendar(p_item, p_year, p_format) {
 // Load the defaults..
 if (p_year == null || p_year == "")
 p_year = new String(gNow.getFullYear().toString());
 if (p_format == null || p_format == "")
 p_format = "DD-MON-YYYY";
 var vWinCal = window.open("", "Calendar", "scrollbars=yes");
 vWinCal.opener = self;
 ggWinCal = vWinCal;
 Build(p_item, null, p_year, p_format);
}

