
if (!window.YUKU) var YUKU = {}

YUKU.calendar = {

   dayNamesS : ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
   dayNamesL : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],

   monNamesS : ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
   monNamesL : ['January', 'February', 'March', 'April', 'May', 'June',
                'July', 'August', 'September', 'October', 'November', 'December'],

   numDays : [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],
              [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]],

   write : function (el, date, header, short)
   {
      var now = new Date();
      var date = date;

      var id = 'cal-' + date.getFullYear() + '-' + (date.getMonth()+1);

      var wkday = date.getDay();
      var daysinmonth = this.getDaysInMonth(date);
      var m = date.getMonth();
      var y = date.getFullYear();

      var table = make_el('TABLE', {id : id, className : 'calendar'});

      if (header)
      {
         var thead = make_el('THEAD', table);
         var tr = make_el('TR', thead);
         //var monthName = (short) ? this.monNamesS[m] : this.monNamesL[m];
         var th = make_el('TH', {colSpan : '7', className : 'month'}, this.monNamesL[m] + ' ' + y, tr);
      }

      var tbody = make_el('TBODY', table);
      var tr = make_el('TR', tbody);

      for (i = 0; i < 7; i++)
      {
         var dayName = (short) ? this.dayNamesS[i] : this.dayNamesL[i];
         var td = make_el('TH', {className : 'day'}, dayName, tr);
      }

      // 1st of month
      temp = new Date(date.getFullYear(), date.getMonth(), 1, 0, 0, 0);
      var firstday = temp.getDay();

      var tr = make_el('TR', tbody)

      for (i = 0; i < firstday; i++)
      {
         make_el('TD', {className : 'date empty'}, ' ', tr);
      }

      for (i = 1; i <= daysinmonth; i++)
      {
         var wkday = temp.getDay();

         if (wkday == 0 && i != 1)
            var tr = make_el('TR', tbody);

         if (wkday != 7)
         {
            if (temp.getMonth() == now.getMonth() && temp.getFullYear() == now.getFullYear() && temp.getDate() == now.getDate())
            {
               tdClass = 'date today';
            }
            else
            {
               tdClass = 'date';
            }

            var td = make_el('TD', {className : tdClass}, temp.getDate(), tr);
         }

         temp = new Date(temp.getFullYear(), temp.getMonth(), temp.getDate() + 1);
      }

      var lastday = temp.getDay();

      if (lastday > 0)
      {
         for (i = lastday; i < 7; i++)
         {
            make_el('TD', {className : 'date empty'}, ' ', tr);
         }
      }

      get_by_id(el).appendChild(table);
   },

   getDaysInMonth : function (date)
   {
      var y = date.getYear();
      var m = date.getMonth();
      var l = (y % 4 == 0 && (y % 100 != 0 || y % 400 == 0));

      return this.numDays[l ? 1 : 0][m];
   }
}