This is also a confusing problem for most of the native Korean speakers. They will understand what you mean even if you use in a wrong way. But actually, there is a slight difference.
계시다 and 있으시다 are both honorific forms of 있다. But they are used in different situations. 계시다 is the honorific form of 있다 when 있다 is used as a verb or an auxiliary verb. 있으시다 is used when 있다 is used as an adjective(In Korean, there is no be-verb. Thus, every word which means a state of a thing or a person is considered as an adjective).
For example:
- 거기 그대로 있어라/계세요. - In this case, 있다/계시다 is a verb.
- 이것을 가지고 있어라/계세요. - In this case, 있다/계시다 is an auxiliary verb of another verb, 가지다.
- 아버지께는 형님이 한 분 있다/있으시다. - In this case, the sentence can be translated into There is a brother of my father's. (This sentence is a little bit unnatural but I translated it in word-for-word.) 있으시다 in the sentence is a be-verb, not a normal verb. In Korean sentence, 있다 is considered to be an adjective. Therefore, 계신다 is wrong in this case.
Add) Steven's examples show a very important characteristic of Korean honorific. His example sentences show the difference between direct honorific(직접 높임) and indirect honorific(간접 높임). 계시다 is a
This sentence used 직접 높임 because the honorific form 계신다 is honoring the subject 선생님.
The second sentence is using 간접 높임. If you use 직접 높임 here, it honors another noun, 아기(Baby). We are trying to honor our teacher, not his/her baby. (If we say 선생님께서는 아기를 갖고 계신다 it is okay because 을/를 makes removes the ambiguity of the target to honor. 계신다 is used to honor 선생님, obviously. But in the example above, after 아기, 이/가 is used.) In this case, we use 간접 높임 to avoid honoring 아기 in the sentence.
계시다 is the direct honorific form of 있다. 있으시다 is the indirect honorific form.