// "Humanized History"
var checker;
var checkInterval = 200 /*milliseconds*/;
var isUpdating = false;
var mouseDown = false;
var preloadDistance = 1200;
var progressImgURI = "data:image/gif,GIF89a%10%00%10%00%F7%E0%00%FF%FF%FF%FD%FD%FD%EA%EA%EA%EB%EB%EB%E8%E8%E8%F9%F9%F9%D3%D3%D3%FB%FB%FB%F5%F5%F5%E7%E7%E7%F3%F3%F3%F8%F8%F8%F7%F7%F7%FA%FA%FA%FC%FC%FC%CC%CC%CC%EF%EF%EF%F6%F6%F6%CB%CB%CB%FE%FE%FE%E9%E9%E9%EE%EE%EEBBB%D9%D9%D9%F1%F1%F1%AF%AF%AF%89%89%89%DE%DE%DE%CF%CF%CF%26%26%26%B3%B3%B3%F0%F0%F0%D2%D2%D2%F4%F4%F4%B7%B7%B7%DA%DA%DA%DB%DB%DB%90%90%90%A3%A3%A3kkk%D0%D0%D0%AC%AC%AC%CD%CD%CD%AD%AD%AD%AB%AB%AB%BD%BD%BD%EC%EC%EC%CE%CE%CE%E1%E1%E1%F2%F2%F2%BA%BA%BAwww%A0%A0%A0%81%81%81%80%80%80dddbbb%C3%C3%C3%C7%C7%C7%87%87%87%E0%E0%E0%9F%9F%9F%A2%A2%A2%88%88%88ooo%A7%A7%A7%D7%D7%D7%C0%C0%C0%E5%E5%E5%DD%DD%DD%ED%ED%ED%60%60%60%99%99%99%93%93%93%DF%DF%DFEEE%E6%E6%E6444%15%15%15%04%04%04%D8%D8%D8%84%84%84%E4%E4%E4%AE%AE%AE%DC%DC%DC%3F%3F%3Fggg%C2%C2%C2%9B%9B%9B%C8%C8%C8%B9%B9%B9%9A%9A%9A!!!%C4%C4%C4---%B0%B0%B0%8C%8C%8C%D5%D5%D5%D1%D1%D1%5C%5C%5C%E3%E3%E3III%3C%3C%3ClllLLL%2C%2C%2C___%10%10%10%C9%C9%C9%16%16%16%94%94%94%22%22%22%1B%1B%1B%08%08%08%0B%0B%0B%5D%5D%5DXXX%91%91%91%B6%B6%B6%BC%BC%BC%C6%C6%C6%BF%BF%BF%B8%B8%B8%3B%3B%3B%BE%BE%BEaaa%86%86%86%8D%8D%8D%B5%B5%B5%97%97%97%8A%8A%8A%24%24%24%A9%A9%A9%83%83%83FFFOOOvvv%09%09%09%3A%3A%3AAAA%8F%8F%8F%1F%1F%1Fyyy%13%13%13%0F%0F%0F***%B1%B1%B1hhhsss%07%07%07%B2%B2%B2%A1%A1%A1%82%82%82JJJeeeqqq%A8%A8%A8MMM%E2%E2%E2%9D%9D%9D%A6%A6%A6%A4%A4%A4%9E%9E%9E%C5%C5%C5SSS%B4%B4%B4VVV111YYY%A5%A5%A5TTT000(((PPP%AA%AA%AA%0D%0D%0DCCC%19%19%19%3D%3D%3DGGGzzz%12%12%12%02%02%02%C1%C1%C1DDD555%92%92%92mmm999iii%1C%1C%1CRRR%D4%D4%D4333%20%20%20~~~%23%23%23rrrttt%0E%0E%0EHHH%CA%CA%CA%7C%7C%7C%98%98%98%06%06%06uuuNNN%03%03%03%85%85%85%1E%1E%1E%0A%0A%0A%9C%9C%9C%2F%2F%2FZZZccc777%BB%BB%BB%8B%8B%8B'''%7B%7B%7B%5E%5E%5E%1A%1A%1A666%40%40%40%FF%FF%FF%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00!%FF%0BNETSCAPE2.0%03%01%00%00%00!%F9%04%05%00%00%E0%00%2C%00%00%00%00%10%00%10%00%00%08%A5%00%C1%09%1CH%B0%60%C1%17Qp9%01%10%C0A%00%83%E0z%5C%93%13%E7%09%80%03%0C%22%14(%E8%E3%CD%23MS%98%00%98P%00C%05%06%03%C5%2C%EA%26%C8%20%03%01%026%82%AB%C3%05%08Dp%15%60T%108%A7%83%88%9B!Hx%12(%CB%8B%80%9B%07%0C%84%11h%A1%C9%80%9B%0D%24p%10xbO%9E%9B%02r%18%10%D8%C3%C2%8F%9B(dl%10x%C1J'N%06%0DL%19%F2a%A0%9E1%A8%90%A8%C0%A0%E0B%0B%1A)%8A%14%BC%E3%E8%C6%19D64%24aq%01%A2%12%0FIjhH%A5%E3%E8%CD%C7%02%03%02%00!%F9%04%05%00%00%E0%00%2C%01%00%01%00%0E%00%0E%00%00%08%9B%00%C1%094P%C7T%A4%0Eh%FC%A8%10%C8%90%853m%5C%E08Y%23%E7%D4%16%86%19%AA%AC%9A!%82%02%81%2F8*%AD%01%00%0E%CA%1CE%17%19%0A%AC%01%20%C0%04%1F%16%A2%A8T%19%A0%C0%81%19e%AE%CCd%18%00%01%839%AD*%EC%148%E1%C3%87%1Bt%20%0C%05%17%40%C0%80%1DG%24%2CE%40f%80%A5I4%96%26%A0R%01%C6%0Ecwv%12%11S%84%018%1D5lX%1A%81%20%02%930%A3%5E%B8%60%F8%00%09%187%9F%82%7C%D1%92%8C%C0%CC%04%3A%24%81Z%91cD%0C%86%01%01%00!%F9%04%05%00%00%E0%00%2C%01%00%01%00%0E%00%0E%00%00%08%99%00%C1%09%1C%E1%03%082%0B8%92%80%10%C8P%C6%992%16%F64%F1%D2%C1%90%09%86%7C%FA%A8%FAs%C5%C5%00-%94%1Au%A0%01%8E%8725)%182%FC%D3%86%D7%0B%40%93%A6%A9Ti%E5%1847%408%CCd%98!%D1%12L3b%EC%14%98%E0I%1B%0D6%14%0C%05%07%A0i%AA%1FP%96%068%E0%00O%09%19K%17D8%40%81%13%16%14%3B%11TP%10%00%9C%10PA%24%24(%D0%00%83%00%22%03%160%24!%C3%83%8C%1C%12%0C%90%60%82%60%26%84%11*%B2p(%E2B%AE%C0%80%00!%F9%04%05%00%00%E0%00%2C%01%00%01%00%0E%00%0E%00%00%08%99%00%C1%09%84%E1A%83%95%23%B4L%40%11%C80%CB%8F%137%C6%A8B%B3DM%06%86%0F%0A%CD0%A1%02B%85.~%CC%7Cc%01.%C1%96%1A%7C%182%C4r%EA%90%01%1D%60%3C%A8T9%A3C%9D%0CIF%CCd(B%98)%13X%10%EC%14H!%16%2BB%26%22%0C%05G%E0%D1%A0%3C%2C%A4%2C%CD%F0*%93%10%0F(%96%1E%89%13%E5%C3%A8%16%3CvN%B0%E5%E5%018%22x%B2%F0%C0%E0%20%40%83%02%0D%02%2CcH!%0C%88%0B%3C%12%18Q%B0%20%C0L%04%02%A4%90%A1%80%A1%2F%C3%80%00!%F9%04%05%00%00%E0%00%2C%01%00%01%00%0E%00%0E%00%00%08%99%00%C1%09%14%C0%C6%15%23%0DH%F4%C0%10%C8%F0%C2%8A%40%25~%D8%98%01%A4%C6%10%86ER%5C%CACB%81%02%10%974Y%B9%03%EEC%8B%14%06%182%CC%80%0A%08%09*v%5E%A8TY%02M(%0E-%08%CCd%98c%C9%266%5D%0A%EC%14%E8%C2L%19%0E%12%1A%0C%057%A0%89%05*%200%2C%D5%92%A6%CF%80%0B%3A%87n%1A%A4k%01%19%181v%0A%82%03%0B%04%B8%10%09%04%8480%01%C0%0Ak%B5%DE%F8%60%C8%E0%03%86%08%07%00%3CI%E4%AD%C7L%07%05%0A%E4%B5PH%05%C3%80%00!%F9%04%05%00%00%E0%00%2C%01%00%01%00%0E%00%0E%00%00%08%9B%00%C1%09%8CAEG%A9%15%22%1EP%10%C8%90%C0%83%16v2%04%E9%11%C8%07%0A%86.%5E%E0%11B%80A%04%25%D8%C0%80y%00%8E%01%09%14D%182%CCa%A3%04%19%23%17R%AAdH%88%92%08%02%1B%14%CCd%88%E2%C4%9F%04R%1C%EC%14%F8%01%C7%89%01%02%02%0C%05%07%81%CE%8D%18%10%1A%2C%EDrh%DB%82%10%05%96%FA1%14*%40%81%02%13vn%D9%A3%06%0A%B8%00%01%00p%9B%92%80%00%A0f%D4%AAd%60%08%20%0D3i%90%9C%F8%22%D6%89%C5%CC%07%85fq%E9%40%AA%84%01%86%01%01%00!%F9%04%05%00%00%E0%00%2C%01%00%01%00%0E%00%0E%00%00%08%99%00%C1%09%2C%60%04%060%0E%06%94%60%10%C8%10%01%81%0D%17%40H%E8%D2%E2%8A%12%86%0B%060q%A1%E0%40%83%01%06%3CH%22%01%CEA%0C%23%08%182%14%12%E4%CB%80%06!%22%A8Ty%05%8B%84%06%0C%1C%CCdX%24%09%0B%07%07%00%EC%14%18BC%09%00H%87%82S%60C%C3%A2')%94%8AA%84%04S%1C%1CJE%9D%11%A1%22%18%A4%1F%3BS%1C%19%C6%03%9C%A8Fmv%D9%110%60H%B6_%7D%F80%A4Q%25%DA%A04M%CC%2C%E9%25c%A6%98%12c%CCX8Ac%04%C3%80%00!%F9%04%05%00%00%E0%00%2C%01%00%01%00%0E%00%0E%00%00%08%99%00%C1%09%9C%D0%00%01%84%01%03%20%2C%10%C8p%82%03%06!%20%08%90%B2aC%05%86H%00%048%E0%60B%80%08%14%C2%18%10%00%EE%81%97g%00%182%24%20%81%83%82(%95%8E%A8T9b%C8%862r%A6%CCdHAK%967k%12%EC%14%B8%E0%0B%A0%0EN%08%0C%05%17!%C8%0ARpJ-%DD%F0I%04%23.%C5%96%EAq%23%01D%A6H%81v%0E%D9%D1C)!E%B9j%DC2%02%E1%81%09G%3B%5E0%5CQ%AD%8A%A1Ctp%9C%10%C4f%A6%10%1A%88%C6%DC%D8%E1%C1%13%C3%80%00%3B";

function get_xmlhttp () {
	var xmlhttp=false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	 try {
	  xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e) {
	  try {
	   xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
	   xmlhttp = false;
	  }
	 }
	@end @*/
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
	  xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

// Ecumenical event listener. Thanks to Scott Andrew LePera
function add_event (obj, evType, fn, useCapture) {
	if (obj.addEventListener){
		obj.addEventListener(evType, fn, useCapture);
		return true;
	} else if (obj.attachEvent){
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}

    // These two functions are based on code from
    // http://www.quirksmode.org/viewport/compatibility.html

    function getPageHeight(){
        var y;
        var test1 = document.body.scrollHeight;
        var test2 = document.body.offsetHeight
        if (test1 > test2) // all but Explorer Mac
        {
            y = document.body.scrollHeight;
        }
        else // Explorer Mac;
             //would also work in Explorer 6 Strict, Mozilla and Safari
        {
            y = document.body.offsetHeight;
        }
        return parseInt(y);
    }

    function _getWindowHeight(){
        if (self.innerWidth)
        {
            frameWidth = self.innerWidth;
            frameHeight = self.innerHeight;
        }
        else if (document.documentElement && document.documentElement.clientWidth)
        {
            frameWidth = document.documentElement.clientWidth;
            frameHeight = document.documentElement.clientHeight;
        }
        else if (document.body)
        {
            frameWidth = document.body.clientWidth;
            frameHeight = document.body.clientHeight;
        }
        return parseInt(frameHeight);
    }


    function getScrollHeight(){
        var y;
        // all except Explorer
        if (self.pageYOffset)
        {
            y = self.pageYOffset;
        }
        else if (document.documentElement && document.documentElement.scrollTop)   
        {
            y = document.documentElement.scrollTop;
        }
        else if (document.body) // all other Explorers
        {
            y = document.body.scrollTop;
        }
        return parseInt(y)+_getWindowHeight();
    }

function getMorePosts () {
	var el = document.getElementById('pager-links');
	var startEl = document.getElementById('pager-prev-link');
	
	if (startEl) {
		xmlhttp = get_xmlhttp();
		if (xmlhttp) {
			var uri = null;
			var link = startEl.getElementsByTagName('a');
			for (var i=0; i<link.length; i++) {
				uri = link[i].href;
			}
			if (uri) {
				// This is a rock stupid way to do it.
				if ((uri.indexOf('?format=') == -1) && (uri.indexOf('&format=') == -1)) {
					if (uri.indexOf('?') == -1) {
						uri += '?format=posts/'; // no query string
					} else {
						uri += '&format=posts/'; // query string not including format
					} // if
				} // if

				startEl.innerHTML = "<p>Getting more posts...</p>"; // FIXME: spinner icon
	
				xmlhttp.open("GET", uri, true);
				xmlhttp.onreadystatechange=function() {
					var historyNextWindow = document.getElementById('pager-links');
					if (xmlhttp && xmlhttp.readyState==4) {
						if (xmlhttp.status == 200) {
							var newHistory = document.createElement('div');
							historyNextWindow.parentNode.replaceChild(newHistory, historyNextWindow);
							newHistory.innerHTML = xmlhttp.responseText;
							historyNextWindow = null;
						} else if (xmlhttp.status == 404) {
							historyNextWindow.setAttribute('id', 'history-next-finished'); // Disable further queries...
							historyNextWindow.innerHTML = '<p>There are no more posts in this view.</p>';
						} else {
							historyNextWindow.setAttribute('id', 'history-next-finished'); // Disable further queries...
							historyNextWindow.innerHTML = 'Bleh: '+xmlhttp.status+" from "+uri;
						}
						isUpdating = false;
					}
				}
				xmlhttp.send('');
			}
		} else {
			alert("Bleh: xmlhttp."); // Bleh;
		}
	}
}

function updatePage () {
	if (!isUpdating && (getPageHeight() - getScrollHeight() < preloadDistance)) {
		isUpdating = true;
		getMorePosts();
	} // if
	clearTimeout(checker);
	checker = setTimeout('updatePage()', checkInterval);
}

function postWindowInit() {
	var el = document.getElementById('pager-links');
	if (el) { // Paged archive
		checker = setTimeout('updatePage()', 0);
	}
}

add_event(window, 'load', postWindowInit, false);

