If you want a small dialog (in size and elements) you can send them each second.
A guy is using it on his server (and many other does use too); he can send 10 dialogs/sec to the player (
video here) without lag issues, even with bigger gumps. This is tested on live servers but of course there are things you should know:
-Each dialog require you to send a very new dialog to the client, the bigger the dialog, the bigger will be the message sent. Players may experience some latency issue (assumingthey already have latency issues) if you do manage to send 10 dialog/sec. IMO 1 dialog/sec is enough.
-Client rendering is fully handled by software, so even if you create a big dialog with 3 elements, it will still be slow to render (specially clients <502)
-Number of elements also increase the rendering time
-Server will have to compile a new dialog each time a new one is sent. Since you can not cache a gump your best is to pre-render the dialog packet and send each one as needed. You will end with a really big script (and may not worth the effort).
I'm not saying "no you can't do that" or "it will not work", I'm just showing you that you should be warned with some details.
Coruja is right, each dialog for each player will cause an immense amount of data being processed and sent to your clients which will have to process these data. Your server can surely handle that but you may sacrifice some good amount of resources; you should always aim for the worst case
My suggestion is to do some optimization. If your cooldown time is fairly big (30,60..1000 secs) you can send them in order to only tell the player the exact moment when the timer decay, for example:
30 secs remaining...
20 secs...
10 secs...
5, 4, 3, 2, 1
It will be irrelevant to the player to know that he does have 27 seconds remaining, so only send the last five seconds with 1 sec resolution, assuming the last five seconds are the most important.
Lightweight dialog does apply, and if you want to show more than one cooldown to the player, show only one dialog, but your resolution will go crazy, since they will not end at same time.
Why not use the client buffer bar?