/*
 * (c)2006 Jesse Skinner/Dean Edwards/Matthias Miller/John Resig
 * Special thanks to Dan Webb's domready.js Prototype extension
 * and Simon Willison's addLoadEvent
 *
 * For more info, see:
 * http://www.thefutureoftheweb.com/blog/adddomloadevent
 * http://dean.edwards.name/weblog/2006/06/again/
 * http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
 * http://simon.incutio.com/archive/2004/05/26/addLoadEvent
 *
 * This script also replaced the IE solution with the one from this article:
 * http://javascript.nwbox.com/IEContentLoaded/
 *
 * To use call addLoadEvent one or more times with functions, ie:
 *
 *    Example 1:
 *    function something() {
 *       // do something
 *    }
 *    addLoadEvent(something);
 *
 *    Example 2:
 *    addLoadEvent(function() {
 *        // do something
 *    });
 *
 */
addLoadEvent = (function(){
    // create event function stack
    var load_events = [],
        load_timer,
        done,
        exec,
        old_onload,
        init = function () {
            done = true;

            // kill the timer
            clearInterval(load_timer);

            // execute each function in the stack in the order they were added
            while (exec = load_events.shift()) {
                exec();
            }
        };

    return function (func) {
        // if the init function was already ran, just run this function now and stop
        if (done) {return func()};

        if (!load_events[0]) {

            // for Internet Explorer
            /*@cc_on @*/
            /*@if (@_win32)
			      // polling for no errors
			      var d = window.document;
	          (function () {
		            try {
			              // throws errors until after ondocumentready
			              d.documentElement.doScroll('left');
		            } catch (e) {
			              setTimeout(arguments.callee, 50);
			              return;
 		            }
		            // no errors, fire
		            init();
	          })();
            d.onreadystatechange = function() {
            if (this.readyState == "complete")
                init(); // call the onload handler
            };
            /*@end @*/

            // for Mozilla/Opera9
            if (document.addEventListener) {
                document.addEventListener("DOMContentLoaded", init, false);
            }

            // for Safari
            if (/WebKit/i.test(navigator.userAgent)) { // sniff
                load_timer = setInterval(function() {
                    if (/loaded|complete/.test(document.readyState)) {
                        init(); // call the onload handler
                    }
                }, 10);
            }

            // for other browsers set the window.onload, but also execute the old window.onload
            old_onload = window.onload;
            window.onload = function() {
                init();
                if (old_onload) {old_onload()};
            };
        }

        load_events.push(func);
    }
})();
