﻿var preservedLiterals = new Array();
var preservedLiteralFixUp = function(html) { return html; };

function preservedLiteralInit()
{
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoading(preservedLiteralPageLoading);
    Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(preservedLiteralPageLoaded);
}

// Register a span to be saved/restored on postback.
function preservedLiteralAdd(clientID, fn)
{
    preservedLiterals.push({ id:clientID, fixupFunction: fn, HTML:null });
}

// Save HTML.
function preservedLiteralPageLoading()
{
    for (var i = 0; i < preservedLiterals.length; i++)
    {
        var p = preservedLiterals[i];
        var element = document.getElementById(p.id);
        if (element !== null)
        {
            var html;
            preservedLiteralMakeCompatible(element);
            html = element.innerHTML;
            if (p.fixupFunction !== null)
                html = p.fixupFunction(html);
            p.HTML = preservedLiteralFixUp(html);
        }
    }
}

// Restore HTML.
function preservedLiteralPageLoaded()
{
    for (var i = 0; i < preservedLiterals.length; i++)
    {
        var p = preservedLiterals[i];
        var element = document.getElementById(p.id);
        if (element !== null && p.HTML !== null)
        {
            element.innerHTML = p.HTML;
        }
    }
}

function preservedLiteralMakeCompatible(element)
{
    if (Sys.Browser.agent === Sys.Browser.InternetExplorer)
    {
        // For IE, promote links to HEAD. Does not process LINK in innerHtml.
        var head = document.getElementsByTagName("HEAD")[0];
        var inlineLinks = element.getElementsByTagName("LINK");
        var alreadyInHead = false;
        for (var i = 0; i < inlineLinks.length; i++)
        {
            for (var j = 0; j < document.links.length; j++)
            {
                if (document.links.item(j).href === inlineLinks[i].href)
                {
                    alreadyInHead = true;
                    break;
                }
            }
            if (!alreadyInHead)
            {
                head.appendChild(inlineLinks[i].cloneNode());
            }
        }
    }
    
    // Remove SCRIPT in case an unusual browser tries to run it.
    var scripts = element.getElementsByTagName("SCRIPT");
    for (var t = 0; t < scripts.length; t++)
    {
        scripts[t].parentNode.removeChild(scripts[t]);
    }
}
