(function($) {
	$.extend({
		require: {
			defaults: {
				root: '/resources/js/libs/',
				extension: 'js',
				cache: true
			},

			/**
			 * List of loaded files
			 */
			loaded: [],

			include: function(packages, options) {
				var options = $.extend(this.defaults, options);

				if (typeof packages === 'string')
					packages = new Array(packages);

				for (var i = 0; i < packages.length; i++) {
					var src = this.scriptURL(packages[i], options);

					if (this.loaded[src]) continue;

					var jscode = jQuery.ajax({
						async: false,
						cache: options.cache,
						dataType: 'script',
						url: src,
						success: options.onload
					}).responseText;

					this.loaded[src] = true;
				}

				return this;
			},

			/**
			 *
			 */
			insert: function(src, options) {
				var el = document.createElement('script');
				el.type = 'text/javascript';
				el.src = src;
				$('head').append(el);

				return this;
			},

			/**
			 * Returns script URL
			 *
			 * @param String name -- qualified resource name
			 * @param Array options -- options
			 * @return String -- package file URL
			 */
			scriptURL: function(name, options) {
				return options.root + (options.hierarchical ? name.replace('.', '/') : name) + '.' + options.extension;
			}
		},
	});
})(jQuery);