В консоле выдает Uncaught TypeError: next is not a function
Вы обработчики подключили инлайново, а по умолчанию jsfiddle оборачивает код в window.onload - вот они и отсутствуют в глобальной области видимости. Назначайте обработчики с помощью addEventListener; или, в верхней части окна с js кодом есть выпадающее меню, открываете его, находите пункт "load type", выставляете значение "No wrap - bottom of < body >". UPD. Неактуально, исправили эту дичь с onload, теперь js код всегда добавляется как есть.
Как выделить при помощи класса текущее число, не выходит
добавляю...
Это безумие - currDay является датой, а вы пытаетесь работать с ней как с DOM нодой, classList.add, бред какой-то. Ну и само условие неправильное - год и месяц вы всегда при проверке используете одни и те же, где тут currDay? Должен быть. А проверка числа - ещё одно безумие, вы его сравниваете с объектом даты. Ну и наконец, почему всё это происходит после цикла, откуда там будет доступна ячейка с сегодняшней датой? - проверяйте дату при создании разметки ячейки таблицы, и в зависимости от результата прямо туда, в разметку, добавляйте атрибут class.
Есть и ещё косяки:
Не очищаете содержимое #calendar-body при переключении месяца. Не хватает
tbl.innerHTML = '';
перед циклом.
Условие продолжения цикла -
currDay.getMonth() <= month
. Представьте, что следующий месяц - январь, год кончается. Что будет с вашим условием? Правильно, оно останется истинным. Навсегда. Лучше сделать так: проверяете равенство, без "меньше", а while заменяете на do-while - тогда числа предыдущего месяца, формально не подходящие под условие, всё равно будут обработаны, так как тело цикла выполняется до проверки условия.
UPD. Зачем дни недели вписаны в первую неделю? - я бы их в заголовок таблицы (thead) вынес.
Неочевидный косяк - переменный размер календаря. В зависимости от количества дней в месяце и дня недели первого числа количество недель может быть равно 4, 5 или 6. Пусть всегда будет 6. Да, будет показываться больше дней из соседних месяцев, но высота календаря перестанет изменяться при переключении месяца.
https://jsfiddle.net/c83kedtm/