calDateFormat    = "mm/dd/yyyy";

// Colors
topFrameBGColor    = "white";         
bottomFrameBGColor  = "white";        
tableBGColor     = "black";         
tdColor         = "lightgrey";     
headingCellColor = "white";         
headingTextColor = "black";         
dateColor        = "blue";          
focusColor       = "#ff0000";       
hoverColor       = "darkred";       
fontStyle        = "8pt arial, helvetica";           
headingFontStyle = "bold 8pt arial, helvetica";      
cen				 = "text-align: center; border: none";
image1			 = "arrow_left.gif"
image2			 = "arrow_right.gif"
// Formatting
bottomFrameBorder  = false;        
tableBorder   = 0;            

// Checking for Browser type
var Nav = false;
var IE  = false;

if (navigator.appName == "Netscape") {
    Nav = true;
}
else {
    IE = true;
}

// Loading Calendar into Browser
buildCalendar();

// Setting of Date Field
function setDateField(dateField) {

    calDateField = dateField;
    inDate = dateField.value;
    setInitialDate();
    calendarTop    = buildTopFrame();
    calendarBottom = buildBottomFrame();
}


// Setting of Date to today or to the value of the TextControl
function setInitialDate() {
   
    calendarDate = new Date(inDate);
    if (isNaN(calendarDate)) {
        calendarDate = new Date();
    }

    calendarDay  = calendarDate.getDate();
	calendarDate.setDate(1);
}




function showCalendar(dateField) {

    setDateField(dateField);
    calDocFrameset = 
        "<HTML><HEAD><TITLE>JavaScript Calendar</TITLE></HEAD>\n" +
        "<FRAMESET ROWS='70,*' FRAMEBORDER='0'>\n" +
        "  <FRAME NAME='topFrame' SRC='javascript:parent.opener.calendarTop' SCROLLING='no'>\n" +
       	"  <FRAME NAME='bottomFrame' SRC='javascript:parent.opener.calendarBottom' SCROLLING='no'>\n" +
        "</FRAMESET>\n";
    top.newWin = window.open("javascript:parent.opener.calDocFrameset", "calWin", winPrefs);
    top.newWin.focus();
}

// Creating Top Frame
function buildTopFrame() {
    var calDoc =
        "<HTML>" +
        "<HEAD>" +
        "</HEAD>" +
        "<BODY BGCOLOR='" + topFrameBGColor + "'>" +
        "<FORM NAME='frmCalendar' onSubmit='return false;'>" +
        "<CENTER>" +
        "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=0>" +
        "<TR><TD >" +
        "<CENTER>" +
        "<IMG SRC='" + image1 + "' NAME='previousMonth' onClick='parent.opener.setPreviousMonth()'>" +
	    getMonthSelect() +
		"<IMG SRC='" + image2 + "' NAME='nextMonth' onClick='parent.opener.setNextMonth()'>" +
		"</TD>" +
        "</TR>" +
        "<TR>" +
        "<TD align=center>" +
        "<IMG SRC='" + image1 + "' NAME='previousYear' onClick='parent.opener.setPreviousYear()'>" +
		"<INPUT style='" + cen + "' NAME='year' VALUE='" + calendarDate.getFullYear() + "'TYPE=TEXT SIZE=4 MAXLENGTH=4 onChange='parent.opener.setYear()'>" +
		"<IMG SRC='" + image2 + "' NAME='nextYear' onClick='parent.opener.setNextYear()'>" +		
		"</CENTER>" +
        "</TD>" +
        "</TR>" +
        "</TABLE>" +
        "</CENTER>" +
        "</FORM>" +
        "</BODY>" +
        "</HTML>";

    return calDoc;
}


// Creating Bottom Frame 
function buildBottomFrame() {       
    
    var calDoc = calendarBegin;

    month   = calendarDate.getMonth();
    year    = calendarDate.getFullYear();

    day     = calendarDay;

    var i   = 0;

    var days = getDaysInMonth();

    if (day > days) {
        day = days;
    }

    var firstOfMonth = new Date (year, month, 1);
    var startingPos  = firstOfMonth.getDay();
    days += startingPos;

    var columnCount = 0;

    for (i = 0; i < startingPos; i++) {

        calDoc += blankCell;
	columnCount++;
    }

    var currentDay = 0;
    var dayType    = "weekday";

    for (i = startingPos; i < days; i++) {

	var paddingChar = "&nbsp;";

        if (i-startingPos+1 < 10) {
            padding = "&nbsp;&nbsp;";
        }
        else {
            padding = "&nbsp;";
        }

        currentDay = i-startingPos+1;

        if (currentDay == day) {
            dayType = "focusDay";
        }
        else {
            dayType = "weekDay";
        }

        
        calDoc += "<TD align=center bgcolor='" + tdColor  + "'>" +
                  "<a class='" + dayType + "' href='javascript:parent.opener.returnDate(" + 
                  currentDay + ")'>" + padding + currentDay + paddingChar + "</a></TD>";

        columnCount++;

        if (columnCount % 7 == 0) {
            calDoc += "</TR><TR>";
        }
    }

    for (i=days; i<42; i++)  {

        calDoc += blankCell;
	columnCount++;

        if (columnCount % 7 == 0) {
            calDoc += "</TR>";
            if (i<41) {
                calDoc += "<TR>";
            }
        }
    }

    calDoc += calendarEnd;

    return calDoc;
}


function writeCalendar() {

    calendarBottom = buildBottomFrame();

    top.newWin.frames['bottomFrame'].document.open();
    top.newWin.frames['bottomFrame'].document.write(calendarBottom);
    top.newWin.frames['bottomFrame'].document.close();
}


// Setting to today's date
function setToday() {

    calendarDate = new Date();

    var month = calendarDate.getMonth();
    var year  = calendarDate.getFullYear();

    top.newWin.frames['topFrame'].document.frmCalendar.month.value = month;

    top.newWin.frames['topFrame'].document.frmCalendar.year.value = year;

    writeCalendar();
}


function setYear() {

    var year  = top.newWin.frames['topFrame'].document.frmCalendar.year.value;

    if (isFourDigitYear(year)) {
        calendarDate.setFullYear(year);
        writeCalendar();
    }
    else {
        top.newWin.frames['topFrame'].document.frmCalendar.year.focus();
        top.newWin.frames['topFrame'].document.frmCalendar.year.select();
    }
}


function setCurrentMonth() {
  monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June',
                               'July', 'August', 'September', 'October', 'November', 'December');
    


    var monthvalue = top.newWin.frames['topFrame'].document.frmCalendar.month.value;

      for (i in monthArray) {
        
      if (monthvalue == monthArray(i)) {
       month = i+1 ;
       exit;
        }
        
    }
    
    calendarDate.setMonth(1);
    writeCalendar();
}


function setPreviousYear() {

    var year  = top.newWin.frames['topFrame'].document.frmCalendar.year.value;

    if (isFourDigitYear(year) && year > 1000) {
        year--;
        calendarDate.setFullYear(year);
        top.newWin.frames['topFrame'].document.frmCalendar.year.value = year;
        writeCalendar();
    }
}


function setPreviousMonth() {
	var i;
	monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June',
                               'July', 'August', 'September', 'October', 'November', 'December');
    

	var monthvalue = top.newWin.frames['topFrame'].document.frmCalendar.month.value;
      
      for (i=0;i<12;i++) {
       if (monthvalue == monthArray[i]) {
       month = i  ;
       break;
       }
        
    }
    
    var year  = top.newWin.frames['topFrame'].document.frmCalendar.year.value;
    if (isFourDigitYear(year)) {
        

        if (month == 0) {
            month = 11;
            if (year > 1000) {
                year--;
                calendarDate.setFullYear(year);
                top.newWin.frames['topFrame'].document.frmCalendar.year.value = year;
            }
        }
        else {
            month--;
        }
        calendarDate.setMonth(month);
        top.newWin.frames['topFrame'].document.frmCalendar.month.value = monthArray[month];
        writeCalendar();
    }
}


function setNextMonth() {
var i;

monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June',
                               'July', 'August', 'September', 'October', 'November', 'December');
    
 var monthvalue = top.newWin.frames['topFrame'].document.frmCalendar.month.value;
      
      for (i=0;i<12;i++) {
       if (monthvalue == monthArray[i]) {
       month = i  ;
       break;
       }
        
    }

    var year = top.newWin.frames['topFrame'].document.frmCalendar.year.value;

    if (isFourDigitYear(year)) {
                
        
        if (month == 11) {
            month = 0;
            year++;
            calendarDate.setFullYear(year);
            top.newWin.frames['topFrame'].document.frmCalendar.year.value = year;
        }
        else {
            month++;
        }
        calendarDate.setMonth(month);
        top.newWin.frames['topFrame'].document.frmCalendar.month.value = monthArray[month];
        writeCalendar();
    }
}


function setNextYear() {

    var year  = top.newWin.frames['topFrame'].document.frmCalendar.year.value;
    if (isFourDigitYear(year)) {
        year++;
        calendarDate.setFullYear(year);
        top.newWin.frames['topFrame'].document.frmCalendar.year.value = year;
        writeCalendar();
    }
}


function getDaysInMonth()  {

    var days;
    var month = calendarDate.getMonth()+1;
    var year  = calendarDate.getFullYear();

    if (month==1 || month==3 || month==5 || month==7 || month==8 ||
        month==10 || month==12)  {
        days=31;
    }
    else if (month==4 || month==6 || month==9 || month==11) {
        days=30;
    }
    else if (month==2)  {
        if (isLeapYear(year)) {
            days=29;
        }
        else {
            days=28;
        }
    }
    return (days);
}


function isLeapYear (Year) {

    if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {
        return (true);
    }
    else {
        return (false);
    }
}


function isFourDigitYear(year) {

    if (year.length != 4) {
        top.newWin.frames['topFrame'].document.frmCalendar.year.value = calendarDate.getFullYear();
        top.newWin.frames['topFrame'].document.frmCalendar.year.select();
        top.newWin.frames['topFrame'].document.frmCalendar.year.focus();
    }
    else {
        return true;
    }
}


function getMonthSelect() {

   
        monthArray = new Array('January', 'February', 'March', 'April', 'May', 'June',
                               'July', 'August', 'September', 'October', 'November', 'December');
    

    var activeMonth = calendarDate.getMonth();

    for (i in monthArray) {
        
      if (i == activeMonth) {
      monthSelect = "<INPUT style='" + cen + "' NAME='month' value='"+monthArray[i]+"' TYPE=TEXT SIZE=10 MAXLENGTH=4 onChange='parent.opener.setCurrentMonth()'>" ;
	  }
	}	
      
    return monthSelect;
}


function createWeekdayList() {

        weekdayList  = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
        weekdayArray = new Array('S','M','T','W','T','F','S');
    

    var weekdays = "<TR BGCOLOR='" + headingCellColor + "'>";
	
	for(i=0; i<weekdayArray.length; ++i)
		weekdays += "<TD class='heading' align=center>" + weekdayArray[i] + "</TD>";

    weekdays += "</TR>";

    return weekdays;
}


function buildCalendar() {

    weekdays = createWeekdayList();

    blankCell = "<TD align=center bgcolor='" + tdColor  + "'>&nbsp;&nbsp;&nbsp;</TD>";

    calendarBegin =
        "<HTML>" +
        "<HEAD>" +
        "<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 LINK='BLUE' VLINK='BLUE' BGCOLOR='" + bottomFrameBGColor  + "'" +
        "<CENTER>";

        if (Nav) {
            calendarBegin += 
                "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=" + tableBorder + " ALIGN=CENTER BGCOLOR='" + tableBGColor + "'><TR><TD>";
        }

        calendarBegin +=
            "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=" + tableBorder + " ALIGN=CENTER BGCOLOR='" + tableBGColor + "'>" +
            weekdays +
            "<TR>";


    calendarEnd = "";

        if (bottomFrameBorder) {
            calendarEnd += "<TR></TR>";
        }

        if (Nav) {
            calendarEnd += "</TD></TR></TABLE>";
        }

        calendarEnd +=
            "</TABLE>" +
            "</CENTER>" +
            "</BODY>" +
            "</HTML>";
}


function jsReplace(inString, find, replace) {

    var outString = "";

    if (!inString) {
        return "";
    }

    if (inString.indexOf(find) != -1) {
        t = inString.split(find);

        return (t.join(replace));
    }
    else {
        return inString;
    }
}


function doNothing() {
}


function makeTwoDigit(inValue) {

    var numVal = parseInt(inValue, 10);

    if (numVal < 10) {

        return("0" + numVal);
    }
    else {
        return numVal;
    }
}


// Set the value and close the window
function returnDate(inDay)
{

    calendarDate.setDate(inDay);

    var day           = calendarDate.getDate();
    var month         = calendarDate.getMonth()+1;
    var year          = calendarDate.getFullYear();
    var monthString   = monthArray[calendarDate.getMonth()];
    var monthAbbrev   = monthString.substring(0,3);
    var weekday       = weekdayList[calendarDate.getDay()];
    var weekdayAbbrev = weekday.substring(0,3);

    outDate = calDateFormat;

    if (calDateFormat.indexOf("DD") != -1) {
        day = makeTwoDigit(day);
        outDate = jsReplace(outDate, "DD", day);
    }
    else if (calDateFormat.indexOf("dd") != -1) {
		day = makeTwoDigit(day);
        outDate = jsReplace(outDate, "dd", day);
    }


    if (calDateFormat.indexOf("MM") != -1) {
        month = makeTwoDigit(month);
        outDate = jsReplace(outDate, "MM", month);
    }
    else if (calDateFormat.indexOf("mm") != -1) {
		month = makeTwoDigit(month);
        outDate = jsReplace(outDate, "mm", month);
    }

    if (calDateFormat.indexOf("yyyy") != -1) {
        outDate = jsReplace(outDate, "yyyy", year);
    }
    
    calDateField.value = outDate;

    calDateField.focus();

    top.newWin.close()
}
