function tv_starv_dynamicload()
{

	var Self=this;      
	var m_load_complete_fired=false;


	this.Load=function(src)
	{
		m_load_complete_fired = false;
		
		if(Self.IsLoaded(src))    
		{
			Self.OnLoaded(src);
			return;
		}
		else       
		{
			var objDynamic;    
			var type=Self.GetSrcType(src); 
			if(type=="js" || type=="vbs")
			{
				objDynamic=document.createElement("script");
				objDynamic.src=src;
				if(type=="js")
				{
					objDynamic.type="text/javascript";
					objDynamic.language="javascript";
				}
				else
				{
					objDynamic.type="text/vbscript";
					objDynamic.language="vbscript";
				}
			}
			else if(type=="css")
			{
				objDynamic=document.createElement("link");
				objDynamic.rel="stylesheet";
				objDynamic.type="text/css";
				objDynamic.href=src;
			}
			else
			{
				Self.OnFailed(src);
				return;
			}
			document.getElementsByTagName("head")[0].appendChild(objDynamic); 
			objDynamic.onload=objDynamic.onreadystatechange=function()   
			{
				
				if(this.readyState && this.readyState=="loading")
					return;
				else
					if (!m_load_complete_fired) {
						m_load_complete_fired = true;
						Self.OnLoaded(src);
					}
			};
			objDynamic.onerror=function()            
			{
				document.getElementsByTagName("head")[0].removeChild(objDynamic);
				Self.OnFailed(src);
			};
		}
	};

	
	this.IsLoaded=function(src)
	{
		var isLoaded=false;   
		var type=Self.GetSrcType(src); 
		var i;      
		if(type=="js" || type=="vbs")
		{
			var scripts=document.getElementsByTagName("script"); 
			for(i=0;i<scripts.length;i++)      
			{
				if(scripts[i].src && scripts[i].src.indexOf(src)!=-1)
				{
					if(scripts[i].readyState=="loaded" || scripts[i].readyState=="complete")
					{
						isLoaded=true;
						break;
					}
				}
			}
		}
		else if(type=="css")
		{
			var links=document.getElementsByTagName("link");  
			for(i=0;i<links.length;i++)        
			{
				if(links[i].href && links[i].href.indexOf(src)!=-1)
				{
					if(links[i].readyState=="loaded" || links[i].readyState=="complete" || links[i].readyState=="interactive")
					{
						isLoaded=true;
						break;
					}
				}
			}
		}
		return isLoaded;
	};


	this.GetSrcType=function(src)
	{
		var type="";
		var lastIndex=src.lastIndexOf(".");
		if(lastIndex!=-1)
		{
			type=src.substr(lastIndex+1);
		}
		return type;
	};


	this.OnLoaded=function(src)
	{
		Self.LoadedCallback(src);
	};

	this.LoadedCallback=function(src){};

	this.OnFailed=function(src)
	{
		Self.FailedCallback(src);
	};

	this.FailedCallback=function(src){};
}
