﻿
      /*
       * (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);
          }
      })();
