var magic = {

	loaded: [],
	widgets: {},
	behaviors: {},
	req: {},

	dynaload:	function (module) {
			if (this.loaded[module] == 1) { return; }
			this.loaded[module] = 1;

			if (window.XMLHttpRequest) {
				this.req = new XMLHttpRequest();
			} else if (window.ActiveXObject) {
				this.req = new ActiveXObject("Microsoft.XMLHTTP");
			}

			if (!this.req) {
				alert("Dynaloader failed!");
				return false;
			}

			this.req.open("GET", "/"+module+"/main.js", false);
			this.req.send(null);
			eval(this.req.responseText);

			return true;
		},

	init:		function () {
			magic.set_behaviors();
			magic.set_types();
			return true;
	},

	set_behaviors:	function () {
		var el = [ "input","form","a","div","select"];
		var et, j, e, i;

		for(j=0; j<el.length; j++) {
			e = document.getElementsByTagName(el[ j]);

			for (i=0; i<e.length; i++) {

				if (e[i].getAttribute("Mbehave")) {
					var behavior = e[i].getAttribute("Mbehave");
					magic.dynaload("system/behaviors/"+behavior, behavior);
					eval("var hooks = magic.behaviors."+behavior+".hooks;");

					for (hook in hooks) {
						eval("e[i].on"+hook+"="+hooks[hook]);
					}
	
				}
			}
		}
		return true;
	},

	set_types:	function () {
		return true;
	},

	provides:	function (package, o) {
		eval("this."+package+" = o;");
		this.loaded[package] = 1;
		eval("this."+package+".init();");
		return true;
	}
};
