docs: function(date, forward){
        // check for period is enabled
        if (!this.isNextPeriodEnabled(date, forward))
          return false;
  
        if (this.map)
        {
          var offset = forward ? 1 : -1;
          var startMark = forward ? 'start' : 'till';
          var endMark = forward ? 'till' : 'start';
          var cursor = dateUtils.add(new Date(date), 'millisecond', offset);
          var map = this.map[this.periodEnableByDefault ? 'disabled' : 'enabled'];
  
          if (map)
          {
            // init period
            var period = getPeriod(YEAR, cursor);
  
            // if current year selected, get a part of period
            if (period.periodEnd.getFullYear() == cursor.getFullYear())
              period[startMark] = cursor;
  
            // search for enable year
            while (!this.isPeriodEnabled(period.periodStart, period.periodEnd))
              period = getPeriod(YEAR, dateUtils.add(cursor, YEAR, offset));
  
            // enabled year found, search for enabled month - it's situate between period.periodStart and period.periodEnd
            period[endMark] = getPeriod(MONTH, period[startMark])[endMark];
            while (!this.isPeriodEnabled(period.periodStart, period.periodEnd))
              period = getPeriod(MONTH, dateUtils.add(cursor, MONTH, offset));
  
            // enabled month found, search for day
            var s = unpackDate(period[startMark]);
            var t = unpackDate(period[endMark]);
            var month = map[t.year] && map[t.year][t.month];
  
            // month check out
            if (month)
            {
              if (this.periodEnableByDefault)
              {
                var mask  = DAY_COUNT_MASK[period.periodEnd.getMonthDayCount()];
                month = month & mask ^ mask;  // bit inverse
              }
  
              // search for first not zero bit
              for (var i = s.day; i != t.day + offset; i += offset)
                if (month >> i & 1)
                {
                  // date found
                  cursor = new Date(s.year, s.month, i + 1);
                  break;
                }
            }
            else
              // month may be null: this case possible in 'enabled' default state only,
              // when no disabled days in month or description of month omited.
              // This case means that we could return day of period.periodEnd
  
              return getPeriod(DAY, period[startMark]);
          }
        }
  
        return getPeriod(DAY, cursor);
      }