﻿function SizeToContent(p_objIFrame) {
    var l_Height = p_objIFrame.contentWindow.scrollMaxY;
    if (l_Height == null) l_Height = p_objIFrame.contentWindow.document.body.scrollHeight;
    p_objIFrame.style.height = (l_Height + 18) + "px";
    //p_objIFrame.parentNode.style.height = (l_Height + 18) + "px";
}

function NextSiblingElement(p_objNode) {
    p_objNode = p_objNode.nextSibling;
    while (p_objNode != null && p_objNode.nodeType != 1) {
        p_objNode = p_objNode.nextSibling;
    }
    return p_objNode;
}

function GetCommonContainer(p_objElement) {
    var l_objParent = p_objElement.parentNode;
    while (l_objParent != null && l_objParent.className.indexOf("ColorScheme") != 0) {
        l_objParent = l_objParent.parentNode;
    }
    return l_objParent;
}

function FrontEndEditorCallback(p_JSON, p_IFrame) {
    if (p_IFrame == null) p_IFrame = "FrontEndEdit";
    var l_objIFrame = typeof p_IFrame == "object" ? p_IFrame : document.getElementById(p_IFrame);
    if (!(l_objIFrame.tagName != null && l_objIFrame.tagName.toLowerCase() == "iframe")) {
        l_objIFrame = l_objIFrame.frameElement;
    }
    ToggleFrontEndEditor(null, null, l_objIFrame);
    
    var l_objDocument = l_objIFrame.ownerDocument;
    if (l_objDocument == null) l_objDocument = l_objIFrame.document;
    var l_objWindow = l_objDocument.defaultView;
    if (l_objWindow == null) l_objWindow = l_objDocument.parentWindow;

    //l_objWindow.location.reload();
}
function ReloadWindow(){
    var l_strLocation = this.location.href;
    var l_strRnd = Math.random();
    if(l_strLocation.indexOf("?")>0){
        l_strLocation = l_strLocation.substring(0,l_strLocation.indexOf("?"))
    }
    //l_strLocation += '?Rnd='+l_strRnd;
    top.window.location = l_strLocation;
}

function ToggleFrontEndEditor(event, p_strUrl, p_objElement) {
    
    if (p_objElement == null) p_objElement = event.target != null ? event.target : event.srcElement;
    var l_objParent = GetCommonContainer(p_objElement);
    var l_objFrontEndEdit = l_objParent.firstChild;
    if (l_objFrontEndEdit.nodeType != 1) l_objFrontEndEdit = NextSiblingElement(l_objFrontEndEdit);
    var l_objNieuws = NextSiblingElement(l_objFrontEndEdit);
    if ((l_objFrontEndEdit.currentStyle != null && l_objFrontEndEdit.currentStyle.display == 'block') || l_objFrontEndEdit.style.display == 'block') {
        l_objFrontEndEdit.style.display = 'none';
        l_objNieuws.style.display = 'block';
        ReloadWindow();
    } else {
        l_objNieuws.style.display = 'none';
        l_objFrontEndEdit.style.display = 'block';
        l_objFrontEndEdit.src = p_strUrl;
        SizeToContent(l_objFrontEndEdit);
    }
}

function ScheurhoekjeForNode(p_objNode) {
    if (p_objNode == null) return null;
    var l_intLength = p_objNode.childNodes.length;
    for (var l_intIndex = 0; l_intIndex < l_intLength; l_intIndex++) {
        var l_objNode = p_objNode.childNodes[l_intIndex];
        if (l_objNode.className == "ScheurHoekje") return l_objNode
    }
    return null;
}

function RedrawScheurhoekje(p_objElement) {
    if (p_objElement == null) return;
    var l_objParent = p_objElement;
    var l_objElement = ScheurhoekjeForNode(l_objParent);
    while (l_objElement == null) {
        l_objParent = l_objParent.parentNode;
        if (l_objParent == null) return;
        l_objElement = ScheurhoekjeForNode(l_objParent);
    }
    if (l_objElement == null) return;
    l_objElement.style.display = 'none';
    l_objElement.style.display = 'block';
}

function RemoveAttribute(p_strHtml, p_strAttribute, p_arrExcludeElementTags, p_arrIncludeElementTags, p_strName) {
    var l_strRegExp = "(<";
    if (p_arrExcludeElementTags != null) {
        l_strRegExp += "(?!";
        var l_strSeparator = "";
        var l_intLength = p_arrExcludeElementTags.length;
        for (var l_intIndex = 0; l_intIndex < l_intLength; l_intIndex++) {
            l_strRegExp += l_strSeparator;
            l_strRegExp += p_arrExcludeElementTags[l_intIndex];
            l_strSeparator = "|";
        }
        l_strRegExp += ")";
    }
    if (p_arrIncludeElementTags != null) {
        l_strRegExp += "(?:";
        var l_strSeparator = "";
        var l_intLength = p_arrIncludeElementTags.length;
        for (var l_intIndex = 0; l_intIndex < l_intLength; l_intIndex++) {
            l_strRegExp += l_strSeparator;
            l_strRegExp += p_arrIncludeElementTags[l_intIndex];
            l_strSeparator = "|";
        }
        l_strRegExp += ")";
    } else {
        l_strRegExp += "\\w+";
    }
    l_strRegExp += "(?=\\s)";
    l_strRegExp += "[^>]*)";
    l_strRegExp += "\\s";
    l_strRegExp += p_strAttribute;
    l_strRegExp += "=";
    if (p_strName == null) p_strName = "";
    l_strRegExp += "(?:";
    l_strRegExp += "\"[^\"]*" + p_strName + "[^\"]*\"|";
    l_strRegExp += "'[^']*" + p_strName + "[^']*'|";
    l_strRegExp += "[^\\s>]*" + p_strName + "[^\\s>]+";
    l_strRegExp += ")";
    var l_objRegExp = new RegExp(l_strRegExp, "gi");
    return p_strHtml.replace(l_objRegExp, "$1");
}

function StripTags(p_strHtml, p_arrTags) {
    l_strRegExp = "";
    if (p_arrTags != null) {
        l_strRegExp += "(?:";
        var l_strSeparator = "";
        var l_intLength = p_arrTags.length;
        for (var l_intIndex = 0; l_intIndex < l_intLength; l_intIndex++) {
            l_strRegExp += l_strSeparator;
            l_strRegExp += p_arrTags[l_intIndex];
            l_strSeparator = "|";
        }
        l_strRegExp += ")";
    }
    var l_objRegExp = new RegExp("<" + l_strRegExp + "(?=[\\s>]).*?>", "gi");
    p_strHtml = p_strHtml.replace(l_objRegExp, "");
    l_objRegExp = new RegExp("</" + l_strRegExp + ">", "gi");
    p_strHtml = p_strHtml.replace(l_objRegExp, "");
    return p_strHtml;
}

function RemoveFormatting(p_strHtml) {
    //Remove element with tagname containing a namespace prefix
    p_strHtml = p_strHtml.replace(/<\??\w+:(?:\w|-)+(?=[\s>]).*?>/gi, "");
    p_strHtml = p_strHtml.replace(/<\/\s*\w+:(?:\w|-)+(?=[\s>]).*?>/gi, "");
    //Remove style elements
    p_strHtml = p_strHtml.replace(/<style(?=[\s>]).*?>[\s\S]*?<\/style>\s*/gi, "");
    p_strHtml = p_strHtml.replace(/<link(?=[\s>]).*?>\s*/gi, "");
    p_strHtml = p_strHtml.replace(/&lt;\!--\[if\s[\s\S]*?\]--&gt;[\s\S]*?&lt;\!--\[endif\]--&gt;?/gi, "");
    p_strHtml = p_strHtml.replace(/&lt;\!--\[[\s\S]*?\]--&gt;/gi, "");
    //Remove style attributes containing margin definitions from elements excluding tagnames in the array below
    var l_arrExcludeElementTags = new Array("br", "div", "span", "img");
    p_strHtml = RemoveAttribute(p_strHtml, "style", l_arrExcludeElementTags);
    //Remove class attributes containing "Mso" since they represent MS Office classes
    p_strHtml = RemoveAttribute(p_strHtml, "class", null, null, "Mso");
    //Remove style attributes containing "mso-" since they represent MS Office styles
    p_strHtml = RemoveAttribute(p_strHtml, "style", null, null, "mso-");
    //Remove font elements since they contain font definitions that are not xhtml compliant
    p_strHtml = StripTags(p_strHtml, new Array("font", "span", "ins", "del"));
    return p_strHtml;
}


