As you say, you have moved this forward a long way, but the XHTML is a bit off. There are some tags closing non-existent table cells and a quick glance suggests that your wrapper div is closed after the "centre" column. Also there are different positioning types being mixed here, some are in the document flow and others have been floated out of it.
To clean it up I recommend making sure that wrapper goes around all three columns but is closed before the footer, then inserting a <br /> tag between the wrapper and the footer and ensuring that it clears everything. This will have the effect of reseting your document flow from that point and preventing the footer from going searching for free space higher up, when your centre column is short.



