﻿Type.registerNamespace("AOFoundation.ECM.Ribbon");

AOFoundation.ECM.Ribbon.GetContentEditorNode = function () {
    var range = RTE.Cursor.get_range();
    var currentNode = $(range.parentElement());
    if (currentNode.attr("contenteditable") == "true") {
        return currentNode;
    }
    else {
        return $(currentNode.parents("div[contenteditable='true']")[0]);
    }
}

AOFoundation.ECM.Ribbon.InsertMarkupBefore = function (code) {
    var range = RTE.Cursor.get_range();
    var markup = $(code);
    if ($(range.parentElement()).attr('contenteditable') || (range.parentElement().tagName != 'P' && range.parentElement().tagName != 'H2' && range.parentElement().tagName != 'H3' && range.parentElement().tagName != 'H4')) {
        range.insertBefore(markup[0]);
    }
    else {
        markup.insertBefore(range.parentElement());
    }
    RTE.Cursor.update();
}

AOFoundation.ECM.Ribbon.AddCaption = function () {
    var range = RTE.Cursor.get_range();
    var currentNode = $(range.parentElement());
    var table = $(currentNode.parents("table")[0]);
    table.children("caption").remove();
    table.prepend("<caption>Caption</caption>");
}

AOFoundation.ECM.Ribbon.RemoveCaption = function () {
    var range = RTE.Cursor.get_range();
    var currentNode = $(range.parentElement());
    var table = $(currentNode.parents("table")[0]);
    table.children("caption").remove();
}

AOFoundation.ECM.Ribbon.AddLinkAnchor = function () {
    AOFoundation.ECM.Ribbon.InsertMarkupBefore("<a name='anchor_name'></a>");
}

AOFoundation.ECM.Ribbon.CleanMarkup = function () {
    var editorNode = AOFoundation.ECM.Ribbon.GetContentEditorNode();
    var numberElements = 0;
    editorNode.find("p").filter(function () {
        if ($.trim($(this).html()) == '' || $.trim($(this).html()) == '&nbsp;' || $.trim($(this).html()) == '<br>') {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    editorNode.find("div").filter(function () {
        if ($.trim($(this).html()) == '' || $.trim($(this).html()) == '&nbsp;' || $.trim($(this).html()) == '<br>') {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    editorNode.find("span").filter(function () {
        if (($.trim($(this).html()) == '' || $.trim($(this).html()) == '&nbsp;' || $.trim($(this).html()) == '<br>') && $(this).attr("id") != "ms-rterangecursor-start" && $(this).attr("id") != "ms-rterangecursor-end") {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    editorNode.find("h2").filter(function () {
        if ($.trim($(this).html()) == '' || $.trim($(this).html()) == '&nbsp;' || $.trim($(this).html()) == '<br>') {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    editorNode.find("h3").filter(function () {
        if ($.trim($(this).html()) == '' || $.trim($(this).html()) == '&nbsp;' || $.trim($(this).html()) == '<br>') {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    editorNode.find("h4").filter(function () {
        if ($.trim($(this).html()) == '' || $.trim($(this).html()) == '&nbsp;' || $.trim($(this).html()) == '<br>') {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    editorNode.find("a").filter(function () {
        if (!$(this).attr('name') && $.trim($(this).html()) == '') {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    editorNode.find("br").filter(function () {
        var lastSibling = $(this).parent().contents().last()[0];
        if (this == lastSibling) {
            numberElements++;
            return true;
        }
        else if ($(this).parent('li').length > 0) {
            numberElements++;
            return true;
        }
        return false;
    }).remove();
    SP.UI.Notify.addNotification('Markup cleaned (' + numberElements + ' elements)', false);
}

AOFoundation.ECM.Ribbon.CheckLinks = function () {
    var editorNode = AOFoundation.ECM.Ribbon.GetContentEditorNode();
    var numberElements = 0;
    editorNode.find("a").each(function () {
        numberElements++;
        if ($(this).attr("href") && $(this).attr("href").match("^http://") && !$(this).attr("href").match("^http://www.ao")) {
            $(this).attr("target", "_blank");
        }
        else {
            $(this).attr("target", "");
        }
    });
    SP.UI.Notify.addNotification('Links checked (' + numberElements + ' elements)', false);
}

AOFoundation.ECM.Ribbon.ToggleHighlight = function () {
    var editorNode = AOFoundation.ECM.Ribbon.GetContentEditorNode();
    if (editorNode.hasClass("ao-EditorHighlight")) {
        editorNode.removeClass("ao-EditorHighlight");
    }
    else {
        editorNode.addClass("ao-EditorHighlight");
    }
    RTE.Cursor.update();
}

AOFoundation.ECM.Ribbon.AddPicture = function () {
    AOFoundation.ECM.Ribbon.InsertMarkupBefore("<div class='image'><img src='/_layouts/AOFoundationImages/platzhalter_230x84.gif'><span>Caption</span></div>");
}

AOFoundation.ECM.Ribbon.AddPictureWithoutCaption = function () {
    AOFoundation.ECM.Ribbon.InsertMarkupBefore("<img src='/_layouts/AOFoundationImages/platzhalter_69x108.gif'>");
}

AOFoundation.ECM.Ribbon.PicturePosition = function (position) {
    var range = RTE.Cursor.get_range();
    var imageContainer = $(range.parentElement());
    if (imageContainer.hasClass("image") || imageContainer.hasClass("image_float_left") || imageContainer.hasClass("image_float_right") || imageContainer.hasClass("fullwidth")) {
        switch (position) {
            case "default":
                imageContainer.attr("class", "image");
                break;
            case "left":
                imageContainer.attr("class", "image_float_left");
                break;
            case "right":
                imageContainer.attr("class", "image_float_right");
                break;
            case "fullwidth":
                image.attr("class", "fullwidth");
                break;
        }
    }
    else {
        var image = $(RTE.Cursor.getSelectedImage());
        switch (position) {
            case "default":
                image.attr("class", "");
                break;
            case "left":
                image.attr("class", "image_float_left");
                break;
            case "right":
                image.attr("class", "image_float_right");
                break;
            case "fullwidth":
                image.attr("class", "fullwidth");
                break;
        }
    }
    RTE.Cursor.update();
}

AOFoundation.ECM.Ribbon.PictureRemove = function () {
    var range = RTE.Cursor.get_range();
    var imageContainer = $(range.parentElement());
    if (imageContainer.hasClass("image") || imageContainer.hasClass("image_float_left") || imageContainer.hasClass("image_float_right") || imageContainer.hasClass("fullwidth")) {
        imageContainer.remove();
    }
    else {
        var image = $(RTE.Cursor.getSelectedImage());
        image.remove();
    }
}

AOFoundation.ECM.Ribbon.LinkStyle = function (style) {
    var range = RTE.Cursor.get_range();
    var link = $(range.parentElement());
    if (link[0].tagName == 'A') {
        switch (style) {
            case "default":
                link.attr("class", "");
                break;
            case "highlight":
                link.attr("class", "hightlight_link");
                break;
        }
    }
    RTE.Cursor.update();
}

AOFoundation.ECM.Ribbon.ListType = function (style) {
    var range = RTE.Cursor.get_range();
    var listItem = $(range.parentElement());
    var listRoot = listItem;
    while (listRoot.parents("ul, ol").length > 0) {
        listRoot = listRoot.parents("ul, ol");
    }
    if (listRoot[0].tagName == 'UL' || listRoot[0].tagName == 'OL') {
        listRoot.find("span").filter(function () {
            return $.trim($(this).html()) == '';
        }).remove();
        switch (style) {
            case "unordered":
                listRoot.replaceWith("<ul class='list'>" + listRoot.html().replace(/<ol/gi, "<ul").replace(/<\/ol/gi, "</ul") + "</ul>");
                break;
            case "ordered":
                listRoot.replaceWith("<ol class='list'>" + listRoot.html().replace(/<ul/gi, "<ol").replace(/<\/ul/gi, "</ol") + "</ol>");
                break;
            case "bluesquare":
                listRoot.replaceWith("<ul class='list blue_square'>" + listRoot.html().replace(/<ol/gi, "<ul").replace(/<\/ol/gi, "</ul") + "</ul>");
                break;
            case "teasers":
                listRoot.replaceWith("<ul class='teaser_list'>" + listRoot.html().replace(/<ol/gi, "<ul").replace(/<\/ol/gi, "</ul") + "</ul>");
                break;
        }
    }
}

AOFoundation.ECM.Ribbon.AddListItem = function (character) {
    var range = RTE.Cursor.get_range();
    var listItem = $(range.parentElement());
    if (listItem[0].tagName != 'LI')
        listItem = listItem.parents("li");
    $('<li></li>').insertAfter(listItem);
}

AOFoundation.ECM.Ribbon.SetStyle = function (element) {
    var range = RTE.Cursor.get_range();
    if (!range.isEmpty()) {
        range.replaceHtml("<" + element + ">" + range.$1X_0.get_innerHTML() + "</" + element + ">");
    }
}

AOFoundation.ECM.Ribbon.RemoveStyle = function () {
    var range = RTE.Cursor.get_range();
    if (!range.isEmpty()) {
        var content = range.$1X_0.get_innerHTML();
        content = content.replace(/<\/{0,1}cite>/gi, "");
        content = content.replace(/<\/{0,1}q>/gi, "");
        range.replaceHtml(content);
    }
}

AOFoundation.ECM.Ribbon.InsertCharacter = function (character) {
    var range = RTE.Cursor.get_range();
    range.replaceHtml(character);
}

