var mapionFuncs = {

	load: function() {
		
		var scriptNodes = document.getElementsByTagName("script");
		var mapionFuncsNode = document.getElementById("mapionFuncs");
		if (mapionFuncsNode == null) {
			for (var i = 0; i < scriptNodes.length; i++) {
				var scriptNode = scriptNodes[i];
				if (scriptNode.src && scriptNode.src.match(/mapionFuncs\.js(\?.*)?$/)) {
					mapionFuncsNode = scriptNode;
					break;
				}
			}
		}
		var path = mapionFuncsNode.src.replace(/mapionFuncs\.js(\?.*)?$/g, '');
		var nodeSrc = mapionFuncsNode.src.replace(/%20/g, '');
		var includes = nodeSrc.match(/\?.*load=([a-zA-Z0-9,\_\/\~]*)/);
		if (!includes) {
			return;
		}
		var includesSplit = includes[1].split(",");
		var pastPkgs = [];
		for (var i = 0; i < includesSplit.length; i++) {
			var inc = includesSplit[i];
			if (inc.substr(0, 1) == "/") {
				inc = inc.substr(1);
			}
			var incPath;
			if (inc.substr(0, 1) == "~") {
				incPath = path.replace(/common.*$/g, '') + inc.substr(1) + ".js";
			} else {
				var incSplit = inc.split("/");
				var pkgs = [];
				for (var j = 0; j < incSplit.length - 1; j++) {
					var pkg = incSplit[j];
					var evalStr = "mapionFuncs";
					pkgs.push(pkg);
					for (var k = 0; k < pkgs.length; k++) {
						var currentPkg = pkgs[k];
						evalStr += "['" + currentPkg + "']";
					}
					var isIncluded = false;
					for (var k = 0; k < pastPkgs.length; k++) {
						var pastPkg = pastPkgs[k];
						if (pastPkg == evalStr) {
							isIncluded = true;
							break;
						}
					}
					if (!isIncluded) {
						eval(evalStr + " = {}");
					}
					pastPkgs.push(evalStr);
				}
				incPath = path + inc + ".js";
			}
			document.write('<script type="text/javascript" src="' + incPath + '"></script>');
		}
	}
};
mapionFuncs.load();