if (!window.ecoideas){ var ecoideas = {}; }
(function (pkg){

pkg.escape = escape;
pkg.importJS = importJS;
pkg.importCSS = importCSS;
pkg.delegate = delegate;

function escape(str) {
	return str.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
}

function importJS(path) {
	var importer = arguments.callee;
	if (!importer.cache[path]) {
		var url = (path.match(/^(https?:\/)?\//)) ? path : importer.base + path;
		if (document.getElementsByTagName("body")[0]) {
			var node = document.createElement("script");
			node.setAttribute("type", "text/javascript");
			node.setAttribute("src", url);
			document.getElementsByTagName("head")[0].appendChild(node);
		} else {
			document.write('<script type="text/javascript" src="' + pkg.escape(url) + '"></script>');
		}
		importer.cache[path] = true;
	}
}
importJS.cache = {};
importJS.base = (function(){
	var nodes = document.getElementsByTagName("script");
	return nodes[nodes.length - 1].getAttribute("src").replace(/[^\/]+$/, "");
})();

function importCSS(path) {
	var importer = arguments.callee;
	if (!importer.cache[path]) {
		if (document.getElementsByTagName("body")[0]) {
			var node = document.createElement("link");
			node.setAttribute("rel", "stylesheet");
			node.setAttribute("type", "text/css");
			node.setAttribute("href", importer.base + path);
			document.getElementsByTagName("head")[0].appendChild(node);
		} else {
			document.write('<link rel="stylesheet" type="text/css" href="' + importer.base + pkg.escape(path) + '" />');
		}
		importer.cache[path] = true;
	}
}
importCSS.cache = {};
importCSS.base = "";

function delegate(func, aThis, once) {
	var delegate = function(){
		var delegate = arguments.callee;
		if (delegate.func) {
			var ret = delegate.func.apply(delegate.aThis || this, arguments);
			if (delegate.once) {
				delegate.dispose();
			}
			return ret;
		}
	}
	delegate.func    = func;
	delegate.aThis   = aThis;
	delegate.once    = once ? true : false;
	delegate.dispose = function(){
		delegate.func    = null;
		delegate.aThis   = null;
		delegate.once    = false;
	}
	return delegate;
}

})(ecoideas);