1- Before attempting to change any content, verify that the content is loading. Check every 300ms for the content presence, once it is loaded, replace it. Abort after say 5 attempts.
2- If the Search results are returned with a page reload, you can use the URL parameters, or you can add a parameter to the mbox to use a different offer or to do something different if the URL remains the same after reloading.
3- If the content is loaded with AJAX ( my case ), I simply add an event handler to the Search button and once it is triggered, I start checking for the new content before replacing it.
To avoid flickering problems, I hide the containers and unhide them after replacing their contents.