function showCalendarWidget(date)
{
  var jsScript = '<script type="text/javascript" src="assets/templates/template/js/calendar-widget/events-handler.js"></script>';
  
  var month         = date.getMonth();
  var year          = date.getYear(); // + 1900;
  var daysInMonth   = getDaysInMonth(month, year);
  var firstMonthDay = new Date(year, month, 1).getDay();
  
  /* months select list */
  var widgetHtml = '<select class="month">';
  for (var i = 0; i < 12; ++i) {
    var attrs = 'value="' + i + '"';
    if (i == month) {
      attrs += ' selected="selected"';
    }
    widgetHtml += '<option ' + attrs + '>' + getMonthName(i) + '</option>';
  }
  widgetHtml += '</select>';
  
  /* years select list */
  widgetHtml      += '<select class="year">';
  var currentYear  = new Date().getYear() + 1900;
  var years        = [currentYear];
  for (var i = 1; i <= 5; ++i) {
    years.push(currentYear - i);
    years.push(currentYear + i);
  }
  years.sort();
  for (var i = 0; i < years.length; ++i) {
    var attrs = 'value="' + years[i] + '"';
    if (years[i] == year) {
      attrs += ' selected="selected"';
    }
    widgetHtml += '<option ' + attrs + '>' + years[i] + '</option>';
  }
  widgetHtml += '</select>';
  
  /* calendar table */
  widgetHtml += '<table>';
  /* header row */
  widgetHtml += '<tr>';
  for (var i = 0; i < 7; ++i) {
    widgetHtml += '<th>' + getWeekDayName(i); + '</th>';
  }
  widgetHtml += '</tr>';
  /* calendar */
  var day = -firstMonthDay + 1;
  while (day < daysInMonth) {
    widgetHtml += '<tr>';
    for (var i = 0; i < 7; ++i) {
      ++day;
      if (day <= 0 || day > daysInMonth) {
        widgetHtml += '<td>&nbsp;</td>';
      } else {
        widgetHtml += '<td' + (day == new Date().getDate() && month == new Date().getMonth() && year == (new Date().getYear() + 1900) ? ' class="current-day"' : '') + '><a href="#">' + day + '</a></td>';
      }
    }
    widgetHtml += '</tr>';
  }
  widgetHtml += '</table>';
  
  $('#calendar-widget').html(widgetHtml + jsScript);
  
  function getDaysInMonth(m, y)
  {
    var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    
    if (( m == 1 ) && (y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0))) {
      return 29;
    }
    return daysInMonth[m];
  }

  function getMonthName(monthIndex)
  {
    var months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
    
    return months[monthIndex];
  }
  
  function getWeekDayName(weekDayIndex)
  {
    var weekDays = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб', 'Вс'];
    
    return weekDays[weekDayIndex];
  }
}
