﻿function loadDataSelector(dataType)
{
    var selectorContainerDiv = $("#" + dataType + "SelectorDivContainer");
    var responseText = $.ajax(
    {
        type: "POST", url: dataType + "JSON.aspx", data: "action=listData",
        success: function (msg)
        {
            if (msg != "")
            {
                serverResponseObj = $.parseJSON(msg);
                if (serverResponseObj)
                {
                    if (serverResponseObj.error)
                        alert(replaceQuotes(serverResponseObj.error));
                    else if (serverResponseObj.dataList)
                    {
                        selectorContainerDiv.html("");
                        $.each(serverResponseObj.dataList, function ()
                        {
                            var selectorMarkup = generateSelectorMarkup(this, dataType, serverResponseObj.configAdmin);
                            if (selectorMarkup)
                            {
                                selectorMarkup.hide();
                                $(selectorMarkup).appendTo(selectorContainerDiv).show();
                            }
                        });
                        var clearingDiv = $(document.createElement("div"));
                        clearingDiv.attr("style", "clear:both;");
                        clearingDiv.appendTo(selectorContainerDiv);
                    }
                }
            }
        }
    }); 
}

function generateSelectorMarkup(object, dataType, configAdmin)
{
    if ((configAdmin && (object.activated == 0)) || (object.activated == 1))
    {
        var selectorMarkup = $(document.createElement("div"));
        selectorMarkup.id = "selectorDiv_" + object.id;
        selectorMarkup.addClass("selectorDiv");

        var selectorInput = $(document.createElement("input"));
        selectorInput.attr("type", "checkbox");
        selectorInput.attr("id", dataType + "SelectorInput_" + object.id);
        selectorInput.val(object.id);

        selectorMarkup.append(selectorInput);

        var selectorLabel = $(document.createElement("label"));
        selectorLabel.attr("for", dataType + "SelectorInput_" + object.id);
        if (object.activated == 0)
            selectorLabel.attr("style", "text-decoration:line-through;");
        selectorLabel.html(object.title);

        selectorMarkup.append(selectorLabel);

        return selectorMarkup;
    }
    return null;
}

function generateLessonResultMarkup(lesson, developer, developerId, publisher, rowClass)
{
    var maxTitleLength = 56;
    if(rowClass != "dark")
        rowClass = "light";
    var lessonSearchResultRow = $(document.createElement("tr"));
    lessonSearchResultRow.attr("id", "lessonSearchResult_" + lesson.id);
    lessonSearchResultRow.addClass(rowClass);

    var levelCell = $(document.createElement("td"));
    levelCell.css("text-align", "center");

    var levelDiv = $(document.createElement("div"));
    if (lesson.level)
        levelDiv.html("Level " + lesson.level.title);

    var modalityDiv = $(document.createElement("div"));
    if((lesson.video)||(lesson.modality))
    {
        var modalityIcon = $(document.createElement("span"));
        if (lesson.video)
        {
            modalityIcon.addClass("VideoIcon");
            modalityIcon.simpletip({ fixed: false, content: "Video", offset: [30, -10], showTime: 0, hideTime: 0 });
        }
        else
        {
            modalityIcon.addClass(lesson.modality.title + "Icon");
            modalityIcon.simpletip({ fixed: false, content: lesson.modality.title, offset: [30, -10], showTime: 0, hideTime: 0 });
        }
        modalityDiv.append(modalityIcon);
    }

    levelCell.append(levelDiv);
    levelCell.append(modalityDiv);

    lessonSearchResultRow.append(levelCell);

    var lessonCell = $(document.createElement("td"));

    var lessonTitle = $(document.createElement("div"));
    lessonTitle.addClass("lessonTitle");

    if (lesson.link)
    {
        var lessonTitleLink = $(document.createElement("a"));
        lessonTitleLink.addClass("titleLink");
        if (developer || publisher)
            lessonTitleLink.attr("href", lesson.link);
        else
            lessonTitleLink.attr("href", "LessonCounter.aspx?lessonId=" + lesson.id + "&linkTypeId=0");
        lessonTitleLink.attr("target", "_blank");
        lessonTitleLink.html(truncateText(lesson.onlineTitle, maxTitleLength));
        lessonTitle.append(lessonTitleLink);
    }
    else
    {
        var lessonTitleSpan = $(document.createElement("span"));
        lessonTitleSpan.html(truncateText(lesson.onlineTitle, maxTitleLength));
//        lessonTitleSpan.simpletip({fixed:false,content:lesson.onlineTitle,offset:[30,-10],showTime:0,hideTime:0});
        lessonTitle.append(lessonTitleSpan);
    }
//    lessonTitle.simpletip({ fixed: false, content: lesson.onlineTitle, offset: [20, -10], showTime: 0, hideTime: 0 });

    var lessonDescription = $(document.createElement("div"));
    lessonDescription.addClass("lessonDescription");
    lessonDescription.html(lesson.onlineDescription);

    var topicDiv = $(document.createElement("div"));
    topicDiv.addClass("searchResultTopicDiv");

    var topicSpan = $(document.createElement("span"));
    topicSpan.addClass("searchResultTopic");
    if (lesson.subTopics.length > 0)
        topicSpan.html(lesson.topic.title+": ");
    else
        topicSpan.html(lesson.topic.title);

    var subTopicsSpan = $(document.createElement("span"));
    subTopicsSpan.addClass("searchResultSubTopics");
    for (var i = 0; i < lesson.subTopics.length; i++)
    {
        var subTopicSpan = $(document.createElement("span"));
        subTopicsSpan.addClass("searchResultSubTopic");
        if (i < (lesson.subTopics.length - 1))
            subTopicSpan.html(lesson.subTopics[i].title+", ");
        else
            subTopicSpan.html(lesson.subTopics[i].title);
        subTopicsSpan.append(subTopicSpan);
    }

    topicDiv.append(topicSpan);
    topicDiv.append(subTopicsSpan);

    lessonCell.append(lessonTitle);
    lessonCell.append(lessonDescription);
    lessonCell.append(topicDiv);

    lessonSearchResultRow.append(lessonCell);

    var competenceCell = $(document.createElement("td"));
    competenceCell.css("text-align", "center");
    if (lesson.competence)
        competenceCell.html(lesson.competence.title);
    if(developer || publisher)
    {
        var adminButtonsDiv = $(document.createElement("div"));
        if ((developer) && ((developerId == 0) || ((lesson.primaryDeveloper) && (lesson.primaryDeveloper.id == developerId)) || (!lesson.primaryDeveloper)))
        {
            var lessonDeleteLink = $(document.createElement("a"));
            lessonDeleteLink.addClass("deleteIcon");
            lessonDeleteLink.attr("href", "javascript:deleteLesson('" + lesson.id + "');");
            lessonDeleteLink.simpletip({fixed:false,content:"Delete Lesson",offset:[30,-10],showTime:0,hideTime:0});
            adminButtonsDiv.append(lessonDeleteLink);
        }
        if (publisher)
        {
            var lessonPublishLink = $(document.createElement("a"));
            lessonPublishLink.attr("id", "lessonPublishLink_" + lesson.id);
            if (lesson.activated == 0)
            {
                lessonPublishLink.addClass("privateIcon");
                lessonPublishLink.simpletip({ fixed: false, content: "Publish Lesson", offset: [30, -10], showTime: 0, hideTime: 0 });
            }
            else if (lesson.activated == 1)
            {
                lessonPublishLink.addClass("publicIcon");
                lessonPublishLink.simpletip({ fixed: false, content: "Unpublish Lesson", offset: [30, -10], showTime: 0, hideTime: 0 });
            }
            lessonPublishLink.attr("href", "javascript:modifyLessonValue('" + lesson.id + "', 'activated', '" + ((lesson.activated == 1) ? "disabled" : "enabled") + "');");
            adminButtonsDiv.append(lessonPublishLink);
        }
        if ((developer) && ((developerId == 0) || ((lesson.primaryDeveloper) && (lesson.primaryDeveloper.id == developerId)) || (!lesson.primaryDeveloper)))
        {
            var lessonEditLink = $(document.createElement("a"));
            lessonEditLink.addClass("editIcon");
            lessonEditLink.attr("href", "javascript:editLesson('" + lesson.id + "');");
            lessonEditLink.simpletip({ fixed: false, content: "Edit Lesson", offset: [30, -10], showTime: 0, hideTime: 0 });
            adminButtonsDiv.append(lessonEditLink);
        }
        competenceCell.append(adminButtonsDiv);
        competenceCell.append(lesson.name);

        if (!lesson.language || !lesson.level || !lesson.modality || !lesson.topic || !lesson.competence || !lesson.primaryDeveloper || (lesson.quarter <= 0) || (lesson.year <= 0))
        {
            lessonSearchResultRow.removeClass(rowClass);            
            lessonSearchResultRow.addClass("incompleteLesson");
        }
    }

    lessonSearchResultRow.append(competenceCell);

    var mediaCell = $(document.createElement("td"));
    mediaCell.css("text-align", "center");
    if (lesson.mediaLink)
    {
        var lessonMediaLink = $(document.createElement("a"));
        lessonMediaLink.addClass("saveIcon");
        lessonMediaLink.simpletip({ fixed: false, content: "Download Lesson Media", offset: [30, -10], showTime: 0, hideTime: 0 });
        if (developer || publisher)
            lessonMediaLink.attr("href", lesson.mediaLink);
        else
            lessonMediaLink.attr("href", "LessonCounter.aspx?lessonId=" + lesson.id + "&linkTypeId=1");
        lessonMediaLink.attr("target", "_blank");
        mediaCell.append(lessonMediaLink);
    }

    lessonSearchResultRow.append(mediaCell);

    return lessonSearchResultRow;
}

function backToSearch()
{
    getLessonCount();
    $("#searchResultsDiv").hide();
    $("#searchContentTable").show();
    $("#searchFormDiv").show();
}

function searchLessons(pageNumber, searchButtonId)
{
    var lessonSearchTB = $("#lessonSearchTB");
    if (searchButtonId)
    {
        setLoadingIndicator(searchButtonId);
    }
    else
    {
        if ($("#searchResultsDiv").css("display") == "none")
            setLoadingIndicator("lessonSearchBtn");
        else
            setLoadingIndicator("pagerLink_" + pageNumber);
    }
    $("#lessonSearchResultsErrorMessage").html("");
    var languageIds = "";
    var languageCBL = $("#LanguageSelectorDivContainer input");
    var i = 0;
    for (i = 0; i < languageCBL.length; i++)
    {
        var selectorInput = languageCBL[i];
        if (selectorInput.checked)
        {
            languageIds += selectorInput.id.substring(selectorInput.id.lastIndexOf('_') + 1) + ",";
        }
    }
    if (languageIds.length > 0)
        languageIds = languageIds.substring(0, (languageIds.length - 1));
    if (languageIds == "0")
        languageIds = "";
    var levelIds = $("#LevelSelectorDDL").val();
    if (levelIds == "0")
        levelIds = "";
    var modalityIds = $("#ModalitySelectorDDL").val();
    if (modalityIds == "0")
        modalityIds = "";
    var competenceIds = $("#CompetenceSelectorDDL").val();
    if (competenceIds == "0")
        competenceIds = "";
    var topicIds = $("#TopicSelectorDDL").val();
    if (topicIds == "0")
        topicIds = "";
    var subTopicIds = $("#SubTopicSelectorDDL").val();
    if (subTopicIds == "0")
        subTopicIds = "";
    var newest = $("#sortByDDL").val();
    var statusIds = "";
    var advancedCBL = $("#AdvancedSelectorDivContainer input");
    var i = 0;
    var mine = "0";
    var video = "0";
    for (i = 0; i < advancedCBL.length; i++)
    {
        var selectorInput = advancedCBL[i];
        if (selectorInput.checked)
        {
            if (selectorInput.id.lastIndexOf('StatusSelectorInput_') >= 0)
                statusIds += selectorInput.id.substring(selectorInput.id.lastIndexOf('_') + 1) + ",";
            else if (selectorInput.id == "MyLessonsSelectorInput")
                mine = "1";
            else if (selectorInput.id == "VideoSelectorInput")
                video = "1";
        }
    }
    if (statusIds.length > 0)
        statusIds = statusIds.substring(0, (statusIds.length - 1));
    var responseText = $.ajax(
    {
        type: "POST", url: "LessonJSON.aspx", data: "action=search&page=" + pageNumber + "&searchString=" + lessonSearchTB.val()
        + "&languageIds=" + languageIds
        + "&levelIds=" + levelIds
        + "&modalityIds=" + modalityIds
        + "&competenceIds=" + competenceIds
        + "&topicIds=" + topicIds
        + "&subTopicIds=" + subTopicIds
        + "&video=" + video
        + "&statusIds=" + statusIds
        + "&mine=" + mine
        + "&newest=" + newest,
        success: function (msg)
        {
            if (msg != "")
            {
                serverResponseObj = $.parseJSON(msg);
                if (serverResponseObj)
                {
                    if (serverResponseObj.error)
                        $("#lessonSearchResultsErrorMessage").html(serverResponseObj.error);
                    else if ((serverResponseObj.lessons.length <= 0) && (pageNumber > 1))
                        searchLessons(1);
                    else if (serverResponseObj.lessons)
                    {
                        $("#searchContentTable").hide();
                        $("#searchFormDiv").hide();
                        $("#searchResultsDiv").show();
                        var rowClassCounter = 0;
                        var lessonSearchResultsBody = $("#lessonSearchResultsBody");
                        lessonSearchResultsBody.empty();
                        $.each(serverResponseObj.lessons, function (intIndex, objValue)
                        {
                            var lessonSearchResultsBufferRow = $(document.createElement("tr"));
                            lessonSearchResultsBufferRow.addClass("bufferRow");

                            var lessonSearchResultsBufferCell = $(document.createElement("td"));
                            lessonSearchResultsBufferCell.attr("colspan", "4");

                            lessonSearchResultsBufferRow.append(lessonSearchResultsBufferCell);

                            var lessonMarkup = generateLessonResultMarkup(objValue, serverResponseObj.developer, serverResponseObj.developerId, serverResponseObj.publisher, ((rowClassCounter % 2 == 0) ? "dark" : "light"));
                            $(lessonSearchResultsBufferRow).appendTo(lessonSearchResultsBody);
                            $(lessonMarkup).appendTo(lessonSearchResultsBody);
                            rowClassCounter++;
                        });

                        var template = '$1<span class="highlight">$2</span>$3';
                        for (var i = 0; i < serverResponseObj.searchTerms.length; i++)
                        {
                            if (serverResponseObj.searchTerms[i].length > 0)
                            {
                                var pattern = new RegExp('(>[^<.]*)(' + serverResponseObj.searchTerms[i] + ')([^<.]*)', "ig");
                                lessonSearchResultsBody.html(lessonSearchResultsBody.html().replace(pattern, template));
                            }
                        }
                        var resultsCountSpan = $("#resultsCountSpan");
                        if (serverResponseObj.pageCount > 1)
                            resultsCountSpan.html("Result" + ((serverResponseObj.displayCount == 1) ? " " : "s ") + ((serverResponseObj.displayCount == 1) ? ("<span class=\"pageCountEmphasized\">" + serverResponseObj.startIndex + "</span>") : ("<span class=\"pageCountEmphasized\">" + serverResponseObj.startIndex + "</span> - <span class=\"pageCountEmphasized\">" + (serverResponseObj.startIndex + serverResponseObj.displayCount - 1))) + "</span> of <span class=\"pageCountEmphasized\">" + serverResponseObj.resultCount + "</span>");
                        else
                            resultsCountSpan.html("<span class=\"pageCountEmphasized\">" + serverResponseObj.resultCount + "</span> Result" + ((serverResponseObj.resultCount == 1) ? "" : "s"));
                        resultsCountSpan.show();
                        /*
                        var pageCountSpan = $("#pageCountSpan");
                        pageCountSpan.html(serverResponseObj.pageCount + " Page" + ((serverResponseObj.pageCount == 1) ? "" : "s"));
                        pageCountSpan.show();
                        */
                        lessonSearchResultsBody.css("height", "");
                        generatePagerMarkup(pageNumber, serverResponseObj.pageCount, serverResponseObj.pageSize);
                        clearLoadingIndicator();
                    }
                }
            }
        }
    });
}

function getLessonCount()
{
    var lessonSearchTB = $("#lessonSearchTB");
    var languageIds = "";
    var languageCBL = $("#LanguageSelectorDivContainer input");
    var i = 0;
    for (i = 0; i < languageCBL.length; i++)
    {
        var selectorInput = languageCBL[i];
        if (selectorInput.checked)
        {
            languageIds += selectorInput.id.substring(selectorInput.id.lastIndexOf('_') + 1) + ",";
        }
    }
    if (languageIds.length > 0)
        languageIds = languageIds.substring(0, (languageIds.length - 1));
    if (languageIds == "0")
        languageIds = "";
    var levelIds = $("#LevelSelectorDDL").val();
    if (levelIds == "0")
        levelIds = "";
    var modalityIds = $("#ModalitySelectorDDL").val();
    if (modalityIds == "0")
        modalityIds = "";
    var competenceIds = $("#CompetenceSelectorDDL").val();
    if (competenceIds == "0")
        competenceIds = "";
    var topicIds = $("#TopicSelectorDDL").val();
    if (topicIds == "0")
        topicIds = "";
    var subTopicIds = $("#SubTopicSelectorDDL").val();
    if (subTopicIds == "0")
        subTopicIds = "";
    var statusIds = "";
    var advancedCBL = $("#AdvancedSelectorDivContainer input");
    var i = 0;
    var mine = "0";
    var video = "0";
    for (i = 0; i < advancedCBL.length; i++)
    {
        var selectorInput = advancedCBL[i];
        if (selectorInput.checked)
        {
            if (selectorInput.id.lastIndexOf('StatusSelectorInput_') >= 0)
                statusIds += selectorInput.id.substring(selectorInput.id.lastIndexOf('_') + 1) + ",";
            else if (selectorInput.id == "MyLessonsSelectorInput")
                mine = "1";
            else if (selectorInput.id == "VideoSelectorInput")
                video = "1";
        }
    }
    if (statusIds.length > 0)
        statusIds = statusIds.substring(0, (statusIds.length - 1));
    var responseText = $.ajax(
    {
        type: "POST", url: "LessonJSON.aspx", data: "action=count&searchString=" + lessonSearchTB.val()
        + "&languageIds=" + languageIds
        + "&levelIds=" + levelIds
        + "&modalityIds=" + modalityIds
        + "&competenceIds=" + competenceIds
        + "&topicIds=" + topicIds
        + "&subTopicIds=" + subTopicIds
        + "&video=" + video
        + "&statusIds=" + statusIds
        + "&mine=" + mine,
        success: function (msg)
        {
            if (msg != "")
            {
                serverResponseObj = $.parseJSON(msg);
                if ((serverResponseObj) && (typeof serverResponseObj.count != "undefined"))
                {
                    $("#lessonSearchBtn").html("<span>Search " + serverResponseObj.count + " Lesson" + ((serverResponseObj.count == 1) ? "" : "s") + "</span>");
                }
            }
        }
    });
}

function generatePagerMarkup(currentPage, pageCount, pageSize)
{
    var numPagerLinks = 11;
    var startIndex = 1;
    var showFirstLastLinks = false;
    if (numPagerLinks < pageCount)
    {
        showFirstLastLinks = true;
        startIndex = Math.ceil(currentPage - (numPagerLinks / 2));
    }
    if (startIndex <= 0)
        startIndex = 1;
    var endIndex = startIndex + numPagerLinks - 1;
    if (endIndex > pageCount)
    {
        if (numPagerLinks < pageCount)
        {
            endIndex = pageCount;
            startIndex = pageCount - numPagerLinks;
        }
        else
        {
            endIndex = pageCount;
            startIndex = 1;
        }
    }

    var showLeftBuffer = (startIndex > 1);
    var showRightBuffer = (endIndex < pageCount);

    var searchResultsPager = $("#searchResultsPager");
    searchResultsPager.empty();

    if (pageCount > 1)
    {
        if (showFirstLastLinks)
        {
            var firstPageLink = $(document.createElement("a"));
            firstPageLink.attr("id", "firstPageLink");
            if (currentPage > 1)
            {
                firstPageLink.addClass("pagerFirstLink");
                firstPageLink.attr("href", "javascript:searchLessons(1);");
            }
            else
            {
                firstPageLink.addClass("pagerFirstLinkDisabled");
            }
            firstPageLink.html("&nbsp;");
            searchResultsPager.append(firstPageLink);
        }

        var previousPageLink = $(document.createElement("a"));
        previousPageLink.attr("id", "previousPageLink");
        if (currentPage > 1)
        {
            previousPageLink.addClass("pagerPreviousLink");
            previousPageLink.attr("href", "javascript:searchLessons(" + (currentPage - 1) + ");");
        }
        else
        {
            previousPageLink.addClass("pagerPreviousLinkDisabled");
        }
        previousPageLink.html("&nbsp;");
        searchResultsPager.append(previousPageLink);

        if (showLeftBuffer)
        {
            var leftBuffer = $(document.createElement("span"));
            leftBuffer.attr("id", "leftPagerBuffer");
            leftBuffer.addClass("pagerBuffer");
            leftBuffer.html("&hellip;");
            searchResultsPager.append(leftBuffer);
        }

        for (var i = startIndex; i <= endIndex; i++)
        {
            var index = i;

            var pagerLink = $(document.createElement("a"));
            pagerLink.attr("id", "pagerLink_" + i);
            if (currentPage == i)
            {
                pagerLink.addClass("pagerLinkCurrent");

                var pagerLinkCurrentSpan = $(document.createElement("span"));
                pagerLinkCurrentSpan.html(index);

                pagerLink.append(pagerLinkCurrentSpan);
            }
            else
            {
                pagerLink.addClass("pagerLink");
                pagerLink.attr("href", "javascript:searchLessons(" + index + ");");
                pagerLink.html(index);
            }
            searchResultsPager.append(pagerLink);
        }


        if (showRightBuffer)
        {
            var rightBuffer = $(document.createElement("span"));
            rightBuffer.attr("id", "rightPagerBuffer");
            rightBuffer.addClass("pagerBuffer");
            rightBuffer.html("&hellip;");
            searchResultsPager.append(rightBuffer);
        }

        var nextPageLink = $(document.createElement("a"));
        nextPageLink.attr("id", "nextPageLink");
        if (currentPage < pageCount)
        {
            nextPageLink.addClass("pagerNextLink");
            nextPageLink.attr("href", "javascript:searchLessons(" + (currentPage + 1) + ");");
        }
        else
        {
            nextPageLink.addClass("pagerNextLinkDisabled");
        }
        nextPageLink.html("&nbsp;");
        searchResultsPager.append(nextPageLink);

        if (showFirstLastLinks)
        {
            var lastPageLink = $(document.createElement("a"));
            lastPageLink.attr("id", "lastPageLink");
            if (currentPage < pageCount)
            {
                lastPageLink.addClass("pagerLastLink");
                lastPageLink.attr("href", "javascript:searchLessons(" + pageCount + ");");
            }
            else
            {
                lastPageLink.addClass("pagerLastLinkDisabled");
            }
            lastPageLink.html("&nbsp;");
            searchResultsPager.append(lastPageLink);
        }
    }
    searchResultsPager.show();
    return searchResultsPager;
}

function loadSubTopicSelector()
{
    var TopicSelectorDDL = $("#TopicSelectorDDL");
    var SubTopicSelectorDDL = $("#SubTopicSelectorDDL");
    SubTopicSelectorDDL.empty();

    var allSubTopicOption = $(document.createElement("option"));
    allSubTopicOption.val("0");
    allSubTopicOption.html("All");
    SubTopicSelectorDDL.append(allSubTopicOption);

    var responseText = $.ajax(
    {
        type: "POST", url: "SubTopicJSON.aspx", data: "action=list&topicId=" + TopicSelectorDDL.val(),
        success: function (msg)
        {
            if (msg != "")
            {
                serverResponseObj = $.parseJSON(msg);
                if (serverResponseObj)
                {
                    if (serverResponseObj.subTopics)
                    {
                        for (var i = 0; i < serverResponseObj.subTopics.length; i++)
                        {
                            var subTopicOption = $(document.createElement("option"));
                            subTopicOption.val(serverResponseObj.subTopics[i].id);
                            subTopicOption.html(serverResponseObj.subTopics[i].title);
                            SubTopicSelectorDDL.append(subTopicOption);
                        }
                    }
                }
            }
        }
    });

}
