/** * Script lazy loader 0.5 * Copyright (c) 2008 Bob Matsuoka * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. */ var LazyLoader = {}; //namespace LazyLoader.timer = {}; // contains timers for scripts LazyLoader.scripts = []; // contains called script references LazyLoader.load = function(url, callback) { // handle object or path var classname = null; var properties = null; try { // make sure we only load once if ($A(LazyLoader.scripts).indexOf(url) == -1) { // note that we loaded already LazyLoader.scripts.push(url); var script = document.createElement("script"); script.src = url; script.type = "text/javascript"; $$("head")[0].appendChild(script); // add script tag to head element // was a callback requested if (callback) { // test for onreadystatechange to trigger callback script.onreadystatechange = function () { if (script.readyState == 'loaded' || script.readyState == 'complete') { callback(); } } // test for onload to trigger callback script.onload = function () { callback(); return; } // safari doesn't support either onload or readystate, create a timer // only way to do this in safari if ((Prototype.Browser.WebKit && !navigator.userAgent.match(/Version\/3/)) || Prototype.Browser.Opera) { // sniff LazyLoader.timer[url] = setInterval(function() { if (/loaded|complete/.test(document.readyState)) { clearInterval(LazyLoader.timer[url]); callback(); // call the callback handler } }, 10); } } } else { if (callback) { callback(); } } } catch (e) { alert(e); } }