// -----------------------------------------------------------
// - jquery.loadviewextender.js
// -
// - Extensie die maakt dat een view in de UI geladen kan worden
// - BHE 20090120
// -----------------------------------------------------------

// GEBRUIK:
//  Maak een HTML file. Als je wilt dat de titel van je browserwindow wijzigt na het laden van de HTML
//  file, specificeer dan een titel.
//  De inhoud van de <body> tags wordt in het geselecteerde object geladen.
//
// AANROEP:
//  $("#mijnDiv").loadView("mijnview");

var g_LoadedStyleSheets = new Array();

jQuery.fn.loadView = function(viewName, userCallBack)
{
    var callBack = null;
    var objId = $(this).attr("id");
    var viewFile = VIEW_PATH + viewName + VIEW_SUFFIX;
    
    if(userCallBack)
    {
        callBack = function(data)
        {
            $(this).handleLoadView(data, $("#" + objId));
            userCallBack(data);
        }
    }
    else
    {
        callBack = function(data)
        {
            $(this).handleLoadView(data, $("#" + objId));
        }
    }
    
    //$.get(viewFile, null, callBack, "xml");
	$.ajax({
		type: "GET",
		url: viewFile,
		dataType: "html",
		success: callBack,
		error: $(this).handleLoadViewError
	});
    
    
};

jQuery.fn.handleLoadView = function(data, refObj)
{
    var dataDocument = gxml_loadxml(data);
    
    var title = $("title",dataDocument).text();
    
    if(title.length > 0)
    {
        document.title = APPLICATION_NAME + " - " + title;
    }
    
    // Laad alle in de view gedeclareerde stylesheets
    $("link[type='text/css']", dataDocument).each(function() {LoadStylesheet($(this).attr("href"));});
        
    refObj.empty();
    // Lelijke hack om het in IE ook te laten werken (die .xml)
    try
    {
      $($("body", dataDocument)[0].xml).appendTo(refObj);
    }
    catch(e)
    {
      alert(e);
    }
};

jQuery.fn.handleLoadViewError =
function (XMLHttpRequest, textStatus, errorThrown) 
{
    alert("Error loading view. Status: [" + textStatus + "]");
}

function LoadStylesheet(cssFile)
{
    var stylesheetFound = false;
    
    for(var i in g_LoadedStyleSheets)
    {
        if(g_LoadedStyleSheets[i] == cssFile)
        {
            stylesheetFound = true;
            break;
        }
    }
    
    if(!stylesheetFound)
    {
        g_LoadedStyleSheets.push(cssFile);
        
        if(document.createStyleSheet) 
        {
            document.createStyleSheet(cssFile);
        }
        else 
        {
            var styles = "url('" + cssFile + "');";
            var newSS=document.createElement('link');
            newSS.rel='stylesheet';
            newSS.type='text/css';
            newSS.href=escape(cssFile);
            document.getElementsByTagName("head")[0].appendChild(newSS);
        }
    }
}