Advertisement
Guest User

Javascript Calendar v2

a guest
Sep 29th, 2012
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function Calendar(inVarName, inCurrent)
  2. {
  3.     var dtmToday = new Date();
  4.     dtmToday = new Date(dtmToday.getFullYear(), dtmToday.getMonth(), dtmToday.getDate());
  5.  
  6.     var dtmCurrent = inCurrent;
  7.     var arrMonths = new Array('Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December');
  8.     var arrDayNames = new Array('M', 'T', 'O', 'T', 'F', 'L', 'S');
  9.     var strVarName = inVarName;
  10.  
  11.     var arrActiveDays = new Array();
  12.  
  13.     var objBoxCalendar = document.getElementById('BoxCalendar');
  14.     var objWrapper = null;
  15.     var objNaviLeft = null;
  16.     var objCalendarYear = null;
  17.     var objNaviRight = null;
  18.  
  19.     this.create = function ()
  20.     {
  21.         if (objBoxCalendar)
  22.         {
  23.             CreateHeader('DayView');
  24.             this.viewDays(dtmCurrent);
  25.         }
  26.     }
  27.  
  28.     this.viewDays = function (dtmStart)
  29.     {
  30.         dtmStart = new Date(dtmStart);
  31.         if (dtmStart.getDate() > 1)
  32.             dtmStart.setDate(1);
  33.  
  34.         for (var i = objWrapper.childNodes.length; i >= 0; i--)
  35.         {
  36.             var objChild = objWrapper.childNodes[i];
  37.             if (objChild)
  38.             {
  39.                 if (objChild.className != 'CalendarRowNavi')
  40.                 {
  41.                     objWrapper.removeChild(objChild);
  42.                 }
  43.             }
  44.         }
  45.  
  46.         var objCalendarRowDays = document.createElement('div');
  47.         objCalendarRowDays.className = 'CalendarRowDays';
  48.         objWrapper.appendChild(objCalendarRowDays);
  49.         for (var i = 0; i < arrDayNames.length; i++)
  50.         {
  51.             var objCalendarCell = document.createElement('div');
  52.             objCalendarCell.className = 'CalendarCell';
  53.             objCalendarCell.appendChild(document.createTextNode(arrDayNames[i]));
  54.             objCalendarRowDays.appendChild(objCalendarCell);
  55.             objCalendarRowDays.appendChild(document.createTextNode('\n'));
  56.         }
  57.  
  58.         var intDaysInMonth = DaysInMonth(dtmStart.getFullYear(), dtmStart.getMonth());
  59.  
  60.         //Set the correct text and link on the top field
  61.         while (objCalendarYear.hasChildNodes())
  62.         {
  63.             objCalendarYear.removeChild(objCalendarYear.firstChild);
  64.         }
  65.         objCalendarYear.appendChild(document.createTextNode(arrMonths[dtmStart.getMonth()] + ' ' + dtmStart.getFullYear()));
  66.         objCalendarYear.setAttribute('onclick', strVarName + '.viewMonths(\'' + new Date(dtmStart.getFullYear(), dtmStart.getMonth(), 1) + '\')');
  67.         //Do the same for the navigation buttons
  68.         objNaviLeft.setAttribute('onclick', strVarName + '.viewDays(\'' + new Date(dtmStart.getFullYear(), dtmStart.getMonth() - 1, 1) + '\')');
  69.         objNaviRight.setAttribute('onclick', strVarName + '.viewDays(\'' + new Date(dtmStart.getFullYear(), dtmStart.getMonth() + 1, 1) + '\')');
  70.  
  71.         //Fill the first row with blank fields until we reach the starting point
  72.         var objFirstRow = document.createElement('div');
  73.         objFirstRow.className = 'CalendarRow';
  74.         objWrapper.appendChild(objFirstRow);
  75.         var intCount = 0;
  76.         for (intCount; intCount < dtmStart.getUTCDay(); intCount++)
  77.         {
  78.             var objNotThisMonth = document.createElement('div');
  79.             objNotThisMonth.className = 'CalendarCell NotThisMonth';
  80.             objFirstRow.appendChild(objNotThisMonth);
  81.             objFirstRow.appendChild(document.createTextNode('\n'));
  82.         }
  83.  
  84.         //Fill the rest of the first row with days
  85.         for (intCount; intCount < 7; intCount++)
  86.         {
  87.             var objCalendarCell = document.createElement('div');
  88.             objCalendarCell.className = 'CalendarCell';
  89.  
  90.             for (var j = 0; j < arrActiveDays.length; j++)
  91.             {
  92.                 var dtmActiveDay = arrActiveDays[j];
  93.                 var blnIsActiveDay = dtmActiveDay.getTime() == dtmStart.getTime();
  94.                 var strLink = 'window.open(\'/?';
  95.                 strLink += blnIsActiveDay ? 'ci' : 'ci2';   // Choose the querystring parameter
  96.                 strLink += '=' + dtmActiveDay.getFullYear() + '-' + eval(dtmActiveDay.getMonth() + 1) + '-' + dtmActiveDay.getDate() + '\', \'_self\');'
  97.                 objCalendarCell.setAttribute('onclick', strLink);
  98.                 if (blnIsActiveDay)
  99.                 {
  100.                     objCalendarCell.className += ' Active';
  101.                 }
  102.             }
  103.  
  104.             if (dtmToday.getTime() == dtmStart.getTime())
  105.             {
  106.                 if (dtmCurrent.getTime() == dtmStart.getTime())
  107.                 {
  108.                     objCalendarCell.className += ' Today';
  109.                 }
  110.                 else
  111.                 {
  112.                     objCalendarCell.className += ' TodayNotChosen';
  113.                 }
  114.             }
  115.             else if (dtmCurrent.getTime() == dtmStart.getTime())
  116.             {
  117.                 objCalendarCell.className += ' Chosen';
  118.             }
  119.  
  120.             objCalendarCell.appendChild(document.createTextNode(dtmStart.getDate()));
  121.             objFirstRow.appendChild(objCalendarCell);
  122.             objFirstRow.appendChild(document.createTextNode('\n'));
  123.             dtmStart.setDate(dtmStart.getDate() + 1);
  124.         }
  125.  
  126.         var objCalendarRow = document.createElement('div');
  127.         objCalendarRow.className = 'CalendarRow';
  128.  
  129.         //Fill each row with days
  130.         for (var i = dtmStart.getDate(); i <= intDaysInMonth; i++)
  131.         {
  132.             if (dtmStart.getUTCDay() == 0)
  133.             {
  134.                 objWrapper.appendChild(document.createTextNode('\n'));
  135.                 objCalendarRow = document.createElement('div');
  136.                 objCalendarRow.className = 'CalendarRow';
  137.                 objWrapper.appendChild(objCalendarRow);
  138.             }
  139.  
  140.             var objCalendarCell = document.createElement('div');
  141.             objCalendarCell.className = 'CalendarCell';
  142.  
  143.             for (var j = 0; j < arrActiveDays.length; j++)
  144.             {
  145.                 var dtmActiveDay = arrActiveDays[j];
  146.                 var blnIsActiveDay = dtmActiveDay.getTime() == dtmStart.getTime();
  147.                 var strLink = 'window.open(\'/?';
  148.                 strLink += blnIsActiveDay ? 'ci' : 'ci2';   // Choose the querystring parameter
  149.                 strLink += '=' + dtmActiveDay.getFullYear() + '-' + eval(dtmActiveDay.getMonth() + 1) + '-' + dtmActiveDay.getDate() + '\', \'_self\');'
  150.                 objCalendarCell.setAttribute('onclick', strLink);
  151.                 if (blnIsActiveDay)
  152.                 {
  153.                     objCalendarCell.className += ' Active';
  154.                 }
  155.             }
  156.  
  157.             if (dtmToday.getTime() == dtmStart.getTime())
  158.             {
  159.                 if (dtmCurrent.getTime() == dtmStart.getTime())
  160.                 {
  161.                     objCalendarCell.className += ' Today';
  162.                 }
  163.                 else
  164.                 {
  165.                     objCalendarCell.className += ' TodayNotChosen';
  166.                 }
  167.             }
  168.             else if (dtmCurrent.getTime() == dtmStart.getTime())
  169.             {
  170.                 objCalendarCell.className += ' Chosen';
  171.             }
  172.  
  173.             objCalendarCell.appendChild(document.createTextNode(dtmStart.getDate()));
  174.             objCalendarRow.appendChild(objCalendarCell);
  175.             objCalendarRow.appendChild(document.createTextNode('\n'));
  176.  
  177.             dtmStart.setDate(dtmStart.getDate() + 1);
  178.         }
  179.  
  180.         //Fill the rest of the last row with blank fields
  181.         for (var i = dtmStart.getUTCDay(); i < 7; i++)
  182.         {
  183.             var objNotThisMonth = document.createElement('div');
  184.             objNotThisMonth.className = 'CalendarCell NotThisMonth';
  185.             objCalendarRow.appendChild(objNotThisMonth);
  186.             objCalendarRow.appendChild(document.createTextNode('\n'));
  187.         }
  188.  
  189.     }
  190.  
  191.     this.viewMonths = function (dtmStart)
  192.     {
  193.         dtmStart = new Date(dtmStart);
  194.         if (dtmStart.getDate() > 1)
  195.             dtmStart.setDate(1);
  196.  
  197.         for (var i = objWrapper.childNodes.length; i >= 0; i--)
  198.         {
  199.             var objChild = objWrapper.childNodes[i];
  200.             if (objChild)
  201.             {
  202.                 if (objChild.className != 'CalendarRowNavi')
  203.                 {
  204.                     objWrapper.removeChild(objChild);
  205.                 }
  206.             }
  207.         }
  208.  
  209.         //Set the correct text and link on the top field
  210.         while (objCalendarYear.hasChildNodes())
  211.         {
  212.             objCalendarYear.removeChild(objCalendarYear.firstChild);
  213.         }
  214.         objCalendarYear.appendChild(document.createTextNode(dtmStart.getFullYear()));
  215.         objCalendarYear.setAttribute('onclick', strVarName + '.viewYears(\'' + new Date(dtmStart.getFullYear(), 0, 1) + '\')');
  216.         //Do the same for the navigation buttons
  217.         objNaviLeft.setAttribute('onclick', strVarName + '.viewMonths(\'' + new Date(dtmStart.getFullYear() - 1, dtmStart.getMonth(), 1) + '\')');
  218.         objNaviRight.setAttribute('onclick', strVarName + '.viewMonths(\'' + new Date(dtmStart.getFullYear() + 1, dtmStart.getMonth(), 1) + '\')');
  219.  
  220.         var objCalendarMonthRow = null;
  221.  
  222.         for (var i = 0; i < arrMonths.length; i++)
  223.         {
  224.             if (i % 3 == 0)
  225.             {
  226.                 objCalendarMonthRow = document.createElement('div');
  227.                 objCalendarMonthRow.className = 'CalendarMonthRow';
  228.                 objWrapper.appendChild(objCalendarMonthRow);
  229.             }
  230.  
  231.             var objCalendarCell = document.createElement('div');
  232.             objCalendarCell.className = 'CalendarCell';
  233.             objCalendarCell.appendChild(document.createTextNode(arrMonths[i]));
  234.             objCalendarCell.appendChild(document.createTextNode('\n'));
  235.             objCalendarCell.setAttribute('onclick', strVarName + '.viewDays(\'' + new Date(dtmStart.getFullYear(), i, 1) + '\')');
  236.             objCalendarMonthRow.appendChild(objCalendarCell);
  237.             objCalendarMonthRow.appendChild(document.createTextNode('\n'));
  238.         }
  239.     }
  240.  
  241.     this.viewYears = function (dtmStart)
  242.     {
  243.         dtmStart = new Date(dtmStart);
  244.         if (dtmStart.getDate() > 1)
  245.             dtmStart.setDate(1);
  246.  
  247.         for (var i = objWrapper.childNodes.length; i >= 0; i--)
  248.         {
  249.             var objChild = objWrapper.childNodes[i];
  250.             if (objChild)
  251.             {
  252.                 if (objChild.className != 'CalendarRowNavi')
  253.                 {
  254.                     objWrapper.removeChild(objChild);
  255.                 }
  256.             }
  257.         }
  258.  
  259.         //Set the correct text and link on the top field
  260.         while (objCalendarYear.hasChildNodes())
  261.         {
  262.             objCalendarYear.removeChild(objCalendarYear.firstChild);
  263.         }
  264.         objCalendarYear.appendChild(document.createTextNode(dtmStart.getFullYear() + ' - ' + eval(dtmStart.getFullYear() + 11)));
  265.         //Do the same for the navigation buttons
  266.         objNaviLeft.setAttribute('onclick', strVarName + '.viewYears(\'' + new Date(dtmStart.getFullYear() - 12, 0, 1) + '\')');
  267.         objNaviRight.setAttribute('onclick', strVarName + '.viewYears(\'' + new Date(dtmStart.getFullYear() + 12, 0, 1) + '\')');
  268.  
  269.         var objCalendarYearRow = null;
  270.  
  271.         for (var i = 0; i < 12; i++)
  272.         {
  273.             if (i % 3 == 0)
  274.             {
  275.                 objCalendarYearRow = document.createElement('div');
  276.                 objCalendarYearRow.className = 'CalendarYearRow';
  277.                 objWrapper.appendChild(objCalendarYearRow);
  278.             }
  279.  
  280.             var objCalendarCell = document.createElement('div');
  281.             objCalendarCell.className = 'CalendarCell';
  282.             objCalendarCell.appendChild(document.createTextNode(eval(dtmStart.getFullYear() + i)));
  283.             objCalendarCell.appendChild(document.createTextNode('\n'));
  284.             objCalendarCell.setAttribute('onclick', strVarName + '.viewMonths(\'' + new Date(eval(dtmStart.getFullYear() + i), 0, 1) + '\')');
  285.             objCalendarYearRow.appendChild(objCalendarCell);
  286.             objCalendarYearRow.appendChild(document.createTextNode('\n'));
  287.         }
  288.     }
  289.  
  290.     this.addActiveDay = function (inDate)
  291.     {
  292.         arrActiveDays[arrActiveDays.length] = inDate;
  293.     }
  294.  
  295.     CreateHeader = function (inType)
  296.     {
  297.         var objHeader = document.createElement('div');
  298.         objHeader.className = 'Header';
  299.  
  300.         var objHeaderImage = document.createElement('img');
  301.         objHeaderImage.src = '/gfx/box/headers/calendar.png';
  302.         objHeaderImage.width = '16';
  303.         objHeaderImage.width = '151';
  304.         objHeaderImage.alt = 'Maritim Kalender';
  305.         objHeader.appendChild(objHeaderImage);
  306.  
  307.         var objContent = document.createElement('div');
  308.         objContent.className = 'Content';
  309.  
  310.         objWrapper = document.createElement('div');
  311.         objWrapper.className = 'CalendarWrapper';
  312.         objContent.appendChild(objWrapper);
  313.  
  314.         var objCalendarRowNavi = document.createElement('div');
  315.         objCalendarRowNavi.className = 'CalendarRowNavi';
  316.         objWrapper.appendChild(objCalendarRowNavi);
  317.         objCalendarRowNavi.appendChild(document.createTextNode('\n'));
  318.  
  319.         objNaviLeft = document.createElement('div');
  320.         objNaviLeft.className = 'CalendarCell NaviLeft';
  321.         objCalendarRowNavi.appendChild(objNaviLeft);
  322.         objCalendarRowNavi.appendChild(document.createTextNode('\n'));
  323.  
  324.         objCalendarYear = document.createElement('div');
  325.         objCalendarYear.className = 'CalendarCell CalendarYear';
  326.         objCalendarRowNavi.appendChild(objCalendarYear);
  327.         objCalendarRowNavi.appendChild(document.createTextNode('\n'));
  328.  
  329.         objNaviRight = document.createElement('div');
  330.         objNaviRight.className = 'CalendarCell NaviRight';
  331.         objCalendarRowNavi.appendChild(objNaviRight);
  332.  
  333.         while (objBoxCalendar.hasChildNodes())
  334.         {
  335.             objBoxCalendar.removeChild(objBoxCalendar.firstChild);
  336.         }
  337.         objBoxCalendar.appendChild(objHeader);
  338.         objBoxCalendar.appendChild(objContent);
  339.     }
  340.  
  341.     DaysInMonth = function (year, month)
  342.     {
  343.         return 32 - new Date(year, month, 32).getDate();
  344.     }
  345. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement