Mega Code Archive

 
Categories / JavaScript DHTML / GUI Components
 

Another Calendar

<HTML> <HEAD> <META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0"> <TITLE></TITLE> <script language="JavaScript"> //  written  by Tan Ling  Wee  on 2 Dec 2001 //  last updated 28 Mar 2002 //  email :  info@sparrowscripts.com //  url : www.sparrowscripts.com   var  fixedX = -1      // x position (-1 if to appear below control)   var  fixedY = -1      // y position (-1 if to appear below control)   var startAt = 1      // 0 - sunday ; 1 - monday   var showWeekNumber = 1  // 0 - don't show; 1 - show   var showToday = 1    // 0 - don't show; 1 - show   var imgDir = ""      // directory for images ... e.g. var imgDir="/img/"   var gotoString = "Go To Current Month"   var todayString = "Today is"   var weekString = "Wk"   var scrollLeftMessage = "Click to scroll to previous month. Hold mouse button to scroll automatically."   var scrollRightMessage = "Click to scroll to next month. Hold mouse button to scroll automatically."   var selectMonthMessage = "Click to select a month."   var selectYearMessage = "Click to select a year."   var selectDateMessage = "Select [date] as date." // do not replace [date], it will be replaced by date.   var  crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected, monthConstructed, yearConstructed, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat, nStartingYear   var  bPageLoaded=false   var  ie=document.all   var  dom=document.getElementById   var  ns4=document.layers   var  today =  new  Date()   var  dateNow   = today.getDate()   var  monthNow = today.getMonth()   var  yearNow   = today.getYear()   var  imgsrc = new Array("drop1.gif","drop2.gif","left1.gif","left2.gif","right1.gif","right2.gif")   var  img  = new Array()   function HolidayRec (d, m, y, desc)   {     this.d = d     this.m = m     this.y = y     this.desc = desc   }   var HolidaysCounter = 0   var Holidays = new Array()   function addHoliday (d, m, y, desc)   {     Holidays[HolidaysCounter++] = new HolidayRec ( d, m, y, desc )   }   if (dom)   {     for  (i=0;i<imgsrc.length;i++)     {       img[i] = new Image       img[i].src = imgDir + imgsrc[i]     }     document.write ("<div id='calendar'  style='position:absolute;visibility:hidden;'><table  width="+((showWeekNumber==1)?250:220)+" style='font-family:arial;font-size:11px;border-width:1;border-style:solid;border-color:#a0a0a0;font-family:arial; font-size:11px}' bgcolor='#ffffff'><tr bgcolor='#0000aa'><td><table width='"+((showWeekNumber==1)?248:218)+"'><tr><td style='padding:2px;font-family:arial; font-size:11px;'><font color='#ffffff'><B><span id='caption'></span></B></font></td><td align=right><a href='javascript:hideCalendar()'><IMG SRC='"+imgDir+"close.gif' WIDTH='15' HEIGHT='13' BORDER='0' ALT='Close the Calendar'></a></td></tr></table></td></tr><tr><td style='padding:5px' bgcolor=#ffffff><span id='content'></span></td></tr>")            if (showToday==1)     {       document.write ("<tr bgcolor=#f0f0f0><td style='padding:5px' align=center><span id='lblToday'></span></td></tr>")     }            document.write ("</table></div><div id='selectMonth' style='position:absolute;visibility:hidden;'></div><div id='selectYear'  style='position:absolute;visibility:hidden;'></div>");   }   var  monthName =  new  Array("January","February","March","April","May","June","July","August","September","October","November","December")   if (startAt==0)   {     dayName = new Array  ("Sun","Mon","Tue","Wed","Thu","Fri","Sat")   }   else   {     dayName = new Array  ("Mon","Tue","Wed","Thu","Fri","Sat","Sun")   }   var  styleAnchor="text-decoration:none;color:black;"   var  styleLightBorder="border-style:solid;border-width:1px;border-color:#a0a0a0;"   function swapImage(srcImg, destImg){     if (ie)  { document.getElementById(srcImg).setAttribute("src",imgDir + destImg) }   }   function init()  {     if (!ns4)     {       if (!ie) { yearNow += 1900  }       crossobj=(dom)?document.getElementById("calendar").style : ie? document.all.calendar : document.calendar       hideCalendar()       crossMonthObj=(dom)?document.getElementById("selectMonth").style : ie? document.all.selectMonth  : document.selectMonth       crossYearObj=(dom)?document.getElementById("selectYear").style : ie? document.all.selectYear : document.selectYear       monthConstructed=false;       yearConstructed=false;       if (showToday==1)       {         document.getElementById("lblToday").innerHTML =  todayString + " <a onmousemove='window.status=\""+gotoString+"\"' onmouseout='window.status=\"\"' title='"+gotoString+"' style='"+styleAnchor+"' href='javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();'>"+dayName[(today.getDay()-startAt==-1)?6:(today.getDay()-startAt)]+", " + dateNow + " " + monthName[monthNow].substring(0,3)  + "  " +  yearNow  + "</a>"       }       sHTML1="<span id='spanLeft'  style='border-style:solid;border-width:1;border-color:#3366FF;cursor:pointer' onmouseover='swapImage(\"changeLeft\",\"left2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+scrollLeftMessage+"\"' onclick='javascript:decMonth()' onmouseout='clearInterval(intervalID1);swapImage(\"changeLeft\",\"left1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartDecMonth()\",500)'  onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG id='changeLeft' SRC='"+imgDir+"left1.gif' width=10 height=11 BORDER=0>&nbsp</span>&nbsp;"       sHTML1+="<span id='spanRight' style='border-style:solid;border-width:1;border-color:#3366FF;cursor:pointer'  onmouseover='swapImage(\"changeRight\",\"right2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+scrollRightMessage+"\"' onmouseout='clearInterval(intervalID1);swapImage(\"changeRight\",\"right1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"' onclick='incMonth()' onmousedown='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"StartIncMonth()\",500)'  onmouseup='clearTimeout(timeoutID1);clearInterval(intervalID1)'>&nbsp<IMG id='changeRight' SRC='"+imgDir+"right1.gif'  width=10 height=11 BORDER=0>&nbsp</span>&nbsp"       sHTML1+="<span id='spanMonth' style='border-style:solid;border-width:1;border-color:#3366FF;cursor:pointer'  onmouseover='swapImage(\"changeMonth\",\"drop2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+selectMonthMessage+"\"' onmouseout='swapImage(\"changeMonth\",\"drop1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"' onclick='popUpMonth()'></span>&nbsp;"       sHTML1+="<span id='spanYear' style='border-style:solid;border-width:1;border-color:#3366FF;cursor:pointer' onmouseover='swapImage(\"changeYear\",\"drop2.gif\");this.style.borderColor=\"#88AAFF\";window.status=\""+selectYearMessage+"\"'  onmouseout='swapImage(\"changeYear\",\"drop1.gif\");this.style.borderColor=\"#3366FF\";window.status=\"\"'  onclick='popUpYear()'></span>&nbsp;"              document.getElementById("caption").innerHTML  =  sHTML1       bPageLoaded=true       //Calling a calendar function and passing the name of the text        //box which holds the date field. Added by D.T.       popUpCalendar(this, opener.txtDate, 'm/d/yyyy')     }   }   function hideCalendar()  {     crossobj.visibility="hidden"     if (crossMonthObj != null){crossMonthObj.visibility="hidden"}     if (crossYearObj !=  null){crossYearObj.visibility="hidden"}     //Closing a popup window when user clicked 'x', close the calendar. Added by D.T.     self.closed   }   function padZero(num) {     return (num  < 10)? '0' + num : num ;   }   function constructDate(d,m,y)   {     sTmp = dateFormat     sTmp = sTmp.replace  ("dd","<e>")     sTmp = sTmp.replace  ("d","<d>")     sTmp = sTmp.replace  ("<e>",padZero(d))     sTmp = sTmp.replace  ("<d>",d)     sTmp = sTmp.replace  ("mmm","<o>")     sTmp = sTmp.replace  ("mm","<n>")     sTmp = sTmp.replace  ("m","<m>")     sTmp = sTmp.replace  ("<m>",m+1)     sTmp = sTmp.replace  ("<n>",padZero(m+1))     sTmp = sTmp.replace  ("<o>",monthName[m])     return sTmp.replace ("yyyy",y)   }   function closeCalendar() {     var  sTmp     hideCalendar();     ctlToPlaceValue.value =  constructDate(dateSelected,monthSelected,yearSelected)     //Closing popup window when date is selected. Added By D.T.     self.close()   }   /*** Month Pulldown  ***/   function StartDecMonth()   {     intervalID1=setInterval("decMonth()",80)   }   function StartIncMonth()   {     intervalID1=setInterval("incMonth()",80)   }   function incMonth () {     monthSelected++     if (monthSelected>11) {       monthSelected=0       yearSelected++     }     constructCalendar()   }   function decMonth () {     monthSelected--     if (monthSelected<0) {       monthSelected=11       yearSelected--     }     constructCalendar()   }   function constructMonth() {     popDownYear()     if (!monthConstructed) {       sHTML =  ""       for  (i=0; i<12;  i++) {         sName =  monthName[i];         if (i==monthSelected){           sName =  "<B>" +  sName +  "</B>"         }         sHTML += "<tr><td id='m" + i + "' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='monthConstructed=false;monthSelected=" + i + ";constructCalendar();popDownMonth();event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"       }       document.getElementById("selectMonth").innerHTML = "<table width=70  style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;' bgcolor='#FFFFDD' cellspacing=0 onmouseover='clearTimeout(timeoutID1)'  onmouseout='clearTimeout(timeoutID1);timeoutID1=setTimeout(\"popDownMonth()\",100);event.cancelBubble=true'>" +  sHTML +  "</table>"       monthConstructed=true     }   }   function popUpMonth() {     constructMonth()     crossMonthObj.visibility = (dom||ie)? "visible"  : "show"     crossMonthObj.left = parseInt(crossobj.left) + 50     crossMonthObj.top =  parseInt(crossobj.top) + 26   }   function popDownMonth()  {     crossMonthObj.visibility= "hidden"   }   /*** Year Pulldown ***/   function incYear() {     for  (i=0; i<7; i++){       newYear  = (i+nStartingYear)+1       if (newYear==yearSelected)       { txtYear =  "&nbsp;<B>"  + newYear +  "</B>&nbsp;" }       else       { txtYear =  "&nbsp;" + newYear + "&nbsp;" }       document.getElementById("y"+i).innerHTML = txtYear     }     nStartingYear ++;   }   function decYear() {     for  (i=0; i<7; i++){       newYear  = (i+nStartingYear)-1       if (newYear==yearSelected)       { txtYear =  "&nbsp;<B>"  + newYear +  "</B>&nbsp;" }       else       { txtYear =  "&nbsp;" + newYear + "&nbsp;" }       document.getElementById("y"+i).innerHTML = txtYear     }     nStartingYear --;   }   function selectYear(nYear) {     yearSelected=parseInt(nYear+nStartingYear);     yearConstructed=false;     constructCalendar();     popDownYear();   }   function constructYear() {     popDownMonth()     sHTML =  ""     if (!yearConstructed) {       sHTML =  "<tr><td align='center'  onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='clearInterval(intervalID1);this.style.backgroundColor=\"\"' style='cursor:pointer'  onmousedown='clearInterval(intervalID1);intervalID1=setInterval(\"decYear()\",30)' onmouseup='clearInterval(intervalID1)'>-</td></tr>"       j =  0       nStartingYear =  yearSelected-3       for  (i=(yearSelected-3); i<=(yearSelected+3); i++) {         sName =  i;         if (i==yearSelected){           sName =  "<B>" +  sName +  "</B>"         }         sHTML += "<tr><td id='y" + j + "' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='this.style.backgroundColor=\"\"' style='cursor:pointer' onclick='selectYear("+j+");event.cancelBubble=true'>&nbsp;" + sName + "&nbsp;</td></tr>"         j ++;       }       sHTML += "<tr><td align='center' onmouseover='this.style.backgroundColor=\"#FFCC99\"' onmouseout='clearInterval(intervalID2);this.style.backgroundColor=\"\"' style='cursor:pointer' onmousedown='clearInterval(intervalID2);intervalID2=setInterval(\"incYear()\",30)'  onmouseup='clearInterval(intervalID2)'>+</td></tr>"       document.getElementById("selectYear").innerHTML  = "<table width=44 style='font-family:arial; font-size:11px; border-width:1; border-style:solid; border-color:#a0a0a0;'  bgcolor='#FFFFDD' onmouseover='clearTimeout(timeoutID2)' onmouseout='clearTimeout(timeoutID2);timeoutID2=setTimeout(\"popDownYear()\",100)' cellspacing=0>"  + sHTML  + "</table>"       yearConstructed  = true     }   }   function popDownYear() {     clearInterval(intervalID1)     clearTimeout(timeoutID1)     clearInterval(intervalID2)     clearTimeout(timeoutID2)     crossYearObj.visibility= "hidden"   }   function popUpYear() {     var  leftOffset     constructYear()     crossYearObj.visibility  = (dom||ie)? "visible" : "show"     leftOffset = parseInt(crossobj.left) + document.getElementById("spanYear").offsetLeft     if (ie)     {       leftOffset += 6     }     crossYearObj.left =  leftOffset     crossYearObj.top = parseInt(crossobj.top) +  26   }   /*** calendar ***/   function WeekNbr(today)     {     Year = takeYear(today);     Month = today.getMonth();     Day = today.getDate();     now = Date.UTC(Year,Month,Day+1,0,0,0);     var Firstday = new Date();     Firstday.setYear(Year);     Firstday.setMonth(0);     Firstday.setDate(1);     then = Date.UTC(Year,0,1,0,0,0);     var Compensation = Firstday.getDay();     if (Compensation > 3) Compensation -= 4;     else Compensation += 3;     NumberOfWeek =  Math.round((((now-then)/86400000)+Compensation)/7);     return NumberOfWeek;   }   function takeYear(theDate)   {     x = theDate.getYear();     var y = x % 100;     y += (y < 38) ? 2000 : 1900;     return y;   }   function constructCalendar () {     var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31)     var dateMessage     var  startDate =  new  Date (yearSelected,monthSelected,1)     var endDate     if (monthSelected==1)     {       endDate  = new Date (yearSelected,monthSelected+1,1);       endDate  = new Date (endDate  - (24*60*60*1000));       numDaysInMonth = endDate.getDate()     }     else     {       numDaysInMonth = aNumDays[monthSelected];     }     datePointer  = 0     dayPointer = startDate.getDay() - startAt          if (dayPointer<0)     {       dayPointer = 6     }     sHTML =  "<table   border=0 style='font-family:verdana;font-size:10px;'><tr>"     if (showWeekNumber==1)     {       sHTML += "<td width=27><b>" + weekString + "</b></td><td width=1 rowspan=7 bgcolor='#d0d0d0' style='padding:0px'><img src='"+imgDir+"divider.gif' width=1></td>"     }     for  (i=0; i<7; i++)  {       sHTML += "<td width='27' align='right'><B>"+ dayName[i]+"</B></td>"     }     sHTML +="</tr><tr>"          if (showWeekNumber==1)     {       sHTML += "<td align=right>" + WeekNbr(startDate) + "&nbsp;</td>"     }     for  ( var i=1; i<=dayPointer;i++ )     {       sHTML += "<td>&nbsp;</td>"     }        for  ( datePointer=1; datePointer<=numDaysInMonth; datePointer++ )     {       dayPointer++;       sHTML += "<td align=right>"       sStyle=styleAnchor       if ((datePointer==odateSelected) &&  (monthSelected==omonthSelected)  && (yearSelected==oyearSelected))       { sStyle+=styleLightBorder }       sHint = ""       for (k=0;k<HolidaysCounter;k++)       {         if ((parseInt(Holidays[k].d)==datePointer)&&(parseInt(Holidays[k].m)==(monthSelected+1)))         {           if ((parseInt(Holidays[k].y)==0)||((parseInt(Holidays[k].y)==yearSelected)&&(parseInt(Holidays[k].y)!=0)))           {             sStyle+="background-color:#FFDDDD;"             sHint+=sHint==""?Holidays[k].desc:"\n"+Holidays[k].desc           }         }       }       var regexp= /\"/g       sHint=sHint.replace(regexp,"&quot;")       dateMessage = "onmousemove='window.status=\""+selectDateMessage.replace("[date]",constructDate(datePointer,monthSelected,yearSelected))+"\"' onmouseout='window.status=\"\"' "       if ((datePointer==dateNow)&&(monthSelected==monthNow)&&(yearSelected==yearNow))       { sHTML += "<b><a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' href='javascript:dateSelected="+datePointer+";closeCalendar();'><font color=#ff0000>&nbsp;" + datePointer + "</font>&nbsp;</a></b>"}       else if  (dayPointer % 7 == (startAt * -1)+1)       { sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' href='javascript:dateSelected="+datePointer + ";closeCalendar();'>&nbsp;<font color=#909090>" + datePointer + "</font>&nbsp;</a>" }       else       { sHTML += "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' href='javascript:dateSelected="+datePointer + ";closeCalendar();'>&nbsp;" + datePointer + "&nbsp;</a>" }       sHTML += ""       if ((dayPointer+startAt) % 7 == startAt) {          sHTML += "</tr><tr>"          if ((showWeekNumber==1)&&(datePointer<numDaysInMonth))         {           sHTML += "<td align=right>" + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + "&nbsp;</td>"         }       }     }     document.getElementById("content").innerHTML   = sHTML     document.getElementById("spanMonth").innerHTML = "&nbsp;" +  monthName[monthSelected] + "&nbsp;<IMG id='changeMonth' SRC='"+imgDir+"drop1.gif' WIDTH='12' HEIGHT='10' BORDER=0>"     document.getElementById("spanYear").innerHTML =  "&nbsp;" + yearSelected  + "&nbsp;<IMG id='changeYear' SRC='"+imgDir+"drop1.gif' WIDTH='12' HEIGHT='10' BORDER=0>"   }   function popUpCalendar(ctl,  ctl2, format) {     var  leftpos=0     var  toppos=0     if (bPageLoaded)     {       if ( crossobj.visibility ==  "hidden" ) {         ctlToPlaceValue  = ctl2         dateFormat=format;         formatChar = " "         aFormat  = dateFormat.split(formatChar)         if (aFormat.length<3)         {           formatChar = "/"           aFormat  = dateFormat.split(formatChar)           if (aFormat.length<3)           {             formatChar = "."             aFormat  = dateFormat.split(formatChar)             if (aFormat.length<3)             {               formatChar = "-"               aFormat  = dateFormat.split(formatChar)               if (aFormat.length<3)               {                 // invalid date  format                 formatChar=""               }             }           }         }         tokensChanged =  0         if ( formatChar  != "" )         {           // use user's date           aData =  ctl2.value.split(formatChar)           for  (i=0;i<3;i++)           {             if ((aFormat[i]=="d") || (aFormat[i]=="dd"))             {               dateSelected = parseInt(aData[i], 10)               tokensChanged ++             }             else if  ((aFormat[i]=="m") || (aFormat[i]=="mm"))             {               monthSelected =  parseInt(aData[i], 10) - 1               tokensChanged ++             }             else if  (aFormat[i]=="yyyy")             {               yearSelected = parseInt(aData[i], 10)               tokensChanged ++             }             else if  (aFormat[i]=="mmm")             {               for  (j=0; j<12;  j++)               {                 if (aData[i]==monthName[j])                 {                   monthSelected=j                   tokensChanged ++                 }               }             }           }         }         if ((tokensChanged!=3)||isNaN(dateSelected)||isNaN(monthSelected)||isNaN(yearSelected))         {           dateSelected = dateNow           monthSelected =  monthNow           yearSelected = yearNow         }         odateSelected=dateSelected         omonthSelected=monthSelected         oyearSelected=yearSelected         /* Commented by D.T.             aTag = ctl           do {             aTag = aTag.offsetParent;             leftpos  += aTag.offsetLeft;             toppos += aTag.offsetTop;           } while(aTag.tagName!="BODY");           crossobj.left =  fixedX==-1 ? ctl.offsetLeft  + leftpos :  fixedX           crossobj.top = fixedY==-1 ?  ctl.offsetTop +  toppos + ctl.offsetHeight +  2 :  fixedY         */                  //Setting left and top of the calendar in a popUp window. Added by D.T.         constructCalendar (1, monthSelected, yearSelected);         crossobj.visibility=(dom||ie)? "visible" : "show"       }       else       {         hideCalendar()         if (ctlNow!=ctl) {popUpCalendar(ctl, ctl2, format)}       }       ctlNow = ctl     }   }   window.onload=init   </script> </HEAD> <BODY> <script language="javascript"> function window_open() { var newWindow; var urlstring = 'calendar.htm' newWindow = window.open(urlstring,'','height=200,width=280,toolbar=no,minimize=no,status=no,memubar=no,location=no,scrollbars=no') } </script> <input type=text name='txtDate'><input type=button onClick="window_open()" value='...'> </BODY> </HTML>                          popwincal.zip( 10 k)