code: function forwardPassTask(task, start) {
      var resAll = ['_proj', '_task' + task.id],
          resources = task.resources ? resAll.concat(task.resources) : resAll,
          duration = task.duration,
          next = start,
          scheduledTask = {schedule: [], duration: task.duration};
  
      while(duration) {
        var r = resMgr.makeReservation(resources, next, task.minSchedule || 1, duration);
        if(!r.success) return undefined;
  
        scheduledTask.earlyStart = scheduledTask.earlyStart || r.start;
        scheduledTask.schedule.push(r);
        duration -= r.duration;
        next = r.end;
      }
  
      scheduledTask.earlyFinish = next;
      scheduledTasks[task.id] = scheduledTask;
  
      return next;
    }
docs: Finds the next available time that all of a tasks constraints are met and
  makes the appropriate resource reservations. A task may be scheduled in a
  single contiguous block or multiple blocks of time.