﻿// JScript File
var Addon_Search_Initialized = false;
var Addon_Search_Tries = 0;
var Addon_Search_MaxTries = 20;
var Addon_Search_TriesInterVal = 500;

function Addon_Search_Activate() {
    if (!Addon_Search_Initialized) {
        var outp = "<br/><input type='text' name='searchvalue' id='searchvalue' value='' onkeydown='return Addon_Search_Search_OnKeyDown(event)' onkeyup='return Addon_Search_Search_OnKeyUp(event)'/>";
        outp += "<input id='searchButton' type='button' value='" + AddonSearchLangArr[0] + "'  onclick='Addon_Search_Search(document.getElementById(\"searchvalue\").value);' /><div id='searchProgress'></div>";
        outp += "<div id='AddonSlidesSearchResults'></div>";
        document.getElementById("cwc_tabContent_Search").innerHTML += outp;
        Addon_Search_Initialized = true;
    }
    document.getElementById("searchvalue").select();
    document.getElementById("searchvalue").focus();
}

function Addon_Search_DeActivate() {
    document.getElementById("searchvalue").blur();
}

function Addon_Search_Search_OnKeyDown(e) {
    var keynum;
    
    if (window.event) {
        keynum = e.keyCode; // IE
    } else if (e.which) {
        keynum = e.which;  // Netscape/Firefox/Opera
    }

    if (keynum == 13) {
        return false;
    }
    
    return true;
}

function Addon_Search_Search_OnKeyUp(e) {
    var keynum;

    if (window.event) {
        keynum = e.keyCode; // IE
    } else if (e.which) {
        keynum = e.which;  // Netscape/Firefox/Opera
    }

    if (keynum == 13) {
        Addon_Search_Search(document.getElementById("searchvalue").value);
        return false;
    }
    return true;
}

function Addon_Search_Search(aValue) {
    document.getElementById("searchButton").disabled = true;
    if (Addon_Search_Tries >= Addon_Search_MaxTries) {
        Addon_Search_SearchComplete("");
    } else {
        Addon_Search_Tries++;
        document.getElementById("searchProgress").innerHTML += ".";
        //GetStartTC();
        //var test = GetTimeFromCode(startTC);

        if (startTC == "") {
            setTimeout("Addon_Search_Search('" + aValue + "');", Addon_Search_TriesInterVal);
        } else {
            Addon_Search_DoSearch(aValue);
        }
    }
}

function Addon_Search_DoSearch(aValue) {
    if (!AddonSearchClientOnly) {
        PlayerService_QueueServerEvent("search", { "searchValue": aValue }, PlayerService_Priority.high, Addon_Search_SearchComplete);
    } else {
        var result = "myResult = new Array(";
        var first = true;

        // search slides
        if (typeof (AddonSlidesSearchText) != "undefined") {
        
            for (var i = 0; i < AddonSlidesSearchText.length; i++) {
                var text = AddonSlidesSearchText[i][2];
                var at = text.toLowerCase().indexOf(aValue.toLowerCase())

                if (at > -1) {

                    if (!first) {
                        result += ","; first = false;
                    }

                    if (text.length > 200) {
                        
                        if (at > 100) {
                            text = "..." + text.substring(at - 100);
                        }
                        
                        if (text.length > 200) {
                            text = text.substring(0, 200) + "...";
                        }
                    }
                    
                    result += "new Array('Slides'," + AddonSlidesSearchText[i][0] + ",'" + AddonSlidesSearchText[i][1] + "','" + text + "')";
                }
            }
        }
        // search speakers
        if (typeof (AddonSpeakersArr) != "undefined") {

            for (var i = 0; i < AddonSpeakersArr.length; i++) {

                var found = false;

                if (AddonSpeakersArr[i][1].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                if (AddonSpeakersArr[i][2].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                if (AddonSpeakersArr[i][3].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                if (AddonSpeakersArr[i][4].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                if (AddonSpeakersArr[i][5].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                
                if (found) {
                    
                    if (!first) {
                        result += ","; first = false;
                    }
                    
                    var title = AddonSpeakersArr[i][1] + " " + AddonSpeakersArr[i][2] + " " + AddonSpeakersArr[i][3];
                    var text = AddonSpeakersArr[i][4] + ", " + AddonSpeakersArr[i][5];

                    title = title.replace("'", "&apos;");
                    text = text.replace("'", "&apos;");
                    result += "new Array('Speakers'," + AddonSpeakersArr[i][0] + ",'" + title + "','" + text + "')";
                }
            }
        }
        
        // search dcnspeakers
        if (typeof (AddonDCNSpeakersArr) != "undefined") {
            
            for (var i = 0; i < AddonDCNSpeakersArr.length; i++) {
                var found = false;

                if (AddonDCNSpeakersArr[i][1].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                if (AddonDCNSpeakersArr[i][3].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                if (AddonDCNSpeakersArr[i][11].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }
                if (AddonDCNSpeakersArr[i][12].toLowerCase().indexOf(aValue.toLowerCase()) > -1) { found = true; }

                if (found) {
                    
                    if (!first) {
                        result += ","; first = false;
                    }

                    var title = AddonDCNSpeakersArr[i][1] + " " + AddonDCNSpeakersArr[i][3];
                    var text = AddonDCNSpeakersArr[i][12] + ", " + AddonDCNSpeakersArr[i][11];

                    title = title.replace("'", "&apos;");
                    text = text.replace("'", "&apos;");
                    result += "new Array('DcnSpeakers','" + AddonDCNSpeakersArr[i][4] + "," + AddonDCNSpeakersArr[i][3] + "','" + title + "','" + text + "')";
                }
            }
        }
        // search comments
        for (var i = 0; i < eventsArr.length; i++) {

            if (eventsArr[i][1] == "Comments" && eventsArr[i][2] == "COMMENT") {
            
                var text = eventsArr[i][3].replace("'", "&apos;");
                var at = text.toLowerCase().indexOf(aValue.toLowerCase());

                if (at > -1) {

                    if (!first) {
                        result += ","; first = false;
                    }

                    if (text.length > 200) {
                        
                        if (index > 100) {
                            text = "..." + text.Substring(index - 100);
                        }
                        
                        if (text.length > 200) {
                            text = text.substring(0, 200) + "...";
                        }
                    }

                    result += "new Array('Comments','" + eventsArr[i][0] + "','" + text + "')";
                }
            }
        }
        
        result += ");";
        var searchResultsValues = { "searchResults": result }
        var searchResults = { "Values": searchResultsValues }
        Addon_Search_SearchComplete(searchResults);
    }
}

function Addon_Search_SearchComplete(result){
    document.getElementById("searchButton").disabled = false;
    document.getElementById("searchProgress").innerHTML = "";
    Addon_Search_Tries = 0;
    var searchValue = document.getElementById("searchvalue").value.replace(/([\\|^$()[\]{}.*+?])/g, '\\$1');
    var outp = ""

    if (result.Values["searchResults"] == "") {
        outp = "<br/>Timeout in de zoekopdracht. probeert u het later opnieuw.<hr/>";
    } else {
        eval(result.Values["searchResults"].replace('&apos;','`'));
        var totalResults = myResult.length;
        var resultCount = 0;
            var previousIndexTitle = null;
            var searchIndex = "";
            outp = "<table class='searchResults'>";
            for (var j = 0; j < eventsArr.length; j++) {
                
            var searchResult = "";

            //create current index title for results
            var indexTitle = previousIndexTitle;
            if (eventsArr[j][1] == "Index" && eventsArr[j][2] == "INDEX") {
                var myArr = FindArrayInDoubleArray(eventsArr[j][3], AddonIndexArr)
                indexTitle = myArr[2];
                if (indexTitle != previousIndexTitle) {
                    searchIndex = "<tr><td class='searchIndexHeader' colspan='2'>" + indexTitle + "</td></tr>";
                    previousIndexTitle = indexTitle;
                }
            }

            //show slide search results for current index
            if (eventsArr[j][1] == "Slides" && eventsArr[j][2] == "SLIDE") {
                for (var i = 0; i < myResult.length; i++) {
                    if (myResult[i][0] == "Slides") {
                        var slideName = Addon_Slides_SlideBaseName;
                        var tmp = new String(myResult[i][1]);
                        for (var k = Addon_Slides_SlideLeadingZeros; k > tmp.length; k--) { slideName += "0"; }
                        slideName += tmp + ".jpg";

                        if (slideName == eventsArr[j][3]) {
                            searchResult += "<tr><td class='searchTime' onclick='JumpInFile(" + eventsArr[j][0] + ");Addon_Slides_ShowSlide(" + myResult[i][1] + ",true);theView.HidePopup(); theView.ShowTab(\"Slides\");' >" + GetItemTimeFromStart(eventsArr[j][0]) + "</td>";
                            searchResult += "<td class='searchResult'><table><tr>"
                            searchResult += "<td valign='top'><img src=\"" + ResourceHandlerUrl + "slides/jpg80x60/" + myResult[i][2] + ".jpg\" alt='' ></td>";
                            searchResult += "<td valign='top'><b>Slide " + myResult[i][1] + "</b><br/>" + myResult[i][3].toString().replace(new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + " </td>"
                            searchResult += "</tr></table></td></tr>"
                        }
                    }
                }
            }

            //show speakers search results for current index
            if (eventsArr[j][1] == "Speakers" && eventsArr[j][2] == "SPEAKER") {
                for (var i = 0; i < myResult.length; i++) {
                    if (myResult[i][0] == "Speakers" && myResult[i][1] == eventsArr[j][3]) {
                        searchResult += "<tr><td class='searchTime' onclick='JumpInFile(" + eventsArr[j][0] + ");'>" + GetItemTimeFromStart(eventsArr[j][0]) + "</td>";
                        searchResult += "<td class='searchResult'><b>" + myResult[i][2].toString().replace(
                        new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + "</b> <i>" +
                        myResult[i][3].toString().replace(new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + "</i></td></tr>";
                    }
                }
            }

            //show DCN speakers search results for current index
            if (eventsArr[j][1] == "DcnSpeakers") {
                for (var i = 0; i < myResult.length; i++) {
                    if (myResult[i][0] == "DcnSpeakers" && eventsArr[j][2].toUpperCase() == "SEATNUMBER" && parseInt(eventsArr[j][3]) == myResult[i][1].split(",")[0]) { 
                        searchResult += "<tr><td class='searchTime' onclick='JumpInFile(" + eventsArr[j][0] + ");'>" + GetItemTimeFromStart(eventsArr[j][0]) + "</td>";
                        searchResult += "<td class='searchResult'><b>" + myResult[i][2].toString().replace(
                        new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + "</b>";
                        searchResult += "<i>" + myResult[i][3].toString().replace(
                        new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + "</i></td></tr>";
                    }
                    if (myResult[i][0] == "Speakers" && myResult[i][1] == eventsArr[j][3]) {
                        searchResult += "<tr><td class='searchTime' onclick='JumpInFile(" + eventsArr[j][0] + ");'>" + GetItemTimeFromStart(eventsArr[j][0]) + "</td>";
                        searchResult += "<td class='searchResult'><b>" + myResult[i][2].toString().replace(
                        new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + "</b> <i>" +
                        myResult[i][3].toString().replace(new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + "</i></td></tr>";
                    }
                }
            }

            //show comment search results for current index
            if (eventsArr[j][1] == "Comments" && eventsArr[j][2] == "COMMENT") {
                for (var i = 0; i < myResult.length; i++) {
                    if (myResult[i][0] == "Comments" && myResult[i][1] == eventsArr[j][0]) {
                        searchResult += "<tr><td class='searchTime' onclick='JumpInFile(" + eventsArr[j][0] + ");'>" + GetItemTimeFromStart(eventsArr[j][0]) + "</td>";
                        searchResult += "<td>" + myResult[i][2].toString().replace(new RegExp(searchValue, "gi"), "<span class='highlightsearch'>" + searchValue + "</span>") + "";
                        searchResult += "</td></tr>";
                    }
                }
            }

            if (searchResult != "") {
                if (searchIndex != "") {
                    outp += searchIndex;
                    searchIndex = "";
                }
                outp += searchResult;
                resultCount++;
            }
        }
        outp += "</table>";

        if (resultCount == 1) {
            outp = "<br/>" + AddonSearchLangArr[1] + "<b>" + searchValue + "</b>" + AddonSearchLangArr[2] + "<b>" + resultCount + "</b>" + AddonSearchLangArr[4] + "<hr/>" + outp;
        } else {
        outp = "<br/>" + AddonSearchLangArr[1] + "<b>" + searchValue + "</b>" + AddonSearchLangArr[2] + "<b>" + resultCount + "</b>" + AddonSearchLangArr[3] + "<hr/>" + outp;
        }
    }
    document.getElementById("AddonSlidesSearchResults").innerHTML = outp;
    document.getElementById("searchvalue").focus();
}


function GetItemTimeFromStart(aTime) {
    var myTime = new Date(GetTimeFromCode(aTime) - GetTimeFromCode(startTC));
    return (myTime.getUTCHours() > 0 ? myTime.getUTCHours() + ":" : "") +
        (myTime.getUTCHours() > 0 && myTime.getUTCMinutes() < 10 ? "0" : "") + myTime.getUTCMinutes() + ":" +
        (myTime.getUTCSeconds() < 10 ? "0" : "") + myTime.getUTCSeconds();
}
