/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* Adds background colors to stripe table rows in the summary table (on the stage page). This is
 * necessary (instead of using css or the table striping provided by bootstrap) because the summary
 * table has hidden rows.
 *
 * An ID selector (rather than a class selector) is used to ensure this runs quickly even on pages
 * with thousands of task rows (ID selectors are much faster than class selectors). */
function stripeSummaryTable() {
    $("#task-summary-table").find("tr:not(:hidden)").each(function (index) {
       if (index % 2 == 1) {
         $(this).css("background-color", "#f9f9f9");
       } else {
         $(this).css("background-color", "#ffffff");
       }
    });
}

function toggleThreadStackTrace(threadId, forceAdd) {
    var stackTrace = $("#" + threadId + "_stacktrace")
    if (stackTrace.length == 0) {
        var stackTraceText = $('#' + threadId + "_td_stacktrace").html()
        var threadCell = $("#thread_" + threadId + "_tr")
        threadCell.after("<tr id=\"" + threadId +"_stacktrace\" class=\"accordion-body\"><td colspan=\"3\"><pre>" +
            stackTraceText +  "</pre></td></tr>")
    } else {
        if (!forceAdd) {
            stackTrace.remove()
        }
    }
}

function expandAllThreadStackTrace(toggleButton) {
    $('.accordion-heading').each(function() {
        //get thread ID
        if (!$(this).hasClass("hidden")) {
            var trId = $(this).attr('id').match(/thread_([0-9]+)_tr/m)[1]
            toggleThreadStackTrace(trId, true)
        }
    })
    if (toggleButton) {
        $('.expandbutton').toggleClass('hidden')
    }
}

function collapseAllThreadStackTrace(toggleButton) {
    $('.accordion-body').each(function() {
        $(this).remove()
    })
    if (toggleButton) {
        $('.expandbutton').toggleClass('hidden');
    }
}


// inOrOut - true: over, false: out
function onMouseOverAndOut(threadId) {
    $("#" + threadId + "_td_id").toggleClass("threaddump-td-mouseover");
    $("#" + threadId + "_td_name").toggleClass("threaddump-td-mouseover");
    $("#" + threadId + "_td_state").toggleClass("threaddump-td-mouseover");
}

function onSearchStringChange() {
    var searchString = $('#search').val().toLowerCase();
    //remove the stacktrace
    collapseAllThreadStackTrace(false)
    if (searchString.length == 0) {
        $('tr').each(function() {
            $(this).removeClass('hidden')
        })
    } else {
        $('tr').each(function(){
            if($(this).attr('id') && $(this).attr('id').match(/thread_[0-9]+_tr/) ) {
                var children = $(this).children()
                var found = false
                for (i = 0; i < children.length; i++) {
                    if (children.eq(i).text().toLowerCase().indexOf(searchString) >= 0) {
                        found = true
                    }
                }
                if (found) {
                    $(this).removeClass('hidden')
                } else {
                    $(this).addClass('hidden')
                }
            }
        });
    }
}
