var mode;
var CalendarItem;
var strCalendarHTML = "";

  // Some global variables.
// Create a Date object representing today's date and current time.

var today = new Date();


var localForm;
var activeMenu = 0;
			
			function initForm(theForm)
			{
				localForm = theForm;
			}
			function initItem(obj)
			{
				CalendarItem = MM_findObj(obj);
			}

			function checkSelectedSize(selectElement, maxSelected)
			{
				var count = 0;
				for (var i=0; i < selectElement.options.length; i++) {
					if (selectElement.options[i].selected) {
						count++;
						if (count > maxSelected) {
							selectElement.options[i].selected = false;
						}
					}
				}
			}
			
			
function OpenCalenderFrom() {

initForm(document.forms['MainForm']);
show_calendar('Starting',localForm.elements['StartingMonth'].value,localForm.elements['StartingYear'].value); 
return false;

}


function OpenCalenderTo() { 
initForm(document.forms['MainForm']);
show_calendar('End',localForm.elements['EndMonth'].value,localForm.elements['EndYear'].value); 
return false;
}
// daysInMonth is an array that stores the number of days in each month.

var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var EnglishMonNames = new Array ("January","February","March","April","May","June","July","August","September","October","November","December");
var ArabicMonNames = new Array ("كانون ثاني","شباط","آذار","نيسان","أيار","حزيران","تموز","آب","أيلول","تشرين أول","تشرين ثاني","كانون الأول");
var EnglishDayNames = new Array ("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
var ArabicDayNames = new Array ("أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت");

var monNames = new Array(EnglishMonNames, ArabicMonNames)
var dayNames = new Array(EnglishDayNames, ArabicDayNames)

var strCloseWindow = new Array ("Close Window", "إغلاق")
var strCalendar = new Array ("Calendar", "التقويم")

var CalendarDayNames = dayNames[Lang];

function popDate (theForm, formTarget, targetPosition, calDate)
// Re-populates date select element with the appropriate number of days,
// based on which month is selected.
{
	var dayTarget;
	var monthTarget;
	var yearTarget;

	// If targetPosition is sent in the parameters,
	// we know that this is a multi-leg calendar.
	if (arguments.length > 2 && (targetPosition != "null")) {
		dayTarget = theForm.elements[formTarget+"Day"][targetPosition];
		monthTarget = theForm.elements[formTarget+"Month"][targetPosition];
		yearTarget = theForm.elements[formTarget+"Year"][targetPosition];
	} else {
		dayTarget = theForm.elements[formTarget+"Day"];
		monthTarget = theForm.elements[formTarget+"Month"];
		yearTarget = theForm.elements[formTarget+"Year"];
	}
	
	// If date is not passed in, then create date object
	// from current settings of calendar.
	if (!calDate) {
		var calDate = new Date(yearTarget.value, monthTarget.options[monthTarget.selectedIndex].value, dayTarget.options[dayTarget.selectedIndex].value);
	}

	// Reset the date select element to remove the old dates.
	// Then we simply recreate each option element with the correct
	// number of dates.
//	dayTarget.options.length = 0;
	
//	for (var i = 0; i < daysInMonth[monthTarget.options.selectedIndex]; i++) {
	for (var i = 0; i < 31; i++) {
//		dayTarget.options[i] = new Option(i+1, i+1);
		if (i+1 == calDate.getDate()) {
			dayTarget.options[i+1].selected = true;
		}
	}
	
	for (var i = 0; i < monthTarget.options.length; i++) {
		if ( i - 1 == calDate.getMonth()) {
			monthTarget.options[i].selected = true;
		}
	}
	
	//for (var i = 0; i < yearTarget.length; i++) {
		//if ( yearTarget.options[i].text == calDate.getFullYear()) {
			yearTarget.value = calDate.getFullYear();
		//}
	//}
}

// change 07/26/01 bmartinez
// Stubbing out a checkDate function to prevent the calendar
// pop-up from breaking until I can rewrite the code.
function checkDate (theForm, calDate, formTarget, targetPosition)
{
	if (calDate == 'null') {
		if (arguments.length > 3) {
			selectedYearValue = parseInt(theForm.elements[formTarget+"Year"][targetPosition].value,10);
			selectedDayValue = parseInt(theForm.elements[formTarget+"Day"][targetPosition].options[theForm.elements[formTarget+"Day"][targetPosition].selectedIndex].text,10);
			selectedMonValue = parseInt(theForm.elements[formTarget+"Month"][targetPosition].options[theForm.elements[formTarget+"Month"][targetPosition].selectedIndex].value,10);
		} else {
			selectedYearValue = parseInt(theForm.elements[formTarget+"Year"].value,10);
			selectedDayValue = parseInt(theForm.elements[formTarget+"Day"].options[theForm.elements[formTarget+"Day"].selectedIndex].text,10);
			selectedMonValue = parseInt(theForm.elements[formTarget+"Month"].options[theForm.elements[formTarget+"Month"].selectedIndex].value,10);
		}
	} else {
		theDate = new Date(calDate);
		selectedMonValue = theDate.getMonth();
		selectedDayValue = theDate.getDate(); 
		selectedYearValue = theDate.getFullYear();
	}
	var newDate = new Date(selectedYearValue, selectedMonValue, selectedDayValue);

	if (arguments.length > 3) {
		popDate(theForm, formTarget, targetPosition, newDate);
	} else {
		popDate(theForm, formTarget, "null", newDate);
	}

}

/*
This is a rewritten checkDate function that will do basic
client-side validation, but it appears to be unnecessary
now that we have date-pair validation on the server.
07/17/01, bmartinez

function checkDate(theForm, start, end, startName, endName)
// Performs some basic validation on the selected dates
// before allowing the form to be submitted.
{
	// First, check that start date is no earlier than today.
	
	if (start.getFullYear() == today.getFullYear()) {
		if ((start.getMonth() < today.getMonth()) || ((start.getMonth() == today.getMonth()) && (start.getDate() < today.getDate()))) {
			alert("Your " + startName + " date cannot be earlier\nthan today's date.");
			return false;
		}
	}
	
	// Now check that there is an end date (for flight round-trips) and if so,
	// make sure the end date is not earlier than the start date.
	
	if (end != "null") {
		if (end.getFullYear() == start.getFullYear()) {
			if ((end.getMonth() < start.getMonth()) || ((start.getMonth() == today.getMonth()) && (end.getDate() < start.getDate()))) {
				alert("Your " + endName + " date cannot be earlier\nthan your " + startName + " date.");
				return false;
			}
		}
	}
		
	// more search-specific validation is now done by server; submit it!
	
	return true;
}
*/

// Begin the Calendar Pop-up code.

// Customize your Calendar here..
var gFontFace = "verdana, arial, helvetica, sans-serif";
var gWeekendColor = "99B6B4";
var gBGColor = "#ffffff";
var gLinkColor = "#000000";
var gHeaderBGColor = "99B6B4";
var gLabelBGColor = "#ffffff";
var cCurrentDayColor = "red";

// Header text e.g. June 2001
var gHeaderColor = "#000000";
var gHeaderFontSize = "2";

//Day names e.g. Sun Mon etc.
var gLabelColor = "darkgreen"; 
var gLabelFontSize = "1";

//General text e.g. numbers
var gTextColor = "#000000";
var gTextFontSize = "1";

var weekend = [5,6];
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.Months = monNames[Lang]

// Non-Leap year Month days..
Calendar.DOMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// Leap year Month days..
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, p_target)
{
	if ((p_month == null) && (p_year == null))	return;

	if (mode == 0){
		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.gTarget = p_target;
	this.gReturnItem = p_item;
}
// End Calendar Function

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) 
{
	/* 
	Check for leap year ..
	1.Years evenly divisible by four are normally leap years, except for... 
	2.Years also evenly divisible by 100 are not leap years, except for... 
	3.Years also evenly divisible by 400 are leap years. 
	*/
	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) 
{
	/* 
	Will return an 1-D array with 1st element being the calculated month 
	and second being the calculated year 
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	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) 
{
	/* 
	Will return an 1-D array with 1st element being the calculated month 
	and second being the calculated year 
	after applying the month increment/decrement as specified by 'incr' parameter.
	'incr' will normally have 1/-1 to navigate thru the months.
	*/
	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;
}

// This is for compatibility with Navigator 3, we have to create and discard one object before the prototype object exists.
new Calendar();

Calendar.prototype.show = function() 
{
	var vCode = "";
	
	if (mode == 0) this.gWinCal.document.open();

	// Show navigation buttons
	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];

	// Setup the page...
	if(Lang == 1){ //Arabic
		this.wwrite("<html dir=rtl>");
	}else{
		this.wwrite("<html>");
	}
	this.wwrite("<head><title>" + strCalendar[Lang] + "</title>");
	this.wwrite("</head>");

	this.wwrite("<body " + 
		"link=\"" + gLinkColor + "\" " + 
		"vlink=\"" + gLinkColor + "\" " +
		"alink=\"" + gLinkColor + "\" " +
		"text=\"" + gTextColor + "\">");

	// Create the master table that contains all the tables making up the calendar.	
	this.wwrite("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">");
	this.wwrite("<tr>");
	this.wwrite("<td align=\"center\">");

	// Create the table that contains the tables housing the month name/year and the navigaoin controls.	
	this.wwrite("<table width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"2\" bgcolor=\"" + gHeaderBGColor + "\">");
	this.wwrite("<tr>");
	this.wwrite("<td align=\"center\">");
	
	// Create the string with the month name and the year
	this.wwrite("<!-- Begin Table with Month/Year string -->");
	this.wwrite("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\" bgcolor=\"" + gHeaderBGColor + "\">");
	this.wwrite("<tr>");
	this.wwrite("<td align=\"center\">");
	this.wwrite("<font face=\"" + gFontFace + "\" color=\"" + gHeaderColor + "\" size=\"" + gHeaderFontSize + "\"><b>" + this.gMonthName + " " + this.gYear + "</b></td>");
	this.wwrite("</tr>");
	this.wwrite("</table>");
	this.wwrite("<!-- End Table with Month/Year string -->");
	
// create the table that contains the buttons to next and previous months and years.	
	this.wwrite("<!-- Begin Table with Navigation Arrows -->");
	this.wwrite("<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"" + gHeaderBGColor + "\">");
	this.wwrite("<tr>");
	
//create hyperlink to the previous year button
	// Commented this out per Tim Hjellum - I.A. 31-may-2001
	/* this.wwrite("<td align=\"center\">");
	   this.wwrite("<a href=\"" + "javascript:window.opener.Build(" + "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)-1) + "', '" + this.gFormat + "'" + ","+this.gTarget+");" + "\">[<<]</a></td>");
	*/
	
//create hyperlink to the previous month button
if (mode == 0){
	this.wwrite("<td align=\"center\">");
	this.wwrite("<a href=\"" + "javascript:window.opener.Build(" + "'" + this.gReturnItem + "', '" + prevMM + "', '" + prevYYYY + "', '" + this.gFormat + "'" + ","+this.gTarget+");" + "\">[<]</a></td>");
}

//create hyperlink to print the calendar
	// this.wwrite("<a href=\"javascript:window.print();\">Print</a></td><td align=center>");
	
//create hyperlink to the next month button
if (mode == 0){
	this.wwrite("<td align=\"center\">");
	this.wwrite("<a href=\"" + "javascript:window.opener.Build(" + "'" + this.gReturnItem + "', '" + nextMM + "', '" + nextYYYY + "', '" + this.gFormat + "'" + ","+this.gTarget+");" + "\">[>]</a></td>");
}

// create hyperlink to the next year button
	// Commented this out per Tim Hjellum - I.A. 31-may-2001
	/* this.wwrite("<td align=\"center\">");
	   this.wwrite("<a href=\"" + "javascript:window.opener.Build(" + "'" + this.gReturnItem + "', '" + this.gMonth + "', '" + (parseInt(this.gYear)+1) + "', '" + this.gFormat + "'" + ","+this.gTarget+");" + "\">[>>]</a></td>");
	*/
	this.wwrite("<!-- End Table with Navigation Arrows -->");
	this.wwrite("</tr>");
	this.wwrite("</table></td>");
	this.wwrite("</tr>");
	this.wwrite("</table>");

	// Get the complete calendar code for the month..
	vCode = this.getMonthlyCalendarCode();
	this.wwrite(vCode);
//here the close button
if (mode == 0)
{
	this.wwrite("<br><input type=\"button\" style=\"BORDER-RIGHT: medium none;BORDER-TOP: medium none;FONT-WEIGHT: bold;FONT-SIZE: 10px; BORDER-LEFT: medium none;CURSOR: hand;COLOR: white;BORDER-BOTTOM: medium none;FONT-FAMILY: Tahoma, Arial, Helvetica, sans-serif;BACKGROUND-COLOR: 99b6b4\" name=\"button1\" value=\"" + strCloseWindow[Lang] + "\" onclick=\"" + "javascript:window.close();"+"\"></td>");
	this.wwrite("</table>");
	this.wwrite("</body></html>");
	this.gWinCal.document.close();
}

}

Calendar.prototype.getMonthlyCalendarCode = function() {
	var vCode = "";
	var vHeader_Code = "";
	var vData_Code = "";
	
// Begin Table code for the Calendar itself...
	vCode = vCode + "<!-- Begin Calendar Table -->\n";
	vCode = vCode + "<table width=\"100%\" border=\"1\" bgcolor=\"" + gBGColor + "\">";
	vHeader_Code = this.cal_header();
	vData_Code = this.cal_data();
	vCode = vCode + vHeader_Code + vData_Code;
	vCode = vCode + "</table>";
	vCode = vCode + "\n<!-- End Calendar Table -->";
	
	return vCode;
}

Calendar.prototype.showY = function() {
	var vCode = "";
	var i;
	var vr, vc, vx, vy;		// Row, Column, X-coord, Y-coord
	var vxf = 285;			// X-Factor
	var vyf = 200;			// Y-Factor
	var vxm = 10;			// X-margin
	var vym;				// Y-margin
	if (isIE)	vym = 75;
	else if (isNav)	vym = 25;
	
	if (mode == 0) this.gWinCal.document.open();

	this.wwrite("<html>");
	this.wwrite("<head><title>Calendar</title>");
	this.wwrite("<style type='text/css'>\n<!--");
	for (i=0; i<12; i++) {
		vc = i % 3;
		if (i>=0 && i<= 2)	vr = 0;
		if (i>=3 && i<= 5)	vr = 1;
		if (i>=6 && i<= 8)	vr = 2;
		if (i>=9 && i<= 11)	vr = 3;
		
		vx = parseInt(vxf * vc) + vxm;
		vy = parseInt(vyf * vr) + vym;

		this.wwrite(".lclass" + i + " {position:absolute;top:" + vy + ";left:" + vx + ";}");
	}
	this.wwrite("-->\n</style>");
	this.wwrite("</head>");

	this.wwrite("<body " + 
		"link=\"" + gLinkColor + "\" " + 
		"vlink=\"" + gLinkColor + "\" " +
		"alink=\"" + gLinkColor + "\" " +
		"text=\"" + gTextColor + "\">");
	this.wwrite("<font face=\"" + gFontFace + "\" size=\"2\"><b>");
	this.wwrite("Year : " + this.gYear);
	this.wwrite("</b><br>");

	// Show navigation buttons
	var prevYYYY = parseInt(this.gYear) - 1;
	var nextYYYY = parseInt(this.gYear) + 1;
	
	this.wwrite('<table width="100%" border="0" cellspacing="0" cellpadding="0" BGcolor="#e0e0e0">\n<tr>\n<td align="center">');
	this.wwrite("[<a href=\"" +
		"javascript:window.opener.Build(" + 
		"'" + this.gReturnItem + "', null, '" + prevYYYY + "', '" + this.gFormat + "'" +
		","+this.gTarget+");" +
		"\" 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 + "'" +
		","+this.gTarget+");" +
		"\">>><\/a>]</td>\n</tr>\n</table><br>");

	// Get the complete calendar code for each month..
	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>");
	if (mode == 0) this.gWinCal.document.close();
}

Calendar.prototype.wwrite = function(wtext) {
	if (mode == 0) this.gWinCal.document.writeln(wtext);
	if (mode == 1) strCalendarHTML = strCalendarHTML + wtext;
}

Calendar.prototype.wwriteA = function(wtext) {
	if (mode == 0) this.gWinCal.document.write(wtext);
}

Calendar.prototype.cal_header = function() {
	var vCode = "";
	
	vCode = vCode + "<tr>\n";
	vCode = vCode + "<td bgcolor=\"" + gLabelBGColor +"\" width=\"14%\"><font size=\""+ gLabelFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gLabelColor + "\"><b>" + CalendarDayNames[0] + "</b></font></td>\n";
	vCode = vCode + "<td bgcolor=\"" + gLabelBGColor +"\" width=\"14%\"><font size=\""+ gLabelFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gLabelColor + "\"><b>" + CalendarDayNames[1] + "</b></font></td>\n";
	vCode = vCode + "<td bgcolor=\"" + gLabelBGColor +"\" width=\"14%\"><font size=\""+ gLabelFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gLabelColor + "\"><b>" + CalendarDayNames[2] + "</b></font></td>\n";
	vCode = vCode + "<td bgcolor=\"" + gLabelBGColor +"\" width=\"14%\"><font size=\""+ gLabelFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gLabelColor + "\"><b>" + CalendarDayNames[3] + "</b></font></td>\n";
	vCode = vCode + "<td bgcolor=\"" + gLabelBGColor +"\" width=\"14%\"><font size=\""+ gLabelFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gLabelColor + "\"><b>" + CalendarDayNames[4] + "</b></font></td>\n";
	vCode = vCode + "<td bgcolor=\"" + gLabelBGColor +"\" width=\"14%\"><font size=\""+ gLabelFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gLabelColor + "\"><b>" + CalendarDayNames[5] + "</b></font></td>\n";
	vCode = vCode + "<td bgcolor=\"" + gLabelBGColor +"\" width=\"14%\"><font size=\""+ gLabelFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gLabelColor + "\"><b>" + CalendarDayNames[6] + "</b></font></td>\n";
	vCode = vCode + "</tr>\n";
	
	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 = "";

	/*
	Get day for the 1st of the requested month/year..
	Place as many blank cells before the 1st day of the month as necessary. 
	*/

	vCode = vCode + "<tr>\n";
	for (i=0; i<vFirstDay; i++) {
		vCode = vCode + "<td width=\"14%\"" + this.write_weekend_string(i) + "><font size=\""+ gTextFontSize +"\" face=\"" + gFontFace + "\"> </font></td>\n";
	}

	// Write rest of the 1st week
	for (j=vFirstDay; j<7; j++) {
		vCode = vCode + "<td width=\"14%\"" + this.write_weekend_string(j) + "><font size=\""+ gTextFontSize +"\" face=\"" + gFontFace + "\">" + 
  		 "<a href=\"#\" ";
		if (this.gTarget != -1) {
		if (mode == 0)
			vCode += "onClick=\"self.opener.checkDate(self.opener.localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\',"+this.gTarget+");" + " window.close();\">" + this.format_day(vDay) + "</a>";
		if (mode == 1)
			vCode += "onClick=\"checkDate(localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\',"+this.gTarget+");" + " selectNewDate();\">" + this.format_day(vDay) + "</a>";
		} else {
		if (mode == 0)
			vCode += "onClick=\"self.opener.checkDate(self.opener.localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\');" + " window.close();\">" + this.format_day(vDay) + "</a>";
		if (mode == 1)
			vCode += "onClick=\"checkDate(localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\');" + " selectNewDate();\">" + this.format_day(vDay) + "</a>";
		}
			vCode +=
				"</font></td>\n"; 
				vDay=vDay + 1;
	}
	vCode = vCode + "</tr>\n";

	// Write the rest of the weeks
	for (k=2; k<7; k++) {
		vCode = vCode + "<tr>\n";

		for (j=0; j<7; j++) {
			vCode = vCode + "<td width=\"14%\"" + this.write_weekend_string(j) + "><font size=\""+ gTextFontSize +"\" face=\"" + gFontFace + "\">" + 
 		 "<a href=\"#\" ";
		if (this.gTarget != -1) {
		if (mode == 0)
			vCode += "onClick=\"self.opener.checkDate(self.opener.localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\',"+this.gTarget+");" + " window.close();\">" + this.format_day(vDay) + "</a>";
		if (mode == 1)
			vCode += "onClick=\"checkDate(localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\',"+this.gTarget+");" + " selectNewDate();\">" + this.format_day(vDay) + "</a>";
		} else {
		if (mode == 0)
			vCode += "onClick=\"self.opener.checkDate(self.opener.localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\');" + " window.close();\">" + this.format_day(vDay) + "</a>";
		if (mode == 1)
			vCode += "onClick=\"checkDate(localForm,\'"+this.format_data(vDay)+"\',\'"+this.gReturnItem+"\');" + " selectNewDate();\">" + this.format_day(vDay) + "</a>";
		}
			vCode +=
				"</font></td>\n"; 
				vDay=vDay + 1;
				 
			if (vDay > vLastDay) {
				vOnLastDay = 1;
				break;
			}
		}

		if (j == 6)
			vCode = vCode + "</tr>\n";
		if (vOnLastDay == 1)
			break;
	}
	
	// Fill up the rest of last week with proper blanks, so that we get proper square blocks
	for (m=1; m<(7-j); m++) {
		if (this.gYearly)
			vCode = vCode + "<td width=\"14%\"" + this.write_weekend_string(j+m) + 
			"><font size=\""+ gTextFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gWeekendColor + "\"></font></td>\n";
		else
			vCode = vCode + "<td width=\"14%\"" + this.write_weekend_string(j+m) + 
			"><font size=\""+ gTextFontSize +"\" face=\"" + gFontFace + "\" color=\"" + gWeekendColor + "\">" + m + "</font></td>\n";
	}
	
	return vCode;
}

function selectNewDate ()
{
	SubmitDay();
}

Calendar.prototype.format_day = function(vday) {
	var vNowDay = gNow.getDate();
	var vNowMonth = gNow.getMonth();
	var vNowYear = gNow.getFullYear();
	
	var ret;

	if (vday == vNowDay && this.gMonth == vNowMonth && this.gYear == vNowYear)
		ret = ("<font color=\""+ cCurrentDayColor +"\"><b>" + vday + "</b></font>");
	else
		ret = (vday);
		
	if (mode == 1)
	{
		if (Days[vday] == 1) ret = "<b>" + ret + "</b>";
		ret = "<font class=TableCellFont>" + ret + "</font>"
	}
	
	return ret;
}

Calendar.prototype.write_weekend_string = function(vday) {
	var i;

	// Return special formatting for the weekend day.
	for (i=0; i<weekend.length; i++) {
		if (vday == weekend[i])
			return (" bgcolor=\"" + gWeekendColor + "\"");
	}
	
	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, p_target) {
	var p_WinCal = ggWinCal;
	gCal = new Calendar(p_item, p_WinCal, p_month, p_year, p_format, p_target);



// Choose appropriate show function
	if (gCal.gYearly)	gCal.showY();
	else	gCal.show();
}

function show_calendar() {
	/* 
		p_month : 0-11 for Jan-Dec; 12 for All Months.
		p_year	: 4-digit year
		p_format: Date format (mm/dd/yyyy, dd/mm/yy, ...)
		p_item	: Return Item.
	*/

	p_item = arguments[0];
	if (arguments[1] == "")
		p_month = new String(gNow.getMonth());
	else
		p_month = arguments[1]  - 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 = "MM/DD/YYYY";
	else
		p_format = arguments[3];
	if (arguments[4] == null) {
		p_target = -1;
	} else {
		p_target = arguments[4];
	}
	
	mode = 0;

	vWinCal = window.open("", "Calendar", 
		"width=250,height=250,status=no,resizable=yes,top=200,left=200");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, p_month, p_year, p_format, p_target);
}

function show_calendar2() {
	/* 
		p_month : 0-11 for Jan-Dec; 12 for All Months.
		p_year	: 4-digit year
		p_format: Date format (mm/dd/yyyy, dd/mm/yy, ...)
		p_item	: Return Item.
	*/

	p_item = arguments[0];
	if (arguments[1] == "")
		p_month = new String(gNow.getMonth());
	else
		p_month = arguments[1]  - 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 = "MM/DD/YYYY";
	else
		p_format = arguments[3];
	if (arguments[4] == null) {
		p_target = -1;
	} else {
		p_target = arguments[4];
	}
	
	mode = 1;

	//vWinCal = window.open("", "Calendar", 
	//	"width=250,height=250,status=no,resizable=yes,top=200,left=200");
	//vWinCal.opener = self;
	//ggWinCal = vWinCal;

	Build(p_item, p_month, p_year, p_format, p_target);
	
	CalendarItem.innerHTML = strCalendarHTML;
}
/*
Yearly Calendar Code Starts here
*/
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 = "MM/DD/YYYY";

	var vWinCal = window.open("", "Calendar", "scrollbars=yes");
	vWinCal.opener = self;
	ggWinCal = vWinCal;

	Build(p_item, null, p_year, p_format);
}
