/* -----------------------------------------------------------------------------------
 *	Loader 	function calls after dom init, and before unload
 *	
 *		Required: none
 *
 * -----------------------------------------------------------------------------------
 *
 *		2 functions needs to be defined
 *			app_setup 		will be called after dom is loaded
 *			app_cleanup 	will be called on window.onunload
 *
 * -----------------------------------------------------------------------------------
 */

/*
 * 	Original code ripped from
 * 		http://dean.edwards.name/weblog/2005/09/busted/ and
 * 		http://dean.edwards.name/weblog/2006/06/again/
 * 		
 */

/* ---------------------------------------------------------------------------------
 *		Private functions
 * --------------------------------------------------------------------------------- */

function init() {
    /* quit if this function has already been called */
    if (arguments.callee.done) return;

    /* flag this function so we don't do the same thing twice */
    arguments.callee.done = true;

	if ( typeof app_cleanup == "function" ) {
		window.onunload = app_cleanup;
	}
	
	if ( typeof app_setup == "function" ) {
		app_setup();
	}
};

/* for Mozilla */
if (document.addEventListener) {
    document.addEventListener("DOMContentLoaded", init, false);
}

/* for Internet Explorer (using conditional comments) */

/*@cc_on @*/
/*@if (@_win32)
document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
var script = document.getElementById("__ie_onload");
script.onreadystatechange = function() {
	if (this.readyState == "complete") {
		init(); 
	}
};
/*@end @*/

/* for Safari */
if (/WebKit/i.test(navigator.userAgent)) { /* sniff */
	var _timer = setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			clearInterval(_timer);
			init(); /* call the onload handler */
		}
	}, 10);
}

/* for other browsers */
window.onload = init;
