/*
 * http://www.creativit.com.br/jquery/ondemand_js/jquery.ondemand.js.1.0.0.txt
 */
	(function($){
		
		function isExternalScript(url){ 
			return /(http|https):\/\//.test(url);
		};
		
		$.extend({
			
			requireConfig : {
				routeJs		: '',
				routeCss	: ''
			},
			
			queue : [],
			pending : null,
			
			requireJs : function(scriptUrl, callback, opts, obj, scope)
			{
				if(opts != undefined || opts == null){
					$.extend($.requireConfig, opts);
				}
				
				var _request = {
					url 		: scriptUrl,
					callback 	: callback,
					opts		: opts,
					obj 		: obj,
					scope		: scope
				}
				
				if(this.pending)
				{
					this.queue.push(_request);
					return;
				}
				
				this.pending = _request;
				
				var _this		= this;
				var _url		= (isExternalScript(scriptUrl)) ? scriptUrl : $.requireConfig.routeJs + scriptUrl;
				var _head 		= document.getElementsByTagName('head')[0];
				var _scriptTag 	= document.createElement('script');
					
					// Firefox, Opera
					$(_scriptTag).bind('load', function(){
						_this.requestComplete();
					});
					
					// IE
					_scriptTag.onreadystatechange = function(){
						if(this.readyState === 'loaded' || this.readyState === 'complete'){
							_this.requestComplete();
						}
					}
					
					_scriptTag.type = "text/javascript";
					_scriptTag.src = _url;
					
					_head.appendChild(_scriptTag);
			},
			
			requestComplete : function()
			{
				
				if(this.pending.callback){
					if(this.pending.obj){
						if(this.pending.scope){
							this.pending.callback.call(this.pending.obj);
						} else {
							this.pending.callback.call(window, this.pending.obj);
						}
					} else {
						this.pending.callback.call();
					}
				}
				
				this.pending = null;
				
				if(this.queue.length > 0)
				{
					var request = this.queue.shift();
					this.requireJs(request.url, request.callback, request.opts, request.obj, request.scope);
				}
			},
			
			requireCss : function(styleUrl){
				
				if(document.createStyleSheet){
					document.createStyleSheet($.requireConfig.routeCss + styleUrl);
				}
				else {
				
					var styleTag = document.createElement('link');
											
					$(styleTag).attr({
						href	: $.requireConfig.routeCss + styleUrl,
						type	: 'text/css',
						media 	: 'screen',
						rel		: 'stylesheet'
					}).appendTo($('head').get(0));
					
				}
				
			}
			
		})
		
	})(jQuery);