

////////////////////////////////////////////////////////////////////////////////////////////////////
// Loader contructor
////////////////////////////////////////////////////////////////////////////////////////////////////
function Loader(iTargetWidget, iUrl, iOnContentLoaded)
{
    var loader = this;
    
    this.target = iTargetWidget;
    this.url = iUrl;
    this.onContentLoaded = new EventHandler();    
    
    
    this.load = function()
        {
            var httpRequestHandler = new HttpRequestHandler(true, loader._onContentLoaded);
            httpRequestHandler.getText(iUrl);        
        }
    
    this._onContentLoaded = function(iUrl, iContent)
        {
            var element = loader.target.getElement();
        
            // assign content
            element.innerHTML = iContent;
            
            // execute scripts
            var scriptNodes = element.getElementsByTagName("script");
            for (var i = 0; i < scriptNodes.length; i++)
                eval(scriptNodes[i].text);
                
            // invoke event
            loader.onContentLoaded.invoke();
        }


    if (iOnContentLoaded)
        this.onContentLoaded.add(iOnContentLoaded);

}


////////////////////////////////////////////////////////////////////////////////////////////////////
// AsyncContentLoader contructor
////////////////////////////////////////////////////////////////////////////////////////////////////
function AsyncContentLoader(iTargetId)
{
    var asyncContentLoader = this;
    
    this.targetId = iTargetId;

    this._onContentLoaded = function(iUrl, iContent)
        {
            var targetDocumentElement = document.getElementById(asyncContentLoader.targetId);
            targetDocumentElement.innerHTML = iContent;
            asyncContentLoader.executeScripts(targetDocumentElement);
            asyncContentLoader.onContentLoaded(iUrl, iContent);
        }
      
    this.load = function(iUrl)
        {
            var httpRequestHandler = new HttpRequestHandler(true, asyncContentLoader._onContentLoaded);
            httpRequestHandler.getText(iUrl);
        }

    this.onContentLoaded = function(iUrl, iContent)
        {}

    this.executeScripts = function(iElement)
        {
            var scriptNodes = iElement.getElementsByTagName("script");
            for (var i = 0; i < scriptNodes.length; i++)
                eval(scriptNodes[i].text);
        }

}

////////////////////////////////////////////////////////////////////////////////////////////////////