WebKit bug: (affects Safari andd Google Chrome)
Changing an element from absolute with bottom set to a value to fixed (with a bottom value) causes it's positioning to be relative to the top of the window frame. That is if an element has a position of absolute and a bottom of -50px and is switched to postion fixed, all but the bottom 50px will appear at the top of the page. for the switch to work properly, there must be a point in time where no position is set between the two states.

if you click on the "class absolute" button, then on the "class fixed" button; the footer will appear at the top of the page.
If you click on the "class absolute" button, then the "no class" button, then finally click on the "class fixed" button; the footer will appear where it is expected to be.
I've added a fourth button, that removes the class and using a setTimeout set to 0ms to fire the set Fixed.

html:
<div id="footer" class="absolute"></div>

css:
#footer { background-color:red; height:150px; width:100%; bottom:-50px; }
#footer.absolute { position:absolute; }
#footer.fixed { position:fixed; }