var mods = {};
var module = {
	'modules': mods,
	'request': mkhttp,
	'__name__': 'sunsite.loader'
	};

var sunsite = {'loader': module};
	
function mkhttp(url, data, handler) {
	var x;
	if(window.ActiveXObject) {
		x = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		x = new XMLHttpRequest();
	}
	x.open(data?'POST':'GET', url, (typeof(handler) != 'undefined' && handler)?true:false);
	x.send(typeof(data) != 'undefined'? data : null);
	if(handler) {
		if(typeof(x.onload) != 'undefined') {
			x.onload = handler;
		} else {
			x.onreadystatechange = function() { if(x.readyState == 4) handler(x); }
		}
	}
	return x;
}

function use(url) {
	mods = sunsite.loader.modules;
	if(typeof mods[url] == 'undefined') {
		var parts = url.split('.');
		var x = mkhttp('/js/' + parts.join('/') + '.js');
		if(x.status != 0 && x.status != 200 && x.status != 304) {
			alert('Cannot load ' + url + '!');
			return;
		};
		eval(x.responseText);
		var s = parts[0];
		for(var i = 1; i < parts.length; i++) {
			if(typeof eval('window.' + s) == 'undefined') {
				eval('window.' + s + '=' + s);
			}
			s = s + '.' + parts[i];
		}
		eval('window.' + url + '=' + url);
		return mods[url] = eval(url);
	}
	return mods[url];
}

sunsite.loader.load = use;
sunsite.loader.reload = function(url) {
	delete sunsite.loader.modules[url];
	return use(url);
}

/// For convention
use('sunsite.utils');
for(var i in sunsite.utils) {
	if(i[0] != '_') window[i] = sunsite.utils[i];
}
