Не могу понять почему не удаляются все open?
classes.length - не константа. Она меняется при изменении длины массива.
По шагам цикла:Шаг 0:
i = 0;
classes.length = 4;
i < classes.length // true
удаляем 'open' из массиваШаг 1:
i = 1;
classes.length = 3;
i < classes.length // true
удаляем 'open' из массиваШаг 2:
i = 2;
classes.length = 2;
i < classes.length // falseВыходим из цикла
Еще проще:function removeClass(obj, cls){
    obj.className = obj.className.split(cls).join('');
}