良いソースを見つけたのでメモで。
——————————–
var wholeheight = Math.max.apply( null, [document.body.clientHeight , document.body.scrollHeight, document.documentElement.scrollHeight, document.documentElement.clientHeight];
——————————–

以下の4つの値を比較して一番大きいものを全体の高さとして取得しています。
document.body.clientHeight
document.body.scrollHeight
document.documentElement.scrollHeight
document.documentElement.clientHeight

長いページだとclientHeightよりscrollHeightのほうが大きいですが、スクロールバーが出ないほど短いページだった場合は、clientHeightのほうが大きくなります。
というわけで、比較してどちらか大きいものを採用と。

document.body.scrollHeight
document.documentElement.scrollHeight

のように2つ書き方が混ざっているのは、互換モードと標準準拠モードのどちらにも対応するためです。

これ使ったらすごくラクでした。