/*

 * (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

 * 

 *

 * To use: call addDOMLoadEvent one or more times with functions, ie:

 *

 *    function something() {

 *       // do something

 *    }

 *    addDOMLoadEvent(something);

 *

 *    addDOMLoadEvent(function() {

 *        // do other stuff

 *    });

 *

 */

 

addDOMLoadEvent = (function(){

    // create event function stack

    var load_events = [],

        load_timer,

        script,

        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();



            if (script) script.onreadystatechange = '';

        };



    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 Mozilla/Opera9

            if (document.addEventListener)

                document.addEventListener("DOMContentLoaded", init, false);



            // for Internet Explorer

            /*@cc_on @*/

            /*@if (@_win32)

                document.write("<script id=__ie_onload defer src=//0><\/scr"+"ipt>");

                script = document.getElementById("__ie_onload");

                script.onreadystatechange = function() {

                    if (this.readyState == "complete")

                        init(); // call the onload handler

                };

            /*@end @*/



            // 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);

    }

})();
