Какие значения переменных в обработчиках событий?
Вот этот кусок кода выполняется сразу, а не после загрузки или при ошибке:img.onload = counter++;
img.onerror = counter++;
Т.е. вы дважды увеличиваете счётчик на 1, и в свойствах onload/onerror зачем-то оказываются числа, а не функции. Поэтому и не работает.
img.onload = counter++;
img.onerror = counter++;
что вы этим хотели сказать?