﻿function loadScriptDeferred(src) {
  var addScriptToDom = function () {
    src = src.replace("https://", "");
    src = src.replace("http://", "");
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = document.location.protocol + "//" + src;
    document.body.appendChild(script);
  }
  if (((navigator.userAgent.toLowerCase().indexOf("macintosh") >= 0) &&
       (navigator.userAgent.toLowerCase().indexOf("firefox") >= 0) &&
       (navigator.userAgent.toLowerCase().indexOf("firefox/3.6") < 0)) ||
      (navigator.userAgent.toLowerCase().indexOf("msie 6") >= 0)) {
    runDeferred(addScriptToDom, true);
  } else {
    runDeferred(addScriptToDom, false);
  }
}
//runs handler function after DOM is completely loaded
var readyList = []
function runDeferred(handler, useReadyEvent) {

  function executeHandlers() {
    for (var i = 0; i < readyList.length; i++) {
      readyList[i]()
    }
  }

  if (!readyList.length) { // set handler on first run 
    bindDeferred(executeHandlers, useReadyEvent)
  }

  readyList.push(handler)
}

function bindDeferred(handler, useReadyEvent) {
  var called = false

  function ready() {
    if (called) return
    called = true
    handler()
  }

  if (useReadyEvent) {
    if (document.addEventListener) { // native event
      document.addEventListener("DOMContentLoaded", ready, false)
    } else if (document.attachEvent) {  // IE

      try {
        var isFrame = window.frameElement != null
      } catch (e) { }

      // IE, the document is not inside a frame
      if (document.documentElement.doScroll && !isFrame) {
        function tryScroll() {
          if (called) return
          try {
            document.documentElement.doScroll("left")
            ready()
          } catch (e) {
            setTimeout(tryScroll, 10)
          }
        }
        tryScroll()
      }

      // IE, the document is inside a frame
      document.attachEvent("onreadystatechange", function () {
        if (document.readyState === "complete") {
          ready()
        }
      })
    }
  }

  // Old browsers
  if (window.addEventListener)
    window.addEventListener('load', ready, false)
  else if (window.attachEvent)
    window.attachEvent('onload', ready)
  else {
    var fn = window.onload // very old browser, copy old onload
    window.onload = function () { // replace by new onload and call the old one
      fn && fn()
      ready()
    }
  }
}
