This
window.setTimeout(trainingTimer(duration,c+1),1000);
is the same as
var result = trainingTimer(duration,c+1);
window.setTimeout(result,1000);
It takes the result of the executed method and assigns it.
And since training timer method returns nothing. Your code is basically this
trainingTimer(duration,c+1);
window.setTimeout(undefined, 1000);