//<!--

//---------------------------------------------------------------------------
//
// File:    DHTMLCal.js
//
// Purpose: This is the source file for the DHTML Calendar
//
//	    This program is shareware
//          If you use this program, please send $20
//          You'll find the address to send to at
//          http://www.geocities.com/dshipe/cadown.htm
//
// Author:  Dan Shipe
//          dshipe@writeme.com
//          http://www.geocities.com/dshipe
//
//    Date    By  Description
// ---------- --- ----------------------------------------------------------
// 08/11/1998 DS  Initial creation.
//---------------------------------------------------------------------------

/*
 font point size chart
 size 1 	=  8pt
 size 2		= 10pt
 size 3		= 12pt
 size 4		= 14pt
 size 5		= 18pt
 size 6		= 24pt
*/

// ---------------------------------------------------------------------------
// initialization

var R = "\r\n";

var mclrBlack =		"#000000";
var mclrWhite =		"#ffffff";
var mclrDeadWhite = 	"#fffffe";
var mclrOffWhite = 	"#e1e1e1";
var mclrLightGray = 	"#c0c0c0";
var mclrGray =		"#888888";

var mclrYellow =        "#ffe1c0";
var mclrPurple =	"#ff00ff";
var mclrBlue =		"#0000ff";
var mclrRed =		"#ff0000";
var mclrGreen =		"#00ff00";
var mclrPink =		"#ffc0c0";

var mclrLightYellow =	"#ffffc0";
var mclrLightOrange =	"#e1e1c0";

var mclrDarkPurple =	"#880088";
var mclrDarkBlue =	"#000088";
var mclrDarkRed =	"#880000";
var mclrDarkGreen =	"#008800";

// ---------------------------------------------------------------------------
// custom sizes, colors and fonts

var mclrTableBg = mclrDeadWhite;     // table background DO NOT CHANGE
var mclrDead	= mclrLightGray;     // background date cell color - unused this month
var mclrNow	 	= mclrLightYellow;   // background date cell color - the current date
var mclrPast	= mclrOffWhite;      // background date cell color - previous dates
var mclrFuture	= mclrWhite;         // background date cell color - future dates
var mclrBorder	= mclrDarkRed;       // border color of calendar

var mnCellWidth  = 100;               // width of weekday columns and dates
var mnCellHeight = 100;               // height of date cells 

// font sizes and colors for the weekday headers (Mon, Tues, Wed...)
var mclrHdrBg	 = "#003399";
var mclrHdrText	 = mclrWhite;
var mstrHdrFace  = "Arial, Helvetica, Sans Serif";
var mstrHdrSize  = "2";

// font sizes and colors for date (1st, 3rd, 15th...)
var mclrNumText	  = mclrHdrBg;
var mstrNumFace   = "Arial, Helvetica, Sans Serif";
var mstrNumSize   = "2";

// font sizes and colors for the event text
var mclrCellText   = mclrBorder;
var mstrCellFace   = "Comic Sans MS, Arial, Helvetica, Sans Serif";
var mstrCellSize   = "2";

var maDaysPerMonth = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); 
var maLongDays	   = new Array( "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
var maLongMonths   = new Array( "January", "February", "March", "April", "May", "June", "July", "August", 
			"September", "October", "November", "December" );

var maYear = new Array();
var maMonth = new Array();
var maDay = new Array();
var maText = new Array();

// ---------------------------------------------------------------------------------------
function DHTMLCal_SetEvent( m, d, y, strText) {
	var x = maDay.length;

	maYear[x +1]   = y;
	maMonth[x + 1] = m-1;
	maDay[x + 1]   = d;
	maText[x + 1]  = strText;
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_GetEvent( m, d, y ) {
	var x = 0;
	while( x < maDay.length ) {
		if ( y == maYear[x] ) {
			if ( m == maMonth[x] ) {
				if ( d == maDay[x] ) { 
					return maText[x];
				}
			}
		}
		x++;
	}
	return "&nbsp";
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_CheckLeapYear(m, y) {
	var x = 2;	

	if ( m == x ) {
        	if ( y % 4 == 0 ) {
               		if ( y % 100 == 0) {
                    	if ( y % 400 == 0) {maDaysPerMonth[x] = 29;}
							else {maDaysPerMonth[x] = 28;}
               		} else {
                    	maDaysPerMonth[x] = 29;
			}
		}
	}
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_FillMonth( m ) {
	var strHTML = "";

	for ( i=0; i<=11; i++ ) {
		var strSelected = "";
		if ( i == m ) strSelected = "selected";

		strHTML = strHTML + "<option value='" + i + "' " + strSelected + " >" + maLongMonths[i] + "</option>" + R;
	};
	return strHTML;
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_FillYear( y ) {
	var strHTML = "";

	for ( i=y-1; i<=y+5; i++ ) {
		var strSelected = "";
		if ( i == y ) strSelected = "selected";

		strHTML = strHTML + "<option value='" + i + "' " + strSelected + " >" + i + "</option>" + R;
	};
	return strHTML;
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_Form( m, y, wd ) {
	var strHTML;
	var strTag;	
	var strOutput = "";

	// ----- begin form
	strHTML = "<form name='frmCal' method='post' action=''>" + R;
	strOutput = strOutput + strHTML;

	// ----- begin table
	strHTML = "<table align=right"
//		+ " width='" + (mnCellWidth * 7) + "'"
		+ " >" + R;
	strOutput = strOutput + strHTML;

	// ----- month & year selector
	strHTML = "<tr><td align=right"
//		+ " bgcolor=" + mclrHdrBg
		+ " >" + R + R;
	strOutput = strOutput + strHTML;

	// ----- month combo
	strHTML = "<select name='cboMonth'"
		+ " onchange='DHTMLCal_Update("
		+ " frmCal.cboMonth.options[frmCal.cboMonth.selectedIndex].value,"
		+ " frmCal.cboYear.options[frmCal.cboYear.selectedIndex].value,"
		+ " frmCal.dateAlign.options[frmCal.dateAlign.selectedIndex].value);'>" + R
		+ DHTMLCal_FillMonth(m)
		+ "</select>" + R + R;
	strOutput = strOutput + strHTML;

	// ----- year combo
	strHTML = "&nbsp"
		+ "<select name='cboYear'"
		+ " onchange='DHTMLCal_Update("
		+ " frmCal.cboMonth.options[frmCal.cboMonth.selectedIndex].value,"
		+ " frmCal.cboYear.options[frmCal.cboYear.selectedIndex].value,"
		+ " frmCal.dateAlign.options[frmCal.dateAlign.selectedIndex].value);'>" + R
		+ DHTMLCal_FillYear(y)
		+ "</select>" + R + R
		+ "</td></tr>" + R;
	strOutput = strOutput + strHTML;
	
	// ----- date placement
	strHTML = "<tr><td align=right style='font-family:Arial; font-weight:bold; font-size:smaller'>"
		+ "Date placement: "
		+ "<select name='dateAlign'"
		+ " onchange='DHTMLCal_Update("
		+ " frmCal.cboMonth.options[frmCal.cboMonth.selectedIndex].value,"
		+ " frmCal.cboYear.options[frmCal.cboYear.selectedIndex].value,"
		+ " frmCal.dateAlign.options[frmCal.dateAlign.selectedIndex].value);'>" + R
		if (wd == 0) {strHTML += "<option value=0 selected>upper left" + R;}
			else {strHTML += "<option value=0>upper left" + R;}
		if (wd == 1) {strHTML += "<option value=1 selected>upper right" + R;}
			else {strHTML += "<option value=1>upper right" + R;}
		if (wd == 2) {strHTML += "<option value=2 selected>lower left" + R;}
			else {strHTML += "<option value=2>lower left" + R;}
		if (wd == 3) {strHTML += "<option value=3 selected>lower right" + R;}
			else {strHTML += "<option value=3>lower right" + R;}
	strHTML += "</select>" + R + R + "</td></tr>" + R + "</table></form>" + R + R;
	strOutput = strOutput + strHTML;

	document.writeln(strOutput);
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_Draw( m, y, wd ) {
	var strOutput;

	strOutput = DHTMLCal_Create( m, y, 1 );

	if (!document.all) {
		document.CALLAYER.document.writeln(strOutput);
	} else {
		document.writeln(strOutput);
	}
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_Update( m, y, wd ) {
	var strHTML = DHTMLCal_Create( m, y, wd );
	
	if (!document.all) {
		// ---- NETSCAPE
		document.CALLAYER.document.write(strHTML);
		document.CALLAYER.document.close();
	} else {
		// ---- INTERNET EXPLORER
		strHTML = DHTMLCal_Create( m, y, wd );
		document.all["CALDIV"].innerHTML = strHTML;
  	}
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_CheckColor( j, i, x, dteCal, dteNow, m ) {
	var strID = "r" + i + "c" + j; 
	var currD = dteCal.getDay();
	var currM = dteCal.getMonth();
	var currY = dteCal.getYear();

	// Is this a "dead" cell?
	if ( currD > (i + x) || currM != m ) {
		return mclrDead;
	} else {
		if ( dteCal.getYear() < dteNow.getYear()) {
			return mclrPast;
		} else if (dteCal.getYear() > dteNow.getYear()) {
			return mclrFuture;
		} else {				
			// Same year...
			if (dteCal.getMonth() < dteNow.getMonth() ) {
				return mclrPast;
			} else if (dteCal.getMonth() > dteNow.getMonth() ) {
				return mclrFuture;
			} else {
				// Same month...
				if (dteCal.getDate() < dteNow.getDate()) {
					return mclrPast;
				} else if (dteCal.getDate() > dteNow.getDate()) {
					return mclrFuture;
				} else {
					return mclrNow;
				}
			}
		}
	}
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_Create( m, y, wd ) {
	var strOutput = "";
	var strHTML;
	var strID;
	var nColor;
	var strCell;
	var strNum;
	var strText;
	var strTag;	

	var dteNow = new Date();
	var dteCal = new Date(y, m, 1);
	DHTMLCal_CheckLeapYear(m, y);


	// ----- find the first day and subrtact back to Sun
	dteCal.setDate( dteCal.getDate() - dteCal.getDay() );

	// ----- begin table
	strHTML = "<table align=center cellspacing=0"
		+ " bgColor=" + mclrTableBg
		+ " border='1'"
		+ " bordercolor='" + mclrBlack + "'"
		+ " bordercolordark='" + mclrBlack + "'"
		+ " bordercolorlight='" + mclrBlack + "'"
		+ " width=100%"
		//  + " width='" + (mnCellWidth * 7) + "'"
		+ " >";
	strOutput = strOutput + strHTML + R + R;

	// ----- Create the MONTH header
	strOutput = strOutput + "<tr>" + R;
		strHTML = "<td align=center colspan=7"
			+ " bgcolor=" + mclrHdrBg
			+ " >"
			+ DHTMLCal_FontStr( mstrHdrFace, 4, mclrHdrText )
			+ " <b>" + maLongMonths[m] + " " + y
			+ " </b></font></td>";
		strOutput = strOutput + strHTML + R;
	strOutput = strOutput + "</tr>" + R + R;
	
	// ----- Create the WEEKDAY headers
	strOutput = strOutput + "<tr>" + R;
	for( i = 0; i < 7; i++) {
		strHTML = "<td align=center"
//			+ " width='" + mnCellWidth + "'"
			+ " width=14.3%"
			+ " bgcolor=" + mclrHdrBg
			+ " >"
			+ DHTMLCal_FontStr( mstrHdrFace, mstrHdrSize, mclrHdrText )
			+ " <b><center>" + maLongDays[i]
			+ " </center></b></font></td>";
		strOutput = strOutput + strHTML + R;
	}
	strOutput = strOutput + "</tr>" + R + R;

	// ----- now create calendar grid ( 7 columns by 6 rows ) 
	for (j = 0; j < 6; j++)	{
		if (j == 5) {
			nColor = DHTMLCal_CheckColor( j, 0, x, dteCal, dteNow, m );
			if (nColor == mclrDead) {break;}
		}

		x = 0;
		strOutput = strOutput + "<tr>"; // + R;
		for( i = 0; i < 7; i++) {

			// ----- create unique ID
			strID = "r" + i + "c" + j; 

			// ----- determine color and text
			nColor = DHTMLCal_CheckColor( j, i, x, dteCal, dteNow, m );
			if (nColor == mclrDead) {
				strCell="&nbsp;";
			} else {
				strNum = dteCal.getDate();
			//	strText = DHTMLCal_GetEvent(dteCal.getMonth(), dteCal.getDate(), dteCal.getFullYear());
				if (strText=="") strText=" ";
				strCell = DHTMLCal_FontStr(mstrNumFace, mstrNumSize, mclrNumText)
					+ "<strong>&nbsp;" + strNum + "</strong></font>"
			//		+ "<br>"
			//		+ DHTMLCal_FontStr(mstrCellFace, mstrCellSize, mclrCellText)
			//		+ strText + "</font>";
			}
	
			// ----- HTML for cell
			strHTML = "<td" 
//				+ " width=" + mnCellWidth 
				+ " width=14.3%"
				+ " height=" + mnCellHeight 
				+ " bgcolor=" + nColor;
			if (wd == 0) {strHTML += " align=left valign=top"}
			if (wd == 1) {strHTML += " align=right valign=top"}
			if (wd == 2) {strHTML += " align=left valign=bottom"}
			if (wd == 3) {strHTML += " align=right valign=bottom"}
				
			strHTML	+= " >";
			strOutput = strOutput + strHTML + strCell + "</td>" + R;
		
			dteCal.setDate( dteCal.getDate() + 1 );
		}
		x = x + 7;
		strOutput = strOutput + "</tr>" + R + R;
	}
	strOutput = strOutput + R + R;

	// ---- end the table, form
	strOutput = strOutput + "</table>";

	return strOutput;
}

// ---------------------------------------------------------------------------------------
function DHTMLCal_FontStr ( strFace, strSize, strColor ) {
	var strHTML = "<font"
		+ " face='"  + strFace  + "'"
		+ " size='"  + strSize  + "'"
		+ " color='" + strColor + "'"
		+ " >";
	return strHTML;
	
}
//-->


