
// В ASP добавте сюда следующую строчку: <script language=javascript runat=server>
//-------------------------------------------------------------------------------------
function leapYear(year) //Функция, проверяющая високосный ли год...
{
  if (year % 4 == 0) 
  {
    if (year % 100 == 0) 
      if (year % 400 == 0) return true; else return false;
    return true; 
  };
  return false;
}
//-------------------------------------------------------------------------------------
function DaysInMonth(month, year) 
{
  var ar = new Array(11);
  // January  // February
  ar[0] = 31; ar[1] = (leapYear(year)) ? 29 : 28; 
   // March   // April    // May      // June     // July     // August
  ar[2] = 31; ar[3] = 30; ar[4] = 31; ar[5] = 30; ar[6] = 31; ar[7] = 31; 
  // September// October  // November  // December
  ar[8] = 30; ar[9] = 31; ar[10] = 30; ar[11] = 31;
  return ar[month];
}
//-------------------------------------------------------------------------------------
function getMonthName(month) 
{
  var ar = new Array(11)
  ar[0] = "Январь"; ar[1] = "Февраль"; ar[2] = "Март"; ar[3] = "Апрель";
  ar[4] = "Май"; ar[5] = "Июнь"; ar[6] = "Июль"; ar[7] = "Август";
  ar[8] = "Сентябрь"; ar[9] = "Октябрь"; ar[10] = "Ноябрь"; ar[11] = "Декабрь";
  return ar[month];
}
//-------------------------------------------------------------------------------------
function getShortWkDayName(wday) // Сокращенные названия дней неделиC
{
  var wkDay = new Array(6)
  wkDay[0] = "Пн"; wkDay[1] = "Вт"; wkDay[2] = "Ср"; wkDay[3] = "Чт";
  wkDay[4] = "Пт"; wkDay[5] = "Сб"; wkDay[6] = "Вс";
  return wkDay[wday];
}
//-------------------------------------------------------------------------------------

//------------------------------------------------------------------------------------------------------
function drawCal(year, month, firstDay, lastDay, digitHL, FuncName, div_id)
{
var prevMonth = (month > 0) ? month-1 : 11;
var prevYear = (month > 0) ? year : year-1;
var nextMonth = (month > 10) ? 0 : month+1;
var nextYear = (month > 10) ? year+1 : year;

  // Константы значений некоторых атрибутов
  var firstDayInstance, ii=0;;
  if (firstDay==0)
  { firstDayInstance = new Date(year, month, 1); firstDay=1; }
  else
  { firstDayInstance = new Date(year, month, firstDay); }
  var firstDayWeekDay=(firstDayInstance.getDay()-1 < 0) ? 6 : firstDayInstance.getDay()-1;
  firstDayInstance = null;
  if (lastDay==0) {lastDay=DaysInMonth(month, year)};

  var jscr1, jscr2, jscr3; //ПРОТОТИП ФУНКЦИИ ВЫЗЫВАЮЩЕЙСЯ ПО КЛИКЕ НА ДАТУ!
  jscr1='<a href="javascript:' + FuncName + '('; jscr2=')" class=cal>'; jscr3='</a>';
  var text = "";
  text += '<table cellpadding=5 cellspacing=0 border=1 class=m>';
  text += '<colgroup span="5" id="Day" />';
  text += '<colgroup span="2" id="HDay" />\n'; //колонки с выходными днями обычно бывают пошире остальных

  text += '<tr><td class="t_h" style="text-align:center">';
  text += '<img src=/_img/act/back.gif onclick="drawCal(' + (year-1) + ', ' + month + ', 0, 0, '+digitHL+',\''+FuncName+'\', \'' + div_id + '\')">';
  text += '<td class="t_h" colspan="5" style="text-align:center">';
  text += '<b>' + year + '</b>' ;
  text += '<td width=12 class="t_h" style="text-align:center">';
  text += '<img src=/_img/act/forw.gif onclick="drawCal(' + (year+1) + ', ' + month + ', 0, 0, '+digitHL+',\''+FuncName+'\', \'' + div_id + '\')">';
  text +='</td></tr>'; 

  text += '<tr><td class="t_h" style="text-align:center">';
  text += '<img src=/_img/act/back.gif onclick="drawCal('+prevYear+', ' + prevMonth + ', 0, 0, '+digitHL+',\''+FuncName+'\', \'' + div_id + '\')">';
  text += '<td class="t_h" colspan="5" style="text-align:center">';
  text += '<b>' + getMonthName(month) + '</b>'  ;
  text += '<td class="t_h" style="text-align:center">';
  text += '<img src=/_img/act/forw.gif onclick="drawCal('+nextYear+', ' + nextMonth + ', 0, 0, '+digitHL+',\''+FuncName+'\', \'' + div_id + '\')">';
  text +='</td></tr>'; 

  text += '<tr>'; // Создаем строку с названиям Дней недели
  for (var dayNum = 0; dayNum < 7; ++dayNum) 
    {text += '<td ' + ((dayNum>4) ? 'class="wday" >' : '>') + getShortWkDayName(dayNum) + '</td>';}
  text += '</tr>\n';

  // Пошли непосредственно дни заносить...
  var digit = firstDay;
  var curCell = 0;
  var weekNum=Math.ceil((lastDay-(firstDay-1) + firstDayWeekDay) / 7);

  for (var row = 1; row <= weekNum; ++row) 
  {
    text += '<tr height="16">'
    for (var col = 1; col <= 7; ++col) 
    {
      if (digit > lastDay) 
         { text += '<td class="CALempty">&nbsp;</td>'; continue; };
      if (curCell < firstDayWeekDay) 
         { text += '<td class="CALempty">&nbsp;</td>'; curCell++; } 
      else 
      {
        text += '<td ';
        text += (digit == digitHL) ? 'class="daynow" ' : '';
        text += (col > 5) ? 'class="dayoff" >' : '>';
        text += jscr1 + year + ',' +  month  + ',' +  digit + jscr2 + digit + jscr3;
        text += '</td>';
        digit++;
      }
    }
    text += '</tr>\n';
  };
  text += '</table>\n\n';
  document.all[div_id].innerHTML = text; 
}
