var loader = {
	d: document,
	id:function(id){return loader.d.getElementById(id)},  
    tag:function(element){return loader.d.getElementsByTagName(element)},  
    ce:function(element){return loader.d.createElement(element)},
	
	css_files: [],
	css:function(url)
	{
		loader.create_css(url);
	},
	create_css:function(url)
	{
		loader.css_files.push({url: url});
		
		var s = loader.ce('link');  
		s.type = 'text/css'; 
		s.rel = 'stylesheet';
		s.href = url; 
		
		loader.tag('head')[0].appendChild(s);		
    },
	
	js_files: [],
	js:function(url)
	{
		loader.create_js(url, function(url)
		{
			for ( var i = 0; i < loader.js_files.length; i++ )
			{
				if ( loader.js_files[i].url == url )
				{
					loader.js_files[i].ready = true;
					break;			
				}
			}
			
			loader.checkReady();
		});
	},
	create_js:function(url, callback)
	{
		loader.js_files.push({ready: false, url: url});
		
		var s = loader.ce('script');  
		s.type = 'text/javascript';  
		s.onload = function()
		{
			callback(url);
		}
		s.onreadystatechange = function()
		{
		  if ( this.readyState == "loaded" || this.readyState == "complete" )
		  {
		  	s.onreadystatechange = null
		  	callback(url);
		  }
		}
		s.src = url; 
		
		loader.tag('head')[0].appendChild(s);		
    },
	
	readyCallback: function()
	{ 
	},
	checkReady: function()
	{
		var js_ready = true;
		for ( var i = 0; i < loader.js_files.length; i++ )
		{
			js_ready = js_ready & loader.js_files[i].ready;
		}
		
		if ( js_ready && document.is_loaded )
		{
			loader.readyCallback();
		}
		else
		{
			setTimeout(loader.checkReady, 250);
		}
	}
};
window.onload = function(event)
{
	document.is_loaded = true;
}
