
/* 
* service handlers
*/


handleRetrieveArticle = function (data) {

    // load overlay

    //initReader(); overlayAPI.load();

    if (data.Status == 0) {
        // no result.. show error
        renderOverlayError()

    } else {



        var viewType = data.ViewType
        var isPdf = false
        if (viewType != 1) {
            $('#searchresults').hide();
        }
        else {
            isPdf = true
        }
        // if free article, set viewtype to free article
        if (!data.Article.Metadata.Paid && !registered && !loggedIn) viewType = 3
        // if paid article and logged in, but incorrect subscription
        if (loggedIn && viewType == 2) viewType = 4

        if (!data.Article.Metadata.Paid) {
            //data.Article.Metadata.Paid = false;
            //registered = true;
            loggedIn = true;
            //viewType = 0;
        }

        var isFree = false;
        switch (viewType) {
            case 2:
                // preview
                renderPreviewArticle(data)
                break;
            case 0:
                // full
                renderFullArticle(data)
                copyContentToPrint()

                // shortcut..
                // convert FLV links to local
                convertFLVLinks()

                renderFLVPlayer()
                break;
            case 1:
                // pdf
                renderPDFArticle(data)
                break;
            case 3:
                // freearticles
                //renderFullArticle(data)
                isFree = true;
                $('#searchresults').hide();
                renderFreeArticle(data)
                break;
            case 4:
                // preview but loggedIn
                renderIncorrectSubscription(data)
                break;

            default:
                renderPreviewArticle(data)

        }

        if (isFree && isPdf) {
            var PDFURI = rootURI + "/handlers/retrieve.ashx?action=GetPDF&id=" + data.Article.DocumentID
            window.open(PDFURI);
        }
    }

}


/* 
* reader variations: preview article
*/

renderPreloader = function () {
    addLoader($("#overlay"))
}


renderPreviewArticle = function (data) {
    var container = $("#overlay");

    container.empty();
    container.removeClass("PDF").removeClass("full").addClass("preview")

    container.append($("<div/>").attr("id", "overlay-login"))
    container.append($("<div/>").attr("id", "overlay-subscription"))
    container.append($("<div/>").attr("id", "overlay-content"))

    // add closebuttons
    renderCloseButtons(container)

    // add loginform
    renderLoginFormPreview()
    // add subscription
    renderSubscription(data)

    // add content
    renderContent(data)

    // addHandlers
    $("#overlay .close").click(function () {
        //overlayAPI.close()
    })

}

renderFreeArticle = function (data) {

    var container = $("#overlay")

    container.empty()
    container.removeClass("PDF").removeClass("full").addClass("preview")

    container.append($("<div/>").attr("id", "overlay-register"))
    container.append($("<div/>").attr("id", "overlay-subscription"))
    container.append($("<div/>").attr("id", "overlay-content"))

    // add closebuttons
    renderCloseButtons(container)

    // add loginform
    renderRegister()

    // add subscription
    renderSubscription(data)

    // add content
    renderContent(data)

    // addHandlers
    $("#overlay .close").click(function () {
        //overlayAPI.close()
    })

}

renderSubscription = function (data) {

    var container = $("#overlay-subscription")

    var market = data.Article.Metadata.Market.split(';#');
    var modules = data.Article.Metadata.Module.split(';#');
    var moduleString = '';
    var currentModule = '';
    for (var i = 0; i < modules.length; i++) {
        if (i % 2 == 1) {
            if (i > 1) {
                moduleString = moduleString + " of ";
            }
            currentModule = modules[i];

            for (var j = 0; j < market.length; j++) {
                if (market[j] != "") {
                    if (j > 1) {
                        moduleString = moduleString + " of ";
                    }
                    moduleString = moduleString + currentModule + " " + market[j];
                }
            }
        }
    }


    container.append($("<div/>").addClass("title").html("Nog geen abonnee?"))
    container.append($("<p/>").html("U heeft nog geen toegang tot dit artikel. Om toegang te krijgen kunt u zich abonneren op deze module(s): " + moduleString))
    container.append($("<a/>").addClass("big").attr("href", "http://www.plantyn.com/leerrijk").attr("target", "_blank").html("WORD ABONNEE"))
}


/* 
* reader variations: full article
*/

renderFullArticle = function (data) {
    var container = $("#overlay")

    container.empty()
    container.removeClass("preview").removeClass("PDF").addClass("full")

    var leftDiv = $("<div/>").addClass("left")
    leftDiv.attr("id", "slidingMenu")
    leftDiv.append($("<div/>").attr("id", "overlay-toc"))
    leftDiv.append($("<div/>").attr("id", "overlay-print"))
    leftDiv.append($("<div/>")
        .append($("<a/>").attr("href", "#top").addClass('menuButton').html('TOP'))
        .append($("<a/>").attr("id", "closeArticle").addClass('menuButton').html('ARTIKEL SLUITEN'))
        .append($("<br/>").addClass('clear')).
                                addClass('closeOnMenu'));


    container.append(leftDiv)

    var rightDiv = $("<div/>").addClass("right")
    rightDiv.append($("<div/>").attr("id", "overlay-content"))
    // add closebuttons
    renderCloseButtons(rightDiv)
    container.append(rightDiv)


    container.append($("<br/>").addClass("clear"));

    // add printbutton
    renderPrintButton()

    // add content
    renderContent(data)

    // add toc
    renderTOC()

    // addHandlers
    $("#overlay .close").click(function () {
        //overlayAPI.close()
    })
}

renderTOC = function () {

    var container = $("#overlay-toc")

    container.empty()

    var items = getTOCItems()

    container.append($("<div/>").addClass("title").html("Artikel inhoud"))

    container.append($("<div/>").append(items));

}

getTOCItems = function () {

    // create scrollable	
    var items = $("<div/>");
    items.addClass('menuItems');

    //$.each($("#overlay-content .Heading1"), function(i,item) {
    $("#overlay-content .Leerrijkkop1").each(function (i, item) {

        var headingText = $(item).html()

        var element = $("<div/>").addClass('menuItem');

        var firstSpan
        firstSpan = $("<div/>").addClass("number").html(twoDigit(i + 1) + ".")

        var secondSpan
        secondSpan = $("<div/>").addClass("description").html(headingText)

        var clear = $("<br/>").addClass("clear");

        element.append(firstSpan).append(secondSpan).append(clear);
        var anchor = $("<a/>")
        anchor.attr("href", "#header_" + i).append(element);
        anchor.addClass("menuLink");

        items.append(anchor);

        // add id to header and add numbering
        $(this).attr("id", "header_" + i)
        $(this).html((i + 1) + ". " + headingText)

    })

    return items
}


renderPrintButton = function () {

    var container = $("#overlay-print")

    container.append($("<a/>").addClass("print").html("print dit artikel"))

    $("#overlay a.print").click(function (i) {

        // add print dialog
        print()
    })

}

renderCloseButtons = function (container) {


}

renderContent = function (data) {

    var container = $("#overlay-content")

    var metadata = data.Article.Metadata

    var title = metadata.Title
    var subTitle = metadata.Subtitle
    var articleType = metadata.ArticleType
    var authors = metadata.Authors

    var keywords = metadata.Keywords
    var summary = metadata.Summary
    var docset = metadata.Documentset
    var publishDate = metadata.PublishDate

    // add content
    container.append($("<h1/>").addClass("clear").html(title))

    var metainfo = $("<div/>").addClass("meta")

    metainfo.append($("<h2/>").html(subTitle))
    metainfo.append($("<h3/>").html(renderArticleType(articleType)))

    if (authors && authors != "") {
        metainfo.append($("<p/>").addClass("author").append(renderAuthors(authors)))
    }
    if (keywords && keywords != "") {
        metainfo.append($("<p/>").addClass("keywords").html(renderKeywords(keywords)))
    }
    if (docset && docset != "") {
        metainfo.append($("<p/>").addClass("docset").append(renderDocset(docset)))
    }
    if (publishDate && publishDate != "") {
        var parsedPublishDate = parseDate(publishDate)
        metainfo.append($("<p/>").addClass("publishdate").append("Publicatiedatum: " + parsedPublishDate.getDate().toString() + "/" + (parsedPublishDate.getMonth() + 1).toString() + "/" + parsedPublishDate.getFullYear().toString()))
    }

    container.append(metainfo)

    if ((data.ViewType == 0 && data.Article.Metadata.Paid) || (!data.Article.Metadata.Paid && registered) || (!data.Article.Metadata.Paid && loggedIn)) {
        container.append(data.Article.Content)
    } else {
        container.append($("<h2>").addClass("header").html("1. Samenvatting"))
        container.append($("<p/>").html(summary))
    }

    convertLists()

    // add handler for author anchors
    $(".meta .author a").click(function () {
        //overlayAPI.close()
        var Author = $(this).attr("href")

        var urlSearch = rootURI + "/Artikels/"
        var argument = "?author=" + Author
        // open window
        window.open(urlSearch + argument, "_self")

        return false
    })

    // add handler for docset anchors
    $(".meta .docset a").click(function () {
        //overlayAPI.close()

        var Docset = $(this).attr("href")

        var urlSearch = rootURI + "/Artikels/"
        var argument = "?docset=" + Docset
        // open window
        window.open(urlSearch + argument, "_self")

        return false
    })
}

/* 
* reader variations: PDF article
*/

renderPDFArticle = function (data) {

    renderPDFContent(data)
}

renderPDFContent = function (data) {

    var PDFURI = rootURI + "/handlers/retrieve.ashx?action=GetPDF&id=" + data.Article.DocumentID
    window.open(PDFURI);
}

/* 
* reader variations: incorrect subscription
*/

renderIncorrectSubscription = function (data) {
    var container = $("#overlay")

    container.empty()
    container.removeClass("PDF").removeClass("full").addClass("preview")

    container.append($("<div/>").attr("id", "overlay-nosubscription"))
    container.append($("<div/>").attr("id", "overlay-content"))

    // add closebuttons
    renderCloseButtons(container)

    // add subscription
    renderNoSubscription(data)

    // add content
    renderContent(data)

    // addHandlers
    $("#overlay .close").click(function () {
        //overlayAPI.close()
    })

}

renderNoSubscription = function (data) {

    var container = $("#overlay-nosubscription")

    var market = data.Article.Metadata.Market.split(';#');
    var modules = data.Article.Metadata.Module.split(';#');
    var moduleString = '';
    var currentModule = '';
    for (var i = 0; i < modules.length; i++) {
        if (i % 2 == 1) {
            if (i > 1) {
                moduleString = moduleString + " of ";
            }
            currentModule = modules[i];

            for (var j = 0; j < market.length; j++) {
                if (market[j] != "") {
                    if (j > 1) {
                        moduleString = moduleString + " of ";
                    }
                    moduleString = moduleString + currentModule + " " + market[j];
                }
            }
        }
    }

    container.append($("<div/>").addClass("title").html("U hebt geen toegang tot dit artikel"))
    container.append($("<p/>").html("U heeft nog geen toegang tot dit artikel. Om toegang te krijgen kunt u zich abonneren op deze module(s): " + moduleString))
    container.append($("<a/>").addClass("big").attr("href", "http://www.plantyn.com/leerrijk").attr("target", "_blank").html("ABONNEMENT UITBREIDEN"))
}

/*
* errorMessage
*/

renderOverlayError = function (data) {
    var container = $("#overlay")

    container.empty()
    container.removeClass("PDF").removeClass("full").addClass("preview")



    var content = $("<div/>").attr("id", "overlay-content")
    var errorMessage = $("<div/>").addClass("title").html("Er is een communicatiefout opgetreden")
    content.append(errorMessage)

    container.append(content)

    // add closebuttons
    renderCloseButtons(container)

    // addHandlers
    $("#overlay .close").click(function () {
        //overlayAPI.close()
    })

}

/*
* helper functions
*/

renderFLVPlayer = function () {
    flowplayer("a.flv", rootURI + "/lib/flowplayer/flowplayer-3.1.5.swf", { plugins: { controls: null} });
}

convertFLVLinks = function () {

    var prefix = rootURI + "/flv/"

    $("a.flv").each(function (i, item) {

        var href = $(item).attr("href")

        var filename = jQuery.url.setUrl(href).param("filename")

        if (filename) {
            // if the link is form sharepoint, rewrite, for now
            $(item).attr("href", prefix + filename)
        }
    })

}

renderAuthors = function (list) {

    // split list in items
    var names = list.split(";#")

    // add first item 
    var htmlObject = $("<div/>").append(formatAuthor(names[1]))

    $.each(names, function (i, item) {
        // only add odd items that contains the names..
        if (i % 2 == 1 && i > 1) htmlObject.append(formatAuthor(item))
    })

    return htmlObject
}

formatAuthor = function (string) {

    var name = string.split("%")[0]
    var firstname = name.split(",")[1]
    var lastname = name.split(",")[0]
    var jobTitle = string.split("%")[1]

    var htmlObject = $("<div/>").append($("<a/>").attr("href", name).attr("title", "Toon meer artikels van deze auteur").html(firstname + " " + lastname))

    if (jobTitle && jobTitle != "") {
        htmlObject.append(" - " + jobTitle)
    }

    return htmlObject
}

renderKeywords = function (list) {
    // split list in items
    var names = list.split(";#")

    // add first item 
    var string = "<strong>Trefwoorden: </strong>" + names[1]

    $.each(names, function (i, item) {
        // only add odd items that contains the names..
        if (i % 2 == 1 && i > 1) string += ", " + item
    })

    return string
}

renderArticleType = function (list) {
    // split list in items
    var names = list.split(";#")

    // add first item 
    var string = names[1]

    $.each(names, function (i, item) {
        // only add odd items that contains the names..
        if (i % 2 == 1 && i > 1) string += " / " + item
    })

    return string
}

renderDocset = function (string) {

    var htmlObject = $("")

    if (string != null) {
        // get docset name
        docset = string.split(";#")[1]
        htmlObject = $("<div/>").
			append($("<strong/>").html("Gerelateerde artikels")).
			html("<br />Toon alle artikels binnen de set ").
			append($("<a/>").attr("href", docset).html(docset))
    }

    return htmlObject
}


convertLists = function () {

    var level_0 = $("li.level_0")
    var level_1 = $("li.level_1")
    var level_2 = $("li.level_2")

    level_0.each(function (i, item) {
        if ($(item).prev()[0] == null) {
            $(item).attr("value", 1)
        } else {
            var value = $(level_0[i - 1]).attr("value")
            $(item).attr("value", value + 1)
        }
    })

    level_1.each(function (i, item) {

        if ($(item).prev().hasClass("level_0")) {
            $(item).attr("value", 1)
        } else {
            var value = $(level_1[i - 1]).attr("value")
            $(item).attr("value", value + 1)
        }
    })

    level_2.each(function (i, item) {

        if ($(item).prev().hasClass("level_1")) {
            $(item).attr("value", 1)
        } else {
            var value = $(level_2[i - 1]).attr("value")
            $(item).attr("value", value + 1)
        }
    })
}

parseDate = function (xmlDate) {

    if (!/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}/.test(xmlDate)) {
        throw new RangeError("xmlDate must be in ISO-8601 format YYYY-MM-DD.");
    }

    return new Date(xmlDate.substring(0, 4), xmlDate.substring(5, 7) - 1, xmlDate.substring(8, 10));
}

parseMonth = function (month) {

    var months = new Array()
    months = ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"]

    return months[month]

}

/*
* print functions
*/

copyContentToPrint = function () {

    // delete old print containers
    $("#print").remove()

    // create a copy of the content in a new print container
    var printContainer = $("<div/>").attr("id", "print")
    printContainer.html($("#overlay-content").html())
    $("body").append(printContainer)

    // add printheader to print container
    addPrintHeader($("#print"))

    // add class to blocking layer for css purposes
    $($("#overlay ~ div")[0]).addClass("block")

}

addPrintHeader = function (container) {
    var printHeader = $("<div/>").addClass("printheader")

    printHeader.append($("<img/>").attr("src", rootURI + "/css/images/logos/leerrijk-logo_overlay.png"))
    printHeader.append($("<h3/>").html("Leerrijk-Plantyn nv"))
    printHeader.append($("<div/>").addClass("clear"))

    container.prepend(printHeader)
}

