(4) а про решаемую задачу?
Можно попробовать сделать числовой реквизит формы, его заполнить в зависимости от типа документа, а потом красить опираясь на реквизит. Это финт ушами практически для любой ситуации.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший