How should a certain action be disabled, when the user has run out of necessary permissions to perform that action?
Specifically, I am designing a search engine where each search may take up to an hour (after it has been run, it can be an hour before the results are ready). User can run only a certain amount of concurrent searches, based on the type of account that they have.
For example: User has an account which allows 2 concurrent searches (for other accounts this number can be anywhere from 1 to 5). So, the user will run one search, then another and then they can't run another one, until the first one is over.
My question is, when the user hits this limit, how should the search be disabled?
I have come up with three possible solutions, and am unsure which one (if any) is the best way to do this. I welcome alternatives:
Disabled (grayed) action button, with a tooltip on hover, explaining why it is disabled
- Pros: Unobtrusive, lets user still fill in the form
- Cons: Not very obvious and users might not read the tooltip on hover. Might be annoying that after the form was filled, user can't run the search
Overlay with an explanation and a possibility to upgrade account. (It is over the form)
- Pros: Obvious and a possible solution (upgrade). Stops right away (before user has filled the form)
- Cons: Intrusive and kind of annoying. Also feels like an error has occured.
- After action button has been pressed, layover with an explanation
- Pros: It lets user fill in the form. Unobtrusive. Can disappear when searching is available again (a nice visual cue)
- Cons: 'Fails' only after action button has been pressed - might be annoying.
Please note, that some users may have a concurrency limit of 1 search, meaning that this 'disable' will happen often. Also note that this is the main functionality of the app.
Here is an example of 2nd option.