var dependencies = {
	'Core': {'Core': [],  'Browser': []},
	'Native': {
		'Array': [],
		'Function': [],
		'Number': [],
		'String': [],
		'Hash': [],
		'Event': [
				  'Core.Browser',
				  'Native.Array',
				  'Native.Function',
				  'Native.Number',
				  'Native.String',
				  'Native.Hash']
		},
	'Class': {
		'Class': [
				  'Native.Array',
				  'Native.Function',
				  'Native.Number',
				  'Native.String',
				  'Native.Hash'],
		'Extras': ['Class.Class']},
	'Drag': {
		'Drag': ['Element.Element'],
		'Move': ['Drag.Drag', 'Element.Dimensions']},
	'Element': {
		'Element': [
					'Core.Browser',
					'Native.Array',
					'Native.Function',
					'Native.Number',
					'Native.String',
					'Native.Hash'],
		'Event': [
				  'Element.Element',
				  'Native.Event'],
		'Style': ['Element.Element'],
		'Dimensions': ['Element.Element']},
	'Utilities': {
    	'DomReady': ['Element.Event'],
    	'Cookie': ['Class.Extras'],
		'Swiff': ['Class.Extras']},
	'Fx': {
		'Fx': ['Class.Extras'],
		'CSS': ['Fx.Fx', 'Class.Extras', 'Element.Style'],
		'Tween': ['Fx.CSS'],
		'Scroll': ['Fx.Fx'],
		'Slide': ['Fx.Fx'],
		'Morph': ['Fx.CSS'],
		'Transitions': ['Fx.Fx']},
	'Request': {
		'Request': ['Element.Element', 'Class.Extras'],
		'HTML': ['Request.Request'],
		'JSON': ['Utilities.JSON', 'Request.Request']
	},
	'Base': {
		'Boxes': ['Base.Base', 'Drag.Move', 'Fx.Transitions', 'Utilities.Cookie'],
		'Bubble': ['Base.Base', 'Fx.Tween', 'Element.Dimensions'],
		'Dialog': ['Base.Base', 'Element.Dimensions', 'Drag.Move'],
		'Carousel': ['Fx.Morph', 'Fx.Transitions'],
		'Rola': ['Base.Base', 'Fx.Morph', 'Fx.Transitions'],
		'Editor': ['Base.Base', 'Base.Notebook', 'Base.Dialog'],
		'Effect': ['Fx.Morph', 'Fx.Slide', 'Element.Dimensions'],
		'Form': ['Base.Base', 'Base.Jsonrpc', 'Base.Bubble'],
		'Favorites': ['Base.Base'],
		'Gmap': ['Base.Base'],
		'Lightbox': ['Fx.Tween'],
		'Jsonrpc': ['Base.Base', 'Request.HTML'],
		'Menu': ['Base.Base'],
		'Networkssel': ['Base.Base'],
		'Base': ['Utilities.DomReady',
				 'Request.HTML',
				 'Core.Browser',
				 'Element.Element',
				 'Element.Dimensions',
				 'Element.Style',
				 'Element.Event',
				 'Selectors.Selectors'],
		'Notebook': ['Fx.Scroll', 'Base.Base', 'Base.Dialog'],
		'Videos': ['Fx.Morph', 'Fx.Transitions', 'Utilities.Swiff']
		},
	'Selectors': {'Selectors': []}
}

var $base = {'scripts': {}};

function __(t) {
	return t;
}

var loadScript = function(src) {
	src = "js/lib/" + src;
	document.write('<script type="text/javascript" src="' + src + '"></script>');
}

var $lib = function(name, resolve) {
	var load = {'Core.Core': true};
	
	var scripts = $base.scripts;
	
	var path = name.split(".");
	if (dependencies[path[0]] && dependencies[path[0]][path[1]]) {
		var deps = dependencies[path[0]][path[1]];
		var i = 0;
		for (i = 0; i < deps.length; i++) {
			var dep = '';
			for (dep in $lib(deps[i], true)) {
				load[dep] = true;
			}
			load[deps[i]] = true;
		}
		load[name] = true;
	} else {
		alert(name+' Unknown dependency.');
	}
	
	if (resolve == true) {
		return load;
	} else {
		var list    = [];	
		var script = '';
		for (script in load) {
			if (!scripts[script]) {
				list.push(script);
				scripts[script] = true;
			}
		}
		
		if (document.jscompressor) {
			list = list.join(',');
			if (list) {
				document.write('<script type="text/javascript" src="' + document.jscompressor+'?src=' + list + '"></script>');
			}
		} else {
			for (var i = 0; i < list.length; i++) {
				loadScript(list[i].replace(/\./, '/') + '.js');
			}
		}
	}
}

function init() {
	$lib("Base.Base");
}

init();