Advertisement
Guest User

Javascript Calendar v4

a guest
Oct 7th, 2012
59
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 += dtmStart.getFullYear() + '-' + eval(dtmStart.getMonth() + 1) + '-' + dtmStart.getDate() + '\', \'_self\');'
  97.                         objCalendarCell.setAttribute('onclick', strLink);
  98.                         if (blnIsActiveDay)
  99.                         {
  100.                             objCalendarCell.className += ' Active';
  101.                             break;
  102.                         }
  103.                     }
  104.  
  105.                     if (dtmToday.getTime() == dtmStart.getTime())
  106.                     {
  107.                         if (dtmCurrent.getTime() == dtmStart.getTime())
  108.                         {
  109.                             objCalendarCell.className += ' Today';
  110.                         }
  111.                         else
  112.                         {
  113.                             objCalendarCell.className += ' TodayNotChosen';
  114.                         }
  115.                     }
  116.                     else if (dtmCurrent.getTime() == dtmStart.getTime())
  117.                     {
  118.                         objCalendarCell.className += ' Chosen';
  119.                     }
  120.  
  121.                     objCalendarCell.appendChild(document.createTextNode(dtmStart.getDate()));
  122.                     objFirstRow.appendChild(objCalendarCell);
  123.                     objFirstRow.appendChild(document.createTextNode('\n'));
  124.                     dtmStart.setDate(dtmStart.getDate() + 1);
  125.                 }
  126.  
  127.                 var objCalendarRow = document.createElement('div');
  128.                 objCalendarRow.className = 'CalendarRow';
  129.  
  130.                 //Fill each row with days
  131.                 for (var i = dtmStart.getDate(); i <= intDaysInMonth; i++)
  132.                 {
  133.                     if (dtmStart.getUTCDay() == 0)
  134.                     {
  135.                         objWrapper.appendChild(document.createTextNode('\n'));
  136.                         objCalendarRow = document.createElement('div');
  137.                         objCalendarRow.className = 'CalendarRow';
  138.                         objWrapper.appendChild(objCalendarRow);
  139.                     }
  140.  
  141.                     var objCalendarCell = document.createElement('div');
  142.                     objCalendarCell.className = 'CalendarCell';
  143.  
  144.                     for (var j = 0; j < arrActiveDays.length; j++)
  145.                     {
  146.                         var dtmActiveDay = arrActiveDays[j];
  147.                         var blnIsActiveDay = dtmActiveDay.getTime() == dtmStart.getTime();
  148.  
  149.                         var strLink = 'window.open(\'/?';
  150.                         strLink += blnIsActiveDay ? 'ci=' : 'ci2=';   // Choose the querystring parameter
  151.                         strLink += dtmStart.getFullYear() + '-' + eval(dtmStart.getMonth() + 1) + '-' + dtmStart.getDate() + '\', \'_self\');'
  152.                         objCalendarCell.setAttribute('onclick', strLink);
  153.                         if (blnIsActiveDay)
  154.                         {
  155.                             objCalendarCell.className += ' Active';
  156.                             break;
  157.                         }
  158.                     }
  159.  
  160.                     if (dtmToday.getTime() == dtmStart.getTime())
  161.                     {
  162.                         if (dtmCurrent.getTime() == dtmStart.getTime())
  163.                         {
  164.                             objCalendarCell.className += ' Today';
  165.                         }
  166.                         else
  167.                         {
  168.                             objCalendarCell.className += ' TodayNotChosen';
  169.                         }
  170.                     }
  171.                     else if (dtmCurrent.getTime() == dtmStart.getTime())
  172.                     {
  173.                         objCalendarCell.className += ' Chosen';
  174.                     }
  175.  
  176.                     objCalendarCell.appendChild(document.createTextNode(dtmStart.getDate()));
  177.                     objCalendarRow.appendChild(objCalendarCell);
  178.                     objCalendarRow.appendChild(document.createTextNode('\n'));
  179.  
  180.                     dtmStart.setDate(dtmStart.getDate() + 1);
  181.                 }
  182.  
  183.                 //Fill the rest of the last row with blank fields
  184.                 for (var i = dtmStart.getUTCDay(); i < 7; i++)
  185.                 {
  186.                     var objNotThisMonth = document.createElement('div');
  187.                     objNotThisMonth.className = 'CalendarCell NotThisMonth';
  188.                     objCalendarRow.appendChild(objNotThisMonth);
  189.                     objCalendarRow.appendChild(document.createTextNode('\n'));
  190.                 }
  191.  
  192.             }
  193.  
  194.             this.viewMonths = function (dtmStart)
  195.             {
  196.                 dtmStart = new Date(dtmStart);
  197.                 if (dtmStart.getDate() > 1)
  198.                     dtmStart.setDate(1);
  199.  
  200.                 for (var i = objWrapper.childNodes.length; i >= 0; i--)
  201.                 {
  202.                     var objChild = objWrapper.childNodes[i];
  203.                     if (objChild)
  204.                     {
  205.                         if (objChild.className != 'CalendarRowNavi')
  206.                         {
  207.                             objWrapper.removeChild(objChild);
  208.                         }
  209.                     }
  210.                 }
  211.  
  212.                 //Set the correct text and link on the top field
  213.                 while (objCalendarYear.hasChildNodes())
  214.                 {
  215.                     objCalendarYear.removeChild(objCalendarYear.firstChild);
  216.                 }
  217.                 objCalendarYear.appendChild(document.createTextNode(dtmStart.getFullYear()));
  218.                 objCalendarYear.setAttribute('onclick', strVarName + '.viewYears(\'' + new Date(dtmStart.getFullYear(), 0, 1) + '\')');
  219.                 //Do the same for the navigation buttons
  220.                 objNaviLeft.setAttribute('onclick', strVarName + '.viewMonths(\'' + new Date(dtmStart.getFullYear() - 1, dtmStart.getMonth(), 1) + '\')');
  221.                 objNaviRight.setAttribute('onclick', strVarName + '.viewMonths(\'' + new Date(dtmStart.getFullYear() + 1, dtmStart.getMonth(), 1) + '\')');
  222.  
  223.                 var objCalendarMonthRow = null;
  224.  
  225.                 for (var i = 0; i < arrMonths.length; i++)
  226.                 {
  227.                     if (i % 3 == 0)
  228.                     {
  229.                         objCalendarMonthRow = document.createElement('div');
  230.                         objCalendarMonthRow.className = 'CalendarMonthRow';
  231.                         objWrapper.appendChild(objCalendarMonthRow);
  232.                     }
  233.  
  234.                     var objCalendarCell = document.createElement('div');
  235.                     objCalendarCell.className = 'CalendarCell';
  236.                     objCalendarCell.appendChild(document.createTextNode(arrMonths[i]));
  237.                     objCalendarCell.appendChild(document.createTextNode('\n'));
  238.                     objCalendarCell.setAttribute('onclick', strVarName + '.viewDays(\'' + new Date(dtmStart.getFullYear(), i, 1) + '\')');
  239.                     objCalendarMonthRow.appendChild(objCalendarCell);
  240.                     objCalendarMonthRow.appendChild(document.createTextNode('\n'));
  241.                 }
  242.             }
  243.  
  244.             this.viewYears = function (dtmStart)
  245.             {
  246.                 dtmStart = new Date(dtmStart);
  247.                 if (dtmStart.getDate() > 1)
  248.                     dtmStart.setDate(1);
  249.  
  250.                 for (var i = objWrapper.childNodes.length; i >= 0; i--)
  251.                 {
  252.                     var objChild = objWrapper.childNodes[i];
  253.                     if (objChild)
  254.                     {
  255.                         if (objChild.className != 'CalendarRowNavi')
  256.                         {
  257.                             objWrapper.removeChild(objChild);
  258.                         }
  259.                     }
  260.                 }
  261.  
  262.                 //Set the correct text and link on the top field
  263.                 while (objCalendarYear.hasChildNodes())
  264.                 {
  265.                     objCalendarYear.removeChild(objCalendarYear.firstChild);
  266.                 }
  267.                 objCalendarYear.appendChild(document.createTextNode(dtmStart.getFullYear() + ' - ' + eval(dtmStart.getFullYear() + 11)));
  268.                 //Do the same for the navigation buttons
  269.                 objNaviLeft.setAttribute('onclick', strVarName + '.viewYears(\'' + new Date(dtmStart.getFullYear() - 12, 0, 1) + '\')');
  270.                 objNaviRight.setAttribute('onclick', strVarName + '.viewYears(\'' + new Date(dtmStart.getFullYear() + 12, 0, 1) + '\')');
  271.  
  272.                 var objCalendarYearRow = null;
  273.  
  274.                 for (var i = 0; i < 12; i++)
  275.                 {
  276.                     if (i % 3 == 0)
  277.                     {
  278.                         objCalendarYearRow = document.createElement('div');
  279.                         objCalendarYearRow.className = 'CalendarYearRow';
  280.                         objWrapper.appendChild(objCalendarYearRow);
  281.                     }
  282.  
  283.                     var objCalendarCell = document.createElement('div');
  284.                     objCalendarCell.className = 'CalendarCell';
  285.                     objCalendarCell.appendChild(document.createTextNode(eval(dtmStart.getFullYear() + i)));
  286.                     objCalendarCell.appendChild(document.createTextNode('\n'));
  287.                     objCalendarCell.setAttribute('onclick', strVarName + '.viewMonths(\'' + new Date(eval(dtmStart.getFullYear() + i), 0, 1) + '\')');
  288.                     objCalendarYearRow.appendChild(objCalendarCell);
  289.                     objCalendarYearRow.appendChild(document.createTextNode('\n'));
  290.                 }
  291.             }
  292.  
  293.             this.addActiveDay = function (inDate)
  294.             {
  295.                 arrActiveDays[arrActiveDays.length] = inDate;
  296.             }
  297.  
  298.             CreateHeader = function (inType)
  299.             {
  300.                 var objHeader = document.createElement('div');
  301.                 objHeader.className = 'Header';
  302.  
  303.                 var objHeaderImage = document.createElement('img');
  304.                 objHeaderImage.src = '/gfx/box/headers/calendar.png';
  305.                 objHeaderImage.width = '16';
  306.                 objHeaderImage.width = '151';
  307.                 objHeaderImage.alt = 'Maritim Kalender';
  308.                 objHeader.appendChild(objHeaderImage);
  309.  
  310.                 var objContent = document.createElement('div');
  311.                 objContent.className = 'Content';
  312.  
  313.                 objWrapper = document.createElement('div');
  314.                 objWrapper.className = 'CalendarWrapper';
  315.                 objContent.appendChild(objWrapper);
  316.  
  317.                 var objCalendarRowNavi = document.createElement('div');
  318.                 objCalendarRowNavi.className = 'CalendarRowNavi';
  319.                 objWrapper.appendChild(objCalendarRowNavi);
  320.                 objCalendarRowNavi.appendChild(document.createTextNode('\n'));
  321.  
  322.                 objNaviLeft = document.createElement('div');
  323.                 objNaviLeft.className = 'CalendarCell NaviLeft';
  324.                 objCalendarRowNavi.appendChild(objNaviLeft);
  325.                 objCalendarRowNavi.appendChild(document.createTextNode('\n'));
  326.  
  327.                 objCalendarYear = document.createElement('div');
  328.                 objCalendarYear.className = 'CalendarCell CalendarYear';
  329.                 objCalendarRowNavi.appendChild(objCalendarYear);
  330.                 objCalendarRowNavi.appendChild(document.createTextNode('\n'));
  331.  
  332.                 objNaviRight = document.createElement('div');
  333.                 objNaviRight.className = 'CalendarCell NaviRight';
  334.                 objCalendarRowNavi.appendChild(objNaviRight);
  335.  
  336.                 while (objBoxCalendar.hasChildNodes())
  337.                 {
  338.                     objBoxCalendar.removeChild(objBoxCalendar.firstChild);
  339.                 }
  340.                 objBoxCalendar.appendChild(objHeader);
  341.                 objBoxCalendar.appendChild(objContent);
  342.             }
  343.  
  344.             DaysInMonth = function (year, month)
  345.             {
  346.                 return 32 - new Date(year, month, 32).getDate();
  347.             }
  348.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement