// Three::JS v1.0 - 11/08/2009, James Edmonds
var Three = {

	base: '',
	settings:{},
	includes: {},
	plugins: {base:''},
	framework: {base: ''},

	init: function(options) {
		if(!Three.base) {
			var regex = /(.+)three\.js/i, path;
			Three.each(document.getElementsByTagName('script'), function(script) {
				if((path = regex.exec(script.src)) != null) {
					Three.base = path[1];
					Three.framework.base = Three.base + 'jquery/';
					Three.plugins.base = Three.framework.base + 'plugins/';
				}
			});
		}
		
		// Load up the framework
		Three.include(Three.framework.base + 'jquery.min.js');
		
		// Include all plugins
		Three.each(Three.plugins, function(plugin) {
			Three.include(Three.plugins.base + plugin.source);
		});
		// Include all includes
		Three.each(Three.includes, function(include) {
			Three.include(include.source);
		});
		Three.onInit();
	},
	
	// Utility functions
	each: function(object, func, scope) {
		if(object) {
			for(var i = 0, length = object.length; i < length; ++i) {
				if(func.call(scope || object[i], object[i], i, object) === false) return;
			}
		}
	},
	extend: function(object, extension) {
		if(object) {
			for(var property in extension) {
				object[property] = extension[property];
			}
		}
		return object;
	},
	include: function() {
		var includes = {};
		return function(file) {
			if(includes[file]) return;
			includes[file] = true;
			return document.write('<scr' + 'ipt type="text/javascript" src="' + file + '"><\/script>');
		}
	}(),
	
	// Event handlers
	onInit: function(){},
	onFrameworkInit: function(){}
};
