Faking it with Javascript doesn't really work because the termination of the Javascript isn't tied to the completion of the processing. Here's how we're doing it for a new anti-spam product:
results.html <?php if ($display): // display results else: // save form info header("Location: wait.php"); endif; ?> When the user is sent to results.html (the first time) it save the info and sends them to wait.php wait.php <?php if ($view): echo "<center><P CLASS=title>Checking</P> <BR><embed width=125 height=25 src='images/progress_bar.swf'></center>"; else: echo "<html> <FRAMESET rows='0,*' FRAMEBORDER=NO noresize> <frame name=control src='processor.php' FRAMEBORDER=NO noresize> <frame name=view src='$PHP_SELF?view=T'> </frameset> </html>"; endif; ?> wait.php spawns 2 windows: One, which is invisible, runs your processing script and the other, a normal window, shows your animated “processing” gif. processor.php <?php // do all the processing echo "<html><body onLoad=\"top.location='results.html?any_info_to_pass_to_display_page';\"></body></html>"; ?> processor.php does the actual work in its invisible window. When it’s finished, it loads the results page on top of the window which was displaying the “processing” info. If the results page needs only a little bit of info from the processing, and you don’t mind showing it, you can pass it via the URL. Or, you can store the info in a database table and have the results page access it from there. Hope this helps, Jeff --------------------------------- Do you Yahoo!? Yahoo! Shopping - Send Flowers for Valentine's Day