Mega Code Archive

 
Categories / JavaScript DHTML / GUI Components
 

Dynamic HTML Calendar

/* JavaScript Bible, Fourth Edition by Danny Goodman  John Wiley & Sons CopyRight 2001 */ <HTML> <HEAD> <TITLE>JavaScripted Dynamic HTML Table</TITLE> <STYLE TYPE="text/css"> TD, TH {text-align:center} </STYLE> <SCRIPT LANGUAGE="JavaScript"> /*******************   UTILITY FUNCTIONS ********************/ // day of week of month's first day function getFirstDay(theYear, theMonth){     var firstDate = new Date(theYear,theMonth,1)     return firstDate.getDay() } // number of days in the month function getMonthLen(theYear, theMonth) {     var oneDay = 1000 * 60 * 60 * 24     var thisMonth = new Date(theYear, theMonth, 1)     var nextMonth = new Date(theYear, theMonth + 1, 1)     var len = Math.ceil((nextMonth.getTime() -          thisMonth.getTime())/oneDay)     return len } // create array of English month names var theMonths = ["January","February","March","April","May","June","July","August", "September","October","November","December"] // return IE4+ or W3C DOM reference for an ID function getObject(obj) {     var theObj     if (document.all) {         if (typeof obj == "string") {             return document.all(obj)         } else {             return obj.style         }     }     if (document.getElementById) {         if (typeof obj == "string") {             return document.getElementById(obj)         } else {             return obj.style         }     }     return null } /************************   DRAW CALENDAR CONTENTS *************************/ // clear and re-populate table based on form's selections function populateTable(form) {     var theMonth = form.chooseMonth.selectedIndex     var theYear = parseInt(form.chooseYear.options[form.chooseYear.selectedIndex].text)     // initialize date-dependent variables     var firstDay = getFirstDay(theYear, theMonth)     var howMany = getMonthLen(theYear, theMonth)          // fill in month/year in table header     getObject("tableHeader").innerHTML = theMonths[theMonth] +      " " + theYear          // initialize vars for table creation     var dayCounter = 1     var TBody = getObject("tableBody")     // clear any existing rows     while (TBody.rows.length > 0) {         TBody.deleteRow(0)     }     var newR, newC     var done=false     while (!done) {         // create new row at end         newR = TBody.insertRow(TBody.rows.length)         for (var i = 0; i < 7; i++) {             // create new cell at end of row             newC = newR.insertCell(newR.cells.length)             if (TBody.rows.length == 1 && i < firstDay) {                 // no content for boxes before first day                 newC.innerHTML = ""                     continue             }             if (dayCounter == howMany) {                 // no more rows after this one                 done = true             }             // plug in date (or empty for boxes after last day)             newC.innerHTML = (dayCounter <= howMany) ?                  dayCounter++ : ""         }              } } /*******************   INITIALIZATIONS ********************/ // create dynamic list of year choices function fillYears() {     var today = new Date()     var thisYear = today.getFullYear()     var yearChooser = document.dateChooser.chooseYear     for (i = thisYear; i < thisYear + 5; i++) {         yearChooser.options[yearChooser.options.length] = new Option(i, i)     }     setCurrMonth(today) } // set month choice to current month function setCurrMonth(today) {     document.dateChooser.chooseMonth.selectedIndex = today.getMonth() } </SCRIPT> </HEAD> <BODY onLoad="fillYears(); populateTable(document.dateChooser)"> <H1>Month at a Glance (Dynamic HTML)</H1> <HR> <TABLE ID="calendarTable" BORDER=1 ALIGN="center"> <TR>     <TH ID="tableHeader" COLSPAN=7></TH> </TR> <TR><TH>Sun</TH><TH>Mon</TH><TH>Tue</TH><TH>Wed</TH> <TH>Thu</TH><TH>Fri</TH><TH>Sat</TH></TR> <TBODY ID="tableBody"></TBODY> <TR>     <TD COLSPAN=7>     <P>     <FORM NAME="dateChooser">         <SELECT NAME="chooseMonth"          onChange="populateTable(this.form)">             <OPTION SELECTED>January<OPTION>February             <OPTION>March<OPTION>April<OPTION>May             <OPTION>June<OPTION>July<OPTION>August             <OPTION>September<OPTION>October             <OPTION>November<OPTION>December     </SELECT>     <SELECT NAME="chooseYear" onChange="populateTable(this.form)">     </SELECT>     </FORM>     </P></TD> </TR> </TABLE> </BODY> </HTML>