Зачем вы дергаете DOM (причем MSDOM, который будет работать только в IE), когда работаете с элементом в цикле?
Не работает скрипт, потому что условие стоит не правильное, смотрите сами:
if (el.name == "Sfone" && (el.value.length < 3)||isNaN(el.value)) errorList.push(5);
А поскольку:
true == false && false || true
То ошибка будет срабатывать на всех полях. Сгруппируйте условия скобками.