One way would be to encapsulate all of your checks inside a subroutine. Once you've determined the results of today, you can simply add to the date given (using proper date arithmetic of course) and re-check until you get a valid non-holiday/non-weeked date.