//
// JavaScript Calendar Component
// Date:   23-11-2001

// DATE FORMAT OPTIONS:
//
// dd							= 1 or 2-digit Day
// DD							= 2-digit Day
// mm						= 1 or 2-digit Month
// MM							= 2-digit Month
// yy								= 2-digit Year
// YY							= 4-digit Year
// yyyy						= 4-digit Year
// month   		= Month name in lowercase letters
// Month				= Month name in initial caps
// MONTH			= Month name in captital letters
// mon						= 3-letter month abbreviation in lowercase letters
// Mon						= 3-letter month abbreviation in initial caps
// MON					= 3-letter month abbreviation in uppercase letters
// weekday		= name of week in lowercase letters
// Weekday		= name of week in initial caps
// WEEKDAY	= name of week in uppercase letters
// wkdy					= 3-letter weekday abbreviation in lowercase letters
// Wkdy					= 3-letter weekday abbreviation in initial caps
// WKDY					= 3-letter weekday abbreviation in uppercase letters
//
// Examples:
//
// calDateFormat = "mm/dd/yy";
// calDateFormat = "Weekday, Month dd, yyyy";
// calDateFormat = "wkdy, mon dd, yyyy";

calDateFormat			= "dd-mm-yyyy";


// CALENDAR COLORS

topBackground					= "aliceblue";												// BG COLOR OF THE TOP FRAME
bottomBackground	= "navy";															// BG COLOR OF THE BOTTOM FRAME
tableBGColor							= "black"; 														// BG COLOR OF THE BOTTOM FRAME'S TABLE
cellColor										= "ebebeb";													// TABLE CELL BG COLOR OF THE DATE CELLS IN THE BOTTOM FRAME
headingCellColor			= "yellow";														// TABLE CELL BG COLOR OF THE WEEKDAY ABBREVIATIONS
headingTextColor		= "black";															// TEXT COLOR OF THE WEEKDAY ABBREVIATIONS
dateColor									= "blue";																// TEXT COLOR OF THE LISTED DATES (1-28+)
focusColor								= "#ff0000";												// TEXT COLOR OF THE SELECTED DATE (OR CURRENT DATE)
hoverColor								= "darkred";												// TEXT COLOR OF A LINK WHEN YOU HOVER OVER IT
fontStyle										= "10pt arial, helvetica";		// TEXT STYLE FOR DATES
headingFontStyle			= "10pt arial, helvetica";		// TEXT STYLE FOR WEEKDAY ABBREVIATIONS

// FORMATTING PREFERENCES

bottomBorder					= 0;																					// TRUE/FALSE (WHETHER TO DISPLAY BOTTOM CALENDAR BORDER)
tableBorder							= 0;																					// SIZE OF CALENDAR TABLE BORDER (BOTTOM FRAME) 0=none



// END USER-EDITABLE SECTION ------------------------
// DETERMINE BROWSER BRAND

var isNav = false;
var isIE  = false;

// ASSUME IT'S EITHER NETSCAPE OR MSIE
if (navigator.appName == "Netscape") {
    isNav = true;
}
else {
    isIE = true;
}

// GET CURRENTLY SELECTED LANGUAGE
selectedLanguage = navigator.language;

// PRE-BUILD PORTIONS OF THE CALENDAR WHEN THIS JS LIBRARY LOADS INTO THE BROWSER

buildCalParts();



// CALENDAR FUNCTIONS BEGIN HERE ---------------------
// SET THE INITIAL VALUE OF THE GLOBAL DATE FIELD

function setDateField(dateField,day,month,year)
	{
	// ASSIGN THE INCOMING FIELD OBJECT TO A GLOBAL VARIABLE
	calDateField = dateField;
	dayField = day;
	monField = month;
	yearField = year

	// GET THE VALUE OF THE INCOMING FIELD
	inDate = dateField.value;

	// SET calDate TO THE DATE IN THE INCOMING FIELD OR DEFAULT TO TODAY'S DATE
	setInitialDate();

	// THE CALENDAR FRAMESET DOCUMENTS ARE CREATED BY JAVASCRIPT FUNCTIONS
	calDocTop    = buildTopCalFrame();
	calDocBottom = buildBottomCalFrame();
	}
//endFunction



function setInitialDate()
	{
	var i1    = inDate.indexOf("-");
	var i2    = inDate.indexOf("-",3);
	var mm    = inDate.substring(i1+1,i2);
	var dd    = inDate.substring(0,i1);
	var yyyy  =  inDate.substring(i2+1,inDate.length);

	var dt = mm+" "+dd+", "+yyyy;
	calDate  = new Date(dt);

	if (isNaN(calDate))
		{
		calDate = new Date();
		}
	//endIf
	calDay  = calDate.getDate();
	calDate.setDate(1);
	}
//endFunction



function showCalendar(dateField)
	{
	setDateField(dateField);

	// USE THE JAVASCRIPT-GENERATED DOCUMENTS (calDocTop, calDocBottom) IN THE FRAMESET
	calDocFrameset =
	"<HTML><HEAD><TITLE>Date Picker</TITLE></HEAD>" +
	"<FRAMESET ROWS='30,70' FRAMEBORDER='0' border='0'>" +
	"  <FRAME NAME='topCalFrame' SRC='javascript:parent.opener.calDocTop' SCROLLING='no' frameborder='0' framespacing='0' marginheight='0' marginwidth='0' />" +
	"  <FRAME NAME='bottomCalFrame' SRC='javascript:parent.opener.calDocBottom' SCROLLING='no' frameborder='0' framespacing='0' marginheight='0' marginwidth='0' />" +
	"</FRAMESET>";
	top.newWin = window.open("javascript:parent.opener.calDocFrameset", "calWin", winPrefs);
	top.newWin.focus();
	}
//endFunction


// CREATE THE TOP CALENDAR FRAME

function buildTopCalFrame()
	{
	// CREATE THE TOP FRAME OF THE CALENDAR
	var calDoc =
	"<HTML>" +
	"<HEAD>" +
	"</HEAD>" +
	"<SCRIPT LANGUAGE='JavaScript' SRC='calendar.js'></SCRIPT> " +
	"<BODY BGCOLOR='" + topBackground + "'>" +
	"<FORM NAME='calControl' onSubmit='return false;'>" +
	"<CENTER>" +
	"<TABLE CELLPADDING='0' CELLSPACING='3' BORDER='0'>" +
	"<TBODY>"+
	"<TR><TD COLSPAN='7'>" +
	"Month" +
	getMonthSelect() + "&nbsp;&nbsp;&nbsp;"+
	getYearSelect()+
	//       "<INPUT NAME='year' VALUE='" + calDate.getFullYear() + "'TYPE=TEXT SIZE='4' MAXLENGTH='4' " +
	"</CENTER>" +
	"</TD>" +
	"</TR>" +
	"<TR>" +
	"<TD COLSPAN='7'>" +
	//        "<INPUT " +
	//       "TYPE='BUTTON' NAME='previousYear' VALUE='<<'    onClick='parent.opener.setPreviousYear()' />
	//        "<INPUT TYPE='BUTTON' NAME='previousMonth' VALUE='- Month'                 onClick='parent.opener.setPreviousMonth()' />"+
	"<p align='center'><INPUT TYPE='BUTTON' NAME='today' VALUE='Today[Default]' onClick='parent.opener.setToday()' /></p>"+
	//        "<INPUT TYPE='BUTTON' NAME='nextMonth' VALUE='+ Month '   onClick='parent.opener.setNextMonth()'>" +
	//        "<INPUT TYPE='BUTTON' NAME='nextYear'   VALUE='>>'  onClick='parent.opener.setNextYear()' />" +
	"</TD>" +
	"</TR>" +
	"</TBODY>"+
	"</TABLE>" +
	"</CENTER>" +
	"</FORM>" +
	"</BODY>" +
	"</HTML>";

	return calDoc;
	}
//endFunction




function buildBottomCalFrame()
	{
	// CREATE THE BOTTOM CALENDAR FRAME
	// (THE MONTHLY CALENDAR)
	var calDoc = calendarBegin;

	// GET MONTH, AND YEAR FROM GLOBAL CALENDAR DATE

	month   = calDate.getMonth();
	year    = calDate.getFullYear();

	// GET GLOBALLY-TRACKED DAY VALUE (PREVENTS JAVASCRIPT DATE ANOMALIES)
	day     = calDay;
	var i   = 0;

	// DETERMINE THE NUMBER OF DAYS IN THE CURRENT MONTH
	var days = getDaysInMonth();

	// IF GLOBAL DAY VALUE IS > THAN DAYS IN MONTH, HIGHLIGHT LAST DAY IN MONTH
	if (day > days)
		{
		day = days;
		}
	//endIf

	// DETERMINE WHAT DAY OF THE WEEK THE CALENDAR STARTS ON
	var firstOfMonth = new Date (year, month, 1);

	// GET THE DAY OF THE WEEK THE FIRST DAY OF THE MONTH FALLS ON
	var startingPos  = firstOfMonth.getDay();
	days += startingPos;

	// KEEP TRACK OF THE COLUMNS, START A NEW ROW AFTER EVERY 7 COLUMNS
	var columnCount = 0;

	// MAKE BEGINNING NON-DATE CELLS BLANK
	for (i = 0; i < startingPos; i++)
		{
		calDoc += blankCell;
		columnCount++;
		}
	//endFor

	// SET VALUES FOR DAYS OF THE MONTH
	var currentDay = 0;
	var dayType    = "weekday";

	// DATE CELLS CONTAIN A NUMBER
	for (i = startingPos; i < days; i++)
		{
		var paddingChar = "&nbsp;";

		// ADJUST SPACING SO THAT ALL LINKS HAVE RELATIVELY EQUAL WIDTHS
		if (i-startingPos+1 < 10)
			{
			padding = "&nbsp;&nbsp;";
			}
		else
			{
			padding = "&nbsp;";
			}
		//endIf-Else

		// GET THE DAY CURRENTLY BEING WRITTEN
		currentDay = i-startingPos+1;

		// SET THE TYPE OF DAY, THE focusDay GENERALLY APPEARS AS A DIFFERENT COLOR
		if (currentDay == day)
			{
			dayType = "focusDay";
			}
		else
			{
			dayType = "weekDay";
			}
		//endIf-Else

		// ADD THE DAY TO THE CALENDAR STRING
		calDoc += "<TD align=center bgcolor='" + cellColor + "'>" +
		"<a class='" + dayType + "' href='javascript:parent.opener.returnDate(" +
		currentDay + ")'>" + padding + currentDay + paddingChar + "</a></TD>";

		columnCount++;

		// START A NEW ROW WHEN NECESSARY
		if (columnCount % 7 == 0)
			{
			calDoc += "</TR><TR>";
			}
		//endIf
		}
	//endFor

	// MAKE REMAINING NON-DATE CELLS BLANK
	for (i=days; i<42; i++)
		{
		calDoc += blankCell;
		columnCount++;

		// START A NEW ROW WHEN NECESSARY
		if (columnCount % 7 == 0)
			{
			calDoc += "</TR>";
			if (i<41)
				{
				calDoc += "<TR>";
				}
			//endIf
			}
		//endIf
		}
	//endFor

	// FINISH THE NEW CALENDAR PAGE
	calDoc += calendarEnd;

	// RETURN THE COMPLETED CALENDAR PAGE
	return calDoc;
	}
//endFunction



function writeCalendar()
	{
	// WRITE THE MONTHLY CALENDAR TO THE BOTTOM CALENDAR FRAME

	// CREATE THE NEW CALENDAR FOR THE SELECTED MONTH & YEAR
	calDocBottom = buildBottomCalFrame();

	// WRITE THE NEW CALENDAR TO THE BOTTOM FRAME
	top.newWin.frames['bottomCalFrame'].document.open();
	top.newWin.frames['bottomCalFrame'].document.write(calDocBottom);
	top.newWin.frames['bottomCalFrame'].document.close();
	}
//endFunction


function setToday()
	{
	// SET THE CALENDAR TO TODAY'S DATE AND DISPLAY THE NEW CALENDAR

	// SET GLOBAL DATE TO TODAY'S DATE
	calDate = new Date();

	// SET DAY MONTH AND YEAR TO TODAY'S DATE
	var month	= calDate.getMonth();
	var year			= calDate.getFullYear();

	// SET MONTH IN DROP-DOWN LIST
	var objMonthSelect=top.newWin.frames['topCalFrame'].document.calControl.month;
	objMonthSelect.selectedIndex = month;

	// SET YEAR VALUE
	var objYearSelect=top.newWin.frames['topCalFrame'].document.calControl.year;
	for (var i=0;i<objYearSelect.length;i++)
		{
		if(objYearSelect[i].value==year)
			{
			objYearSelect.SelectedIndex=i;
			objYearSelect.value = year;
			}
		//endIf
		}
	//endFor

	// DISPLAY THE NEW CALENDAR
	writeCalendar();
	}
//endFunction


function setYear()
	{
	// SET THE GLOBAL DATE TO THE NEWLY ENTERED YEAR AND REDRAW THE CALENDAR

	// GET THE NEW YEAR VALUE
	var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;

	// IF IT'S A FOUR-DIGIT YEAR THEN CHANGE THE CALENDAR
	if (isFourDigitYear(year))
		{
		calDate.setFullYear(year);
		writeCalendar();
		}
	else
		{
		// HIGHLIGHT THE YEAR IF THE YEAR IS NOT FOUR DIGITS IN LENGTH
		top.newWin.frames['topCalFrame'].document.calControl.year.focus();
		top.newWin.frames['topCalFrame'].document.calControl.year.select();
		}
	//endIf-Else
	}
//endFunction


// SET THE GLOBAL DATE TO THE SELECTED MONTH AND REDRAW THE CALENDAR
function setCurrentMonth() {

    // GET THE NEWLY SELECTED MONTH AND CHANGE THE CALENDAR ACCORDINGLY
    var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex;

    calDate.setMonth(month);
    writeCalendar();
}
// SET THE GLOBAL DATE TO THE SELECTED YEAR AND REDRAW THE CALENDAR
function setCurrentYear() {

    // GET THE NEWLY SELECTED YEAR AND CHANGE THE CALENDAR ACCORDINGLY
    var year = top.newWin.frames['topCalFrame'].document.calControl.year.selectedIndex;

    calDate.setYear(year);
    writeCalendar();
}

// SET THE GLOBAL DATE TO THE PREVIOUS YEAR AND REDRAW THE CALENDAR
function setPreviousYear() {

    var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;

    if (isFourDigitYear(year) && year > 1000) {
        year--;
        calDate.setFullYear(year);
        top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
        writeCalendar();
    }
}


// SET THE GLOBAL DATE TO THE PREVIOUS MONTH AND REDRAW THE CALENDAR
function setPreviousMonth() {

    var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
    if (isFourDigitYear(year)) {
        var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex;

        // IF MONTH IS JANUARY, SET MONTH TO DECEMBER AND DECREMENT THE YEAR
        if (month == 0) {
            month = 11;
            if (year > 1000) {
//                year--;
                calDate.setFullYear(year);
                top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
            }
        }
        else {
            month--;
        }
        calDate.setMonth(month);
        top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month;
        writeCalendar();
    }
}


// SET THE GLOBAL DATE TO THE NEXT MONTH AND REDRAW THE CALENDAR
function setNextMonth() {

    var year = top.newWin.frames['topCalFrame'].document.calControl.year.value;

    if (isFourDigitYear(year)) {
        var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex;

        // IF MONTH IS DECEMBER, SET MONTH TO JANUARY AND INCREMENT THE YEAR
        if (month == 11) {
            month = 0;

//              year++;

            calDate.setFullYear(year);
            top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
        }
        else {
            month++;
        }
        calDate.setMonth(month);
        top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month;
        writeCalendar();
    }
}


// SET THE GLOBAL DATE TO THE NEXT YEAR AND REDRAW THE CALENDAR
function setNextYear() {

    var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
    if (isFourDigitYear(year)) {
       year++;
        calDate.setFullYear(year);
        top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
        writeCalendar();
    }
}


// GET NUMBER OF DAYS IN MONTH
function getDaysInMonth()  {

    var days;
    var month = calDate.getMonth()+1;
    var year  = calDate.getFullYear();

    // RETURN 31 DAYS
    if (month==1 || month==3 || month==5 || month==7 || month==8 ||
        month==10 || month==12)  {
        days=31;
    }
    // RETURN 30 DAYS
    else if (month==4 || month==6 || month==9 || month==11) {
        days=30;
    }
    // RETURN 29 DAYS
    else if (month==2)  {
        if (isLeapYear(year)) {
            days=29;
        }
        // RETURN 28 DAYS
        else {
            days=28;
        }
    }
    return (days);
}


// CHECK TO SEE IF YEAR IS A LEAP YEAR
function isLeapYear (Year) {

    if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
        return (true);
    }
    else {
        return (false);
    }
}


// ENSURE THAT THE YEAR IS FOUR DIGITS IN LENGTH
function isFourDigitYear(year) {

    if (year.length != 4) {
        top.newWin.frames['topCalFrame'].document.calControl.year.value = calDate.getFullYear();
        top.newWin.frames['topCalFrame'].document.calControl.year.select();
        top.newWin.frames['topCalFrame'].document.calControl.year.focus();
    }
    else {
        return true;
    }
}


// BUILD THE MONTH SELECT LIST
function getMonthSelect() {

    // BROWSER LANGUAGE CHECK DONE PREVIOUSLY (navigator.language())
    // FIRST TWO CHARACTERS OF LANGUAGE STRING SPECIFIES THE LANGUAGE
    // (THE LAST THREE OPTIONAL CHARACTERS SPECIFY THE LANGUAGE SUBTYPE)
    // SET THE NAMES OF THE MONTH TO THE PROPER LANGUAGE (DEFAULT TO ENGLISH)

    // IF FRENCH
    if (selectedLanguage == "fr") {
        monthArray = new Array('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin',
                               'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre');
    }
    // IF GERMAN
    else if (selectedLanguage == "de") {
        monthArray = new Array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni',
                               'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');
    }
    // IF SPANISH
    else if (selectedLanguage == "es") {
        monthArray = new Array('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',
                               'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
    }
    // DEFAULT TO ENGLISH
    else {
        monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June',
                               'July', 'August', 'September', 'October', 'November', 'December');
    }

    // DETERMINE MONTH TO SET AS DEFAULT
    var activeMonth = calDate.getMonth();

    // START HTML SELECT LIST ELEMENT
    monthSelect = "<SELECT NAME='month' onChange='parent.opener.setCurrentMonth()'>";

    // LOOP THROUGH MONTH ARRAY
    for (i in monthArray) {

        // SHOW THE CORRECT MONTH IN THE SELECT LIST
        if (i == activeMonth) {
            monthSelect += "<OPTION SELECTED='true'>" + monthArray[i] + "</OPTION>\n";
        }
        else {
            monthSelect += "<OPTION>" + monthArray[i] + "</OPTION>\n";
        }
    }
    monthSelect += "</SELECT>";

    // RETURN A STRING VALUE WHICH CONTAINS A SELECT LIST OF ALL 12 MONTHS
    return monthSelect;
}

//SETH THE YEAR STARTING FROM 2001 TO CURRENT YEAR
function getYearSelect()
 {
   yearselect ="<SELECT NAME='year' onChange='parent.opener.setCurrentYear()'>";
   for (var i=2002;i<=calDate.getYear();++i)

   {
    yearselect+="<option value=" + i + ">" + i +"\n";
   }
    yearselect+="</SELECT>";
    return yearselect;
 }

// SET DAYS OF THE WEEK DEPENDING ON LANGUAGE
function createWeekdayList() {

    // IF FRENCH
    if (selectedLanguage == "fr") {
        weekdayList  = new Array('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi');
        weekdayArray = new Array('Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa');
    }
    // IF GERMAN
    else if (selectedLanguage == "de") {
        weekdayList  = new Array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');
        weekdayArray = new Array('So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa');
    }
    // IF SPANISH
    else if (selectedLanguage == "es") {
        weekdayList  = new Array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado')
        weekdayArray = new Array('Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa');
    }
    else {
        weekdayList  = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
        weekdayArray = new Array('Su','Mo','Tu','We','Th','Fr','Sa');
    }

    // START HTML TO HOLD WEEKDAY NAMES IN TABLE FORMAT
    var weekdays = "<TR BGCOLOR='" + headingCellColor + "'>";

    // LOOP THROUGH WEEKDAY ARRAY
    for (i in weekdayArray) {

        weekdays += "<TD class='heading' align=center>" + weekdayArray[i] + "</TD>";
    }
    weekdays += "</TR>";

    // RETURN TABLE ROW OF WEEKDAY ABBREVIATIONS TO DISPLAY ABOVE THE CALENDAR
    return weekdays;
}


// PRE-BUILD PORTIONS OF THE CALENDAR (FOR PERFORMANCE REASONS)
function buildCalParts() {

    // GENERATE WEEKDAY HEADERS FOR THE CALENDAR
    weekdays = createWeekdayList();

    // BUILD THE BLANK CELL ROWS
    blankCell = "<TD align='center' bgcolor='" + cellColor + "'>&nbsp;&nbsp;&nbsp;</TD>";

    // BUILD THE TOP PORTION OF THE CALENDAR PAGE USING CSS TO CONTROL SOME DISPLAY ELEMENTS
    calendarBegin =
        "<HTML>" +
        "<HEAD>" +
        // STYLESHEET DEFINES APPEARANCE OF CALENDAR
        "<STYLE type='text/css'>" +
        "<!--" +
        "TD.heading { text-decoration: none; color:" + headingTextColor + "; font: " + headingFontStyle + "; }" +
        "A.focusDay:link { color: " + focusColor + "; text-decoration: none; font: " + fontStyle + "; }" +
        "A.focusDay:hover { color: " + focusColor + "; text-decoration: none; font: " + fontStyle + "; }" +
        "A.weekday:link { color: " + dateColor + "; text-decoration: none; font: " + fontStyle + "; }" +
        "A.weekday:hover { color: " + hoverColor + "; font: " + fontStyle + "; }" +
        "-->" +
        "</STYLE>" +
        "</HEAD>" +
        "<BODY BGCOLOR='" + bottomBackground + "'" +
        "<CENTER>";

        // NAVIGATOR NEEDS A TABLE CONTAINER TO DISPLAY THE TABLE OUTLINES PROPERLY
        if (isNav) {
            calendarBegin +=
                "<TABLE CELLPADDING='0' CELLSPACING='1' BORDER=" + tableBorder + " ALIGN='CENTER' BGCOLOR='" + tableBGColor + "'><TBODY><TR><TD>";
        }

        // BUILD WEEKDAY HEADINGS
        calendarBegin +=
            "<TABLE CELLPADDING='0' CELLSPACING='1' BORDER=" + tableBorder + " ALIGN='CENTER' BGCOLOR='" + tableBGColor + "'>" +
            weekdays +
            "<TR>";

// error here?

    // BUILD THE BOTTOM PORTION OF THE CALENDAR PAGE
    calendarEnd = "";

        // WHETHER OR NOT TO DISPLAY A THICK LINE BELOW THE CALENDAR
        if (bottomBorder) {
            calendarEnd += "<TR></TR>";
        }

        // NAVIGATOR NEEDS A TABLE CONTAINER TO DISPLAY THE BORDERS PROPERLY
        if (isNav) {
            calendarEnd += "</TD></TR></TBODY></TABLE>";
        }

        // END THE TABLE AND HTML DOCUMENT
        calendarEnd +=
            "</TBODY></TABLE>" +
            "</CENTER>" +
            "</BODY>" +
            "</HTML>";
}


// REPLACE ALL INSTANCES OF find WITH replace
// inString: the string you want to convert
// find:     the value to search for
// replace:  the value to substitute
//
// usage:    jsReplace(inString, find, replace);
// example:  jsReplace("To be or not to be", "be", "ski");
//           result: "To ski or not to ski"
//
function jsReplace(inString, find, replace) {

    var outString = "";

    if (!inString) {
        return "";
    }

    // REPLACE ALL INSTANCES OF find WITH replace
    if (inString.indexOf(find) != -1) {
        // SEPARATE THE STRING INTO AN ARRAY OF STRINGS USING THE VALUE IN find
        t = inString.split(find);

        // JOIN ALL ELEMENTS OF THE ARRAY, SEPARATED BY THE VALUE IN replace
        return (t.join(replace));
    }
    else {
        return inString;
    }
}



function doNothing() {
}


// ENSURE THAT VALUE IS TWO DIGITS IN LENGTH
function makeTwoDigit(inValue) {

    var numVal = parseInt(inValue, 10);

    // VALUE IS LESS THAN TWO DIGITS IN LENGTH
    if (numVal < 10) {

        // ADD A LEADING ZERO TO THE VALUE AND RETURN IT
        return("0" + numVal);
    }
    else {
        return numVal;
    }
}


// SET FIELD VALUE TO THE DATE SELECTED AND CLOSE THE CALENDAR WINDOW
function returnDate(inDay)
{

    // inDay = THE DAY THE USER CLICKED ON
    calDate.setDate(inDay);

    // SET THE DATE RETURNED TO THE USER
    var day           = calDate.getDate();
    var month         = calDate.getMonth()+1;
    var year          = calDate.getFullYear();
    var monthString   = monthArray[calDate.getMonth()];
    var monthAbbrev   = monthString.substring(0,3);
    var weekday       = weekdayList[calDate.getDay()];
    var weekdayAbbrev = weekday.substring(0,3);

    outDate = calDateFormat;

     dayField1 = day;
     monField1 = month;
     yearField1 = year;



    // RETURN TWO DIGIT DAY
    if (calDateFormat.indexOf("DD") != -1) {
        day = makeTwoDigit(day);
        outDate = jsReplace(outDate, "DD", day);
    }
    // RETURN ONE OR TWO DIGIT DAY
    else if (calDateFormat.indexOf("dd") != -1) {
        outDate = jsReplace(outDate, "dd", day);
        day = makeTwoDigit(day);
    }

    // RETURN TWO DIGIT MONTH
    if (calDateFormat.indexOf("MM") != -1) {
        month = makeTwoDigit(month);
        outDate = jsReplace(outDate, "MM", month);
    }
    // RETURN ONE OR TWO DIGIT MONTH
    else if (calDateFormat.indexOf("mm") != -1) {
     month = makeTwoDigit(month);
    outDate = jsReplace(outDate, "mm", month);
    }

    // RETURN FOUR-DIGIT YEAR
    if (calDateFormat.indexOf("yyyy") != -1) {
        outDate = jsReplace(outDate, "yyyy", year);
    }
    // RETURN TWO-DIGIT YEAR
    else if (calDateFormat.indexOf("yy") != -1) {
        var yearString = "" + year;
        var yearString = yearString.substring(2,4);
        outDate = jsReplace(outDate, "yy", yearString);
    }
    // RETURN FOUR-DIGIT YEAR
    else if (calDateFormat.indexOf("YY") != -1) {
        outDate = jsReplace(outDate, "YY", year);
    }

    // RETURN DAY OF MONTH (Initial Caps)
    if (calDateFormat.indexOf("Month") != -1) {
        outDate = jsReplace(outDate, "Month", monthString);
    }
    // RETURN DAY OF MONTH (lowercase letters)
    else if (calDateFormat.indexOf("month") != -1) {
        outDate = jsReplace(outDate, "month", monthString.toLowerCase());
    }
    // RETURN DAY OF MONTH (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("MONTH") != -1) {
        outDate = jsReplace(outDate, "MONTH", monthString.toUpperCase());
    }

    // RETURN DAY OF MONTH 3-DAY ABBREVIATION (Initial Caps)
    if (calDateFormat.indexOf("Mon") != -1) {
        outDate = jsReplace(outDate, "Mon", monthAbbrev);
    }
    // RETURN DAY OF MONTH 3-DAY ABBREVIATION (lowercase letters)
    else if (calDateFormat.indexOf("mon") != -1) {
        outDate = jsReplace(outDate, "mon", monthAbbrev.toLowerCase());
    }
    // RETURN DAY OF MONTH 3-DAY ABBREVIATION (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("MON") != -1) {
        outDate = jsReplace(outDate, "MON", monthAbbrev.toUpperCase());
    }

    // RETURN WEEKDAY (Initial Caps)
    if (calDateFormat.indexOf("Weekday") != -1) {
        outDate = jsReplace(outDate, "Weekday", weekday);
    }
    // RETURN WEEKDAY (lowercase letters)
    else if (calDateFormat.indexOf("weekday") != -1) {
        outDate = jsReplace(outDate, "weekday", weekday.toLowerCase());
    }
    // RETURN WEEKDAY (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("WEEKDAY") != -1) {
        outDate = jsReplace(outDate, "WEEKDAY", weekday.toUpperCase());
    }

    // RETURN WEEKDAY 3-DAY ABBREVIATION (Initial Caps)
    if (calDateFormat.indexOf("Wkdy") != -1) {
        outDate = jsReplace(outDate, "Wkdy", weekdayAbbrev);
    }
    // RETURN WEEKDAY 3-DAY ABBREVIATION (lowercase letters)
    else if (calDateFormat.indexOf("wkdy") != -1) {
        outDate = jsReplace(outDate, "wkdy", weekdayAbbrev.toLowerCase());
    }
    // RETURN WEEKDAY 3-DAY ABBREVIATION (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("WKDY") != -1) {
        outDate = jsReplace(outDate, "WKDY", weekdayAbbrev.toUpperCase());
    }


    // SET THE VALUE OF THE FIELD THAT WAS PASSED TO THE CALENDAR
    calDateField.value = outDate;
    dayField.value = dayField1;
    monField.value = monField1;
    yearField.value = yearField1;

    // GIVE FOCUS BACK TO THE DATE FIELD
    //calDateField.focus();
    dayField.focus();
    monField.focus();
    yearField.focus();

    // CLOSE THE CALENDAR WINDOW
    top.newWin.close()
}

