Итоги голосования для комментария:
Tempestus
Тут остается только для каждой необходимой ситуации считать заново.