//
// JavaScript Calendar Component
// Author: Robert W. Husted  (robert.husted@iname.com)
// Date:   8/22/1999
// Modified Date: 11/30/1999
// Modified By:   Robert W. Husted
// Modificado em :02/08/2000
// Por:  Zonta
// Obs.:   Adaptado a lingua portuguesa
//		   acrescentado defaults para winPref e calFocusFontStyle
//         acrescentada opcao dateFormat em calShowCalendar()
//		   modificado para trabalhar tambem com tres campos dia mes ano
//		   prefixadas fun&ccedil;&otilde;es e vari&aacute;veis para cal[nome]
//  
// Usage:  Adicione as seguintes linhas de c&oacute;digo
//         // Carrega o componente na p&aacute;gina
//
//         <SCRIPT LANGUAGE="JavaScript" SRC="PRCalendbr.js"></SCRIPT>
//
//
//
//         // Esta linha &eacute; usada em conjunto com um campo do formulario (myDateField) em um form (myForm)
//         // Substitua "myForm" e "myDateField" com os nomes do campo e do forms respectivamente
//         // Opcoes da janela ajusta tamanho, posicao, etc.
//         //
//         <A HREF="javascript:calSetDateField(document.myForm.myDateField);top.newWin = window.open('calendar.html','cal','dependent=yes,width=210,height=230,screenX=200,screenY=300,titlebar=yes');void(0)">
//         <IMG SRC="calendar.gif" BORDER=0></A><font size=1>Popup Calendar</font>
//      ou 
//		(Recomendada)
//		   <A HREF="javascript:calShowCalendar(document.myForm.myDateField,myDateFormat);void(0)">
//         <IMG SRC="calendar.gif" BORDER=0></A><font size=1>Popup Calendar</font>
//      
//      
//		Sintaxe geral:
//
//	calShowCalendar([*datainteira],[ dateformat],[*campodia],[*campomes],[*campoano]) 
//
//  Parametros omitidos, informar 'null'
//  Se Forem informados campodia, mes e ano, estes serao usados para montar dia inicial do calendario
//		e receberao valor.
//
//  *informar ao menos um destes = referencia a campo do forms onde depositar os valores.
// 
//        
// Arquivos necessarios:
//
//         PRCalendbr.js - Contem as funcoes JS para a construcao da tela de calendario
//
//		   calendar.html - frameset para abrir calendario. Desnecessario se utilizada calShowCalendar()
//
// 
// Arquivos acessorios:
//
//         calendar.gif  - Imagem para o link ao calendario
// 
//         yourPage.html - Pagina que fara uso do componente
// 
// Especificacao de formatos para o calendario
// (usados como macrosubstituicao em texto)
//
// dd      = Dia de  1 ou 2-digit 
// DD      = Dia de  2-digit
// mm      = Mes de  1 ou 2-digitos
// MM      = Mes 2-digit Month
// aa/AA   = Ano 2-digitos
// aaaa/AAAA= Ano 4-digitos
// mes     = Mes em minusculas
// Mes     = Mes com inicial maiuscula
// MES     = Mes em maiusculas
// mon     = Mes com 3-letras em minusculas
// Mon     = Mes com 3-letras com inicial maiuscula
// MON     = Mes com 3-letras em maiusculas
// semana  = dia da semana em minusculas
// Semana  = dia da semana com inicial maiuscula
// SEMANA  = dia da semana em maiusculas
// smna    = dia da semana 3-letras em minusculas 
// Smna    = dia da semana 3-letras com inicial maiuscula
// SMNA    = dia da semana 3-letras em maiusculas
//
// Exemplos:
//
// calDateFormat = "mm/dd/aa";
// calDateFormat = "Semana,  dd de Mes de aaaa";
// calDateFormat = "smna, mon dd, aaaa";
// ou qualquer outro formato que tenha strings como as definidas acima.
// leiaute default para formato de data 
//- DEFINICOES DE USUARIO (ESTILOS E FORMATOS)---------------------------------------------------
calDateFormat    = "dd/mm/aaaa";

// leiaute default para window chamada por calShowCalendar(campo,formato)
calWinPrefs='width=175,height=189,screenX=200,screenY=300,titlebar=yes,dependent=yes'

// defaults de estilo 
calTopBackground    = "white";         // BG COLOR OF THE TOP FRAME
calBottomBackground = "white";         // BG COLOR OF THE BOTTOM FRAME
calTableBGColor     = "black";         // BG COLOR OF THE BOTTOM FRAME'S TABLE
calCellColor        = "#FAEFE3";     // TABLE CELL BG COLOR OF THE DATE CELLS IN THE BOTTOM FRAME
calHeadingcalCellColor = "#CDDFD4";         // TABLE CELL BG COLOR OF THE WEEKDAY ABBREVIATIONS
calHeadingTextColor = "black";         // TEXT COLOR OF THE WEEKDAY ABBREVIATIONS
calDateColor        = "black";          // TEXT COLOR OF THE LISTED DATES (1-28+)
calFocusColor       = "black";       // TEXT COLOR OF THE SELECTED DATE (OR CURRENT DATE)
calHoverColor       = "gray";       // TEXT COLOR OF A LINK WHEN YOU HOVER OVER IT
calHoverFontStyle   = "bold";
calFontStyle        = "10pt arial, helvetica";           // TEXT STYLE FOR DATES
calHeadingFontStyle = "bold 10pt arial, helvetica";      // TEXT STYLE FOR WEEKDAY ABBREVIATIONS
calFocusFontStyle   = "bold 10pt arial, helvetica";      // TEXT STYLE FOR WEEKDAY ABBREVIATIONS

// Referencias para formatacao
calBottomBorder  = false;        // TRUE/FALSE (WHETHER TO DISPLAY BOTTOM CALENDAR BORDER)
calTableBorder   = 0;            // SIZE OF CALENDAR TABLE BORDER (BOTTOM FRAME) 0=none

//-------------------------------------------------------------------------------------------------

// IDENTIFICA BROWSER
var isNav = false;
var isIE  = false;
if (navigator.appName == "Netscape") {
    isNav = true;
}
else {
    isIE = true;
}

// Constroi os elementos do calendario para uso
calBuildCalParts();

// FUNCOES DO CALENDARIO ---------------------------------------------------

// AJUSTA DATA GLOBAL
//
function calSetDateField(dateField,dayField,monthField,yearField) {
	// inicializar variaveis de retorno
	inDate=new Date()
	inDay=inDate.getDate()
	inMonth=inDate.getMonth()
	inYear=inDate.getFullYear()
	VF=0;
    //ASSIGN THE INCOMING FIELD TO RECEIVE DAY BACK
  
	if (dayField&&dayField!=null){calDayField = dayField;inDay=dayField.value;VF=1}

    //ASSIGN THE INCOMING FIELD TO RECEIVE DAY BACK
	if (monthField&&monthField!=null){calMonthField = monthField;inMonth=monthField.value;VF+=2}

    //ASSIGN THE INCOMING FIELD TO RECEIVE DAY BACK
	if (yearField&&yearField!=null){	calYearField = yearField;inYear=yearField.value;VF+=4}

    // ASSIGN THE INCOMING FIELD OBJECT TO A GLOBAL VARIABLE
    // GET THE VALUE OF THE INCOMING FIELD
	// ELSE, BUILD A NEW DATE FROM EACH PART
	if (dateField!=null){calDateField = dateField;VF+=8}
	else{
		if (VF>0){inDate=inMonth+'/'+inDay+"/"+inYear;}
		else{return false }
		}
	
	
    // SET calDate TO THE DATE IN THE INCOMING FIELD OR DEFAULT TO Hoje'S DATE
    calSetInitialDate();

    // THE CALENDAR FRAMESET DOCUMENTS ARE CREATED BY JAVASCRIPT FUNCTIONS
    calDocTop    = calBuildTopCalFrame();
    calDocBottom = calBuildBottomCalFrame();
}


//AJUSTA DATA INICIAL PARA HOJE OU PARA OS DIA/MES/ANO SE INFORMADOS EM SEPARADO
function calSetInitialDate() {
   
    // CREATE A NEW DATE OBJECT (WILL GENERALLY PARSE CORRECT DATE EXCEPT WHEN "." IS USED AS A DELIMITER)
    // (THIS ROUTINE DOES *NOT* CATCH ALL DATE FORMATS, IF YOU NEED TO PARSE A CUSTOM DATE FORMAT, DO IT HERE)
  	calDate =  new Date(inDate);
	
    // IF THE INCOMING DATE IS INVALID, USE THE CURRENT DATE
    if (isNaN(calDate)) {

        // ADD CUSTOM DATE PARSING HERE
        // IF IT FAILS, SIMPLY CREATE A NEW DATE OBJECT WHICH DEFAULTS TO THE CURRENT DATE
        calDate = new Date();
    }

    // KEEP TRACK OF THE CURRENT DAY VALUE
    calDay  = calDate.getDate();

    // SET DAY VALUE TO 1... TO AVOID JAVASCRIPT DATE CALCULATION ANOMALIES
    // (IF THE MONTH CHANGES TO FEB AND THE DAY IS 30, THE MONTH WOULD CHANGE TO MARCH
    //  AND THE DAY WOULD CHANGE TO 2.  SETTING THE DAY TO 1 WILL PREVENT THAT)
    calDate.setDate(1);
}


// ABRE O CALENDARIO
function calShowCalendar(dateField,dateFormat,dayField,monthField,yearField) {

    // SET INITIAL VALUE OF THE DATE FIELD AND CREATE TOP AND BOTTOM FRAMES
	//dateFormat eh opcional
    calSetDateField(dateField,dayField,monthField,yearField);
    if(dateFormat!=null) {calDateFormat=dateFormat}
    // USE THE JAVASCRIPT-GENERATED DOCUMENTS (calDocTop, calDocBottom) IN THE FRAMESET
    calDocFrameset = 
        "<HTML><HEAD><TITLE>Calend&aacute;rio&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TITLE></HEAD>\n" +
        "<FRAMESET ROWS='53,*' FRAMEBORDER='0'>\n" +
        "  <FRAME NAME='topCalFrame' SRC='javascript:parent.opener.calDocTop' SCROLLING='no' marginheight='0' marginwidth='0'>\n" +
        "  <FRAME NAME='bottomCalFrame' SRC='javascript:parent.opener.calDocBottom' SCROLLING='no' marginheight='0' marginwidth='0'>\n" +
        "</FRAMESET>\n";

    // DISPLAY THE CALENDAR IN A NEW POPUP WINDOW

    top.newWin = window.open("javascript:parent.opener.calDocFrameset", "calWin", calWinPrefs);
    top.newWin.focus();
}


// CRIA O FRAME
function calBuildTopCalFrame() {

    // CREATE THE TOP FRAME OF THE CALENDAR
    var calDoc =
        "<HTML>" +
        "<HEAD>" +
		 // "<LINK REL='stylesheet' TYPE='text/css' HREF='../../cpjhtml/estilos/cpj-Estilo.css' TITLE='cpjStyle'>" +
        "</HEAD>" +
        "<BODY BGCOLOR='" + calTopBackground + "'>" +
        "<FORM NAME='calControl' onSubmit='return false;'>" +
        "<CENTER>" +
        "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=0>" +
        "<TR><TD COLSPAN=7>" +
        "<CENTER>" +
        calGetMonthSelect() +
        "<INPUT NAME='year' VALUE='" + calDate.getFullYear() + "'TYPE=TEXT SIZE=4 MAXLENGTH=4 onChange='parent.opener.calSetYear()' >" +
        "</CENTER>" +
        "</TD>" +
        "</TR>" +
        "<TR>" +
        "<TD COLSPAN=7>" +
        "<INPUT " +
        "TYPE=BUTTON NAME='previousYear' VALUE='<<' TITLE='Ano anterior' class='cpjBotaoCalendario' onClick='parent.opener.calSetPreviousYear()'><INPUT " +
        "TYPE=BUTTON NAME='previousMonth' VALUE=' < ' TITLE='Mes anterior' class='cpjBotaoCalendario' onClick='parent.opener.calSetPreviousMonth()'><INPUT " +
        "TYPE=BUTTON NAME='Hoje' VALUE='Hoje' TITLE='Dia de Hoje' class='cpjBotaoCalendario' onClick='parent.opener.calSetHoje()'><INPUT " +
        "TYPE=BUTTON NAME='nextMonth' VALUE=' > ' TITLE ='Mes seguinte' class='cpjBotaoCalendario' onClick='parent.opener.calSetNextMonth()'><INPUT " +
        "TYPE=BUTTON NAME='nextYear' VALUE='>>'  TITLE='Ano seguinte' class='cpjBotaoCalendario' onClick='parent.opener.calSetNextYear()'>" +
        "</TD>" +
        "</TR>" +
        "</TABLE>" +
        "</CENTER>" +
        "</FORM>" +
        "</BODY>" +
        "</HTML>";

    return calDoc;
}


// CREATE THE BOTTOM CALENDAR FRAME 
// (THE MONTHLY CALENDAR)
function calBuildBottomCalFrame() {       

    // START CALENDAR DOCUMENT
    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 = calGetDaysInMonth();

    // IF GLOBAL DAY VALUE IS > THAN DAYS IN MONTH, HIGHLIGHT LAST DAY IN MONTH
    if (day > days) {
        day = days;
    }

    // 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++;
	 }

    // SET VALUES FOR DAYS OF THE MONTH
    var currentDay = 0;
    var dayType    = "semana";

    // 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;";
        }

        // 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 && month == inMonth && year == inYear) {
            dayType = "focusDay";
        }
        else {
            dayType = "weekday";
        }

        // ADD THE DAY TO THE CALENDAR STRING
        calDoc += "<TD align=center bgcolor='" + calCellColor + "'>" +
                  "<a class='" + dayType + "'  href='javascript:parent.opener.calReturnDate(" + 
                  currentDay + ")'>" + padding + currentDay + paddingChar + "</a></TD>";

        columnCount++;

        // START A NEW ROW WHEN NECESSARY
        if (columnCount % 7 == 0) {
            calDoc += "</TR><TR>";
        }
    }

    // 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>";
            }
        }
    }

    // FINISH THE NEW CALENDAR PAGE
    calDoc += calendarEnd;

    // RETURN THE COMPLETED CALENDAR PAGE
    return calDoc;
}


// WRITE THE MONTHLY CALENDAR TO THE BOTTOM CALENDAR FRAME
function calWriteCalendar() {

    // CREATE THE NEW CALENDAR FOR THE SELECTED MONTH & YEAR
    calDocBottom = calBuildBottomCalFrame();

    // 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();
}


// SET THE CALENDAR TO Hoje'S DATE AND DISPLAY THE NEW CALENDAR
function calSetHoje() {

    // SET GLOBAL DATE TO Hoje'S DATE
    calDate = new Date();
    // SET DAY MONTH AND YEAR TO Hoje'S DATE
    var month = calDate.getMonth();
    var year  = calDate.getFullYear();
    calDay  =  calDate.getDate();
    // SET MONTH IN DROP-DOWN LIST
    top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex = month;

    // SET YEAR VALUE
    top.newWin.frames['topCalFrame'].document.calControl.year.value = year;

    // DISPLAY THE NEW CALENDAR
    calWriteCalendar();
}


// SET THE GLOBAL DATE TO THE NEWLY ENTERED YEAR AND REDRAW THE CALENDAR
function calSetYear() {

    // 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 (calIsFourDigitYear(year)) {
        calDate.setFullYear(year);
        calWriteCalendar();
    }
    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();
    }
}


// SET THE GLOBAL DATE TO THE SELECTED MONTH AND REDRAW THE CALENDAR
function calSetCurrentMonth() {

    // GET THE NEWLY SELECTED MONTH AND CHANGE THE CALENDAR ACCORDINGLY
    var month = top.newWin.frames['topCalFrame'].document.calControl.month.selectedIndex;

    calDate.setMonth(month);
    calWriteCalendar();
}


// SET THE GLOBAL DATE TO THE PREVIOUS YEAR AND REDRAW THE CALENDAR
function calSetPreviousYear() {

    var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;

    if (calIsFourDigitYear(year) && year > 1000) {
        year--;
        calDate.setFullYear(year);
        top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
        calWriteCalendar();
    }
}


// SET THE GLOBAL DATE TO THE PREVIOUS MONTH AND REDRAW THE CALENDAR
function calSetPreviousMonth() {

    var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
    if (calIsFourDigitYear(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;
        calWriteCalendar();
    }
}


// SET THE GLOBAL DATE TO THE NEXT MONTH AND REDRAW THE CALENDAR
function calSetNextMonth() {

    var year = top.newWin.frames['topCalFrame'].document.calControl.year.value;

    if (calIsFourDigitYear(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;
        calWriteCalendar();
    }
}


// SET THE GLOBAL DATE TO THE NEXT YEAR AND REDRAW THE CALENDAR
function calSetNextYear() {

    var year  = top.newWin.frames['topCalFrame'].document.calControl.year.value;
    if (calIsFourDigitYear(year)) {
        year++;
        calDate.setFullYear(year);
        top.newWin.frames['topCalFrame'].document.calControl.year.value = year;
        calWriteCalendar();
    }
}


// GET NUMBER OF DAYS IN MONTH
function calGetDaysInMonth()  {

    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 calIsFourDigitYear(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 calGetMonthSelect() {

   monthArray = new Array('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho',
                               'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro');
    

    // DETERMINE MONTH TO SET AS DEFAULT
    var activeMonth = calDate.getMonth();

    // START HTML SELECT LIST ELEMENT
    monthSelect = "<SELECT NAME='month' class='cpjBotaoCalendario' onChange='parent.opener.calSetCurrentMonth()'>";

    // LOOP THROUGH MONTH ARRAY
    for (i in monthArray) {
        
        // SHOW THE CORRECT MONTH IN THE SELECT LIST
        if (i == activeMonth) {
            monthSelect += "<OPTION SELECTED>" + monthArray[i] + "\n";
        }
        else {
            monthSelect += "<OPTION>" + monthArray[i] + "\n";
        }
    }
    monthSelect += "</SELECT>";

    // RETURN A STRING VALUE WHICH CONTAINS A SELECT LIST OF ALL 12 MONTHS
    return monthSelect;
}


// SET DAYS OF THE WEEK DEPENDING ON LANGUAGE
function calCreateWeekdayList() {

        weekdayList  = new Array('Domingo','Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quarta-feira', 'Quinta-Feira', 'Sexta-feira', 'Sábado');
        weekdayArray = new Array('Do','Sg','Tr','Qu','Qt','Sx','Sb');

    // START HTML TO HOLD WEEKDAY NAMES IN TABLE FORMAT
    var weekdays = "<TR BGCOLOR='" + calHeadingcalCellColor + "'>";

    // LOOP THROUGH WEEKDAY ARRAY
    for (i in weekdayArray) {

        weekdays += "<TD class='calHeading' 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 calBuildCalParts() {

    // GENERATE WEEKDAY HEADERS FOR THE CALENDAR
    weekdays = calCreateWeekdayList();

    // BUILD THE BLANK CELL ROWS
    blankCell = "<TD align=center bgcolor='" + calCellColor + "'>&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.calHeading { text-decoration: none; color:" + calHeadingTextColor + "; font: " + calHeadingFontStyle + "; }" +
        "A.focusDay:link { color: " + calFocusColor + "; text-decoration: none; font: " + calFocusFontStyle + "; }" +
        "A.focusDay:hover { color: " + calFocusColor + "; text-decoration: none; font: " + calFontStyle + "; }" +
		  "A.focusDay:visited { color: " + calFocusColor + "; text-decoration: none; font: " + calHoverFontStyle + "; }" +
		  "A:visited { color: " + calFocusColor + "; text-decoration: none; font: " + calFontStyle + "; }" +
        "A.weekday:link { color: " + calDateColor + "; text-decoration: none; font: " + calFontStyle + "; }" +
        "A.weekday:hover { color: " + calHoverColor + "; font: " + calHoverFontStyle + "; }" +
        "-->" +
        "</STYLE>" +
        "</HEAD>" +
        "<BODY BGCOLOR='" + calBottomBackground + "'" +
        "<CENTER>";

        // NAVIGATOR NEEDS A TABLE CONTAINER TO DISPLAY THE TABLE OUTLINES PROPERLY
        if (isNav) {
            calendarBegin += 
                "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=" + calTableBorder + " ALIGN=CENTER BGCOLOR='" + calTableBGColor + "'><TR><TD>";
        }

        // BUILD WEEKDAY calHeadingS
        calendarBegin +=
            "<TABLE CELLPADDING=0 CELLSPACING=1 BORDER=" + calTableBorder + " ALIGN=CENTER BGCOLOR='" + calTableBGColor + "'>" +
            weekdays +
            "<TR>";


    // BUILD THE BOTTOM PORTION OF THE CALENDAR PAGE
    calendarEnd = "";

        // WHETHER OR NOT TO DISPLAY A THICK LINE BELOW THE CALENDAR
        if (calBottomBorder) {
            calendarEnd += "<TR></TR>";
        }

        // NAVIGATOR NEEDS A TABLE CONTAINER TO DISPLAY THE BORDERS PROPERLY
        if (isNav) {
            calendarEnd += "</TD></TR></TABLE>";
        }

        // END THE TABLE AND HTML DOCUMENT
        calendarEnd +=
            "</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:    calJsReplace(inString, find, replace);
// example:  calJsReplace("To be or not to be", "be", "ski");
//           result: "To ski or not to ski"
//
function calJsReplace(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;
    }
}





// ENSURE THAT VALUE IS TWO DIGITS IN LENGTH
function calMakeTwoDigit(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 calReturnDate(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;

    // RETURN TWO DIGIT DAY
	outDay=day;
	outMonth = month;
	outYear = year;
    if (calDateFormat.indexOf("DD") != -1) {
        day = calMakeTwoDigit(day);
        outDate = calJsReplace(outDate, "DD", day);
    }
    // RETURN ONE OR TWO DIGIT DAY
    else if (calDateFormat.indexOf("dd") != -1) {
        outDate = calJsReplace(outDate, "dd", day);
    }

    // RETURN TWO DIGIT MONTH
    if (calDateFormat.indexOf("MM") != -1) {
        month = calMakeTwoDigit(month);
	    outMonth=month;
	    outDate = calJsReplace(outDate, "MM", month);
    }
    // RETURN ONE OR TWO DIGIT MONTH
    else if (calDateFormat.indexOf("mm") != -1) {
	    outMonth=month;
        outDate = calJsReplace(outDate, "mm", month);
    }

    // RETURN FOUR-DIGIT YEAR
    if (calDateFormat.indexOf("aaaa") != -1) {
        outDate = calJsReplace(outDate, "aaaa", year);
    } 
    else if (calDateFormat.indexOf("AAAA") != -1) {
        outDate = calJsReplace(outDate, "AAAA", year);
    } 
 	 // RETURN TWO-DIGIT YEAR
    else if (calDateFormat.indexOf("aa") != -1) {
        var yearString = "" + year;
        var yearString = yearString.substring(2,4);
        outDate = calJsReplace(outDate, "aa", yearString);
    }
	else if (calDateFormat.indexOf("AA") != -1) {
        var yearString = "" + year;
        var yearString = yearString.substring(2,4);
        outDate = calJsReplace(outDate, "AA", yearString);
		
    }
  

    // RETURN DAY OF MONTH (Initial Caps)
    if (calDateFormat.indexOf("Mes") != -1) {
        outDate = calJsReplace(outDate, "Mes", monthString);
    }
    // RETURN DAY OF MONTH (lowercase letters)
    else if (calDateFormat.indexOf("mes") != -1) {
        outDate = calJsReplace(outDate, "mes", monthString.toLowerCase());
    }
    // RETURN DAY OF MONTH (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("MES") != -1) {
        outDate = calJsReplace(outDate, "MES", monthString.toUpperCase());
    }

    // RETURN DAY OF MONTH 3-DAY ABBREVIATION (Initial Caps)
    if (calDateFormat.indexOf("Mon") != -1) {
        outDate = calJsReplace(outDate, "Mon", monthAbbrev);
    }
    // RETURN DAY OF MONTH 3-DAY ABBREVIATION (lowercase letters)
    else if (calDateFormat.indexOf("mon") != -1) {
        outDate = calJsReplace(outDate, "mon", monthAbbrev.toLowerCase());
    }
    // RETURN DAY OF MONTH 3-DAY ABBREVIATION (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("MON") != -1) {
        outDate = calJsReplace(outDate, "MON", monthAbbrev.toUpperCase());
    }

    // RETURN WEEKDAY (Initial Caps)
    if (calDateFormat.indexOf("Semana") != -1) {
        outDate = calJsReplace(outDate, "Semana", weekday);
    }
    // RETURN WEEKDAY (lowercase letters)
    else if (calDateFormat.indexOf("semana") != -1) {
        outDate = calJsReplace(outDate, "semana", weekday.toLowerCase());
    }
    // RETURN WEEKDAY (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("SEMANA") != -1) {
        outDate = calJsReplace(outDate, "SEMANA", weekday.toUpperCase());
    }

    // RETURN WEEKDAY 3-DAY ABBREVIATION (Initial Caps)
    if (calDateFormat.indexOf("Smna") != -1) {
        outDate = calJsReplace(outDate, "Smna", weekdayAbbrev);
    }
    // RETURN WEEKDAY 3-DAY ABBREVIATION (lowercase letters)
    else if (calDateFormat.indexOf("smna") != -1) {
        outDate = calJsReplace(outDate, "smna", weekdayAbbrev.toLowerCase());
    }
    // RETURN WEEKDAY 3-DAY ABBREVIATION (UPPERCASE LETTERS)
    else if (calDateFormat.indexOf("SMNA") != -1) {
        outDate = calJsReplace(outDate, "SMNA", weekdayAbbrev.toUpperCase());
    }

    // SET THE VALUE OF THE FIELDS THAT WAS PASSED TO THE CALENDAR
	if(4&VF){calYearField.value=outYear;calYearField.focus()}
	if(2&VF){calMonthField.value=outMonth;calMonthField.focus()}
    if(1&VF){calDayField.value=outDay; calDayField.focus()}
    // SET THE VALUE OF THE FIELD THAT WAS PASSED TO THE CALENDAR
    if(8&VF){calDateField.value = outDate;calDateField.focus()}
    // GIVE FOCUS BACK TO THE DATE FIELD

    // CLOSE THE CALENDAR WINDOW
    top.newWin.close()
}

