﻿var sort;

function sortBy(s) {

    var pane = $('.tab-pane.active'); 
    var list;
    if (pane.length)
        list = pane.find('.course_list');
    else
        list = $('.course_list');
    sort = s;

    var listItems = list.find('li.course').sort(function (a, b) {
        var x = ($(a).attr(sort) < $(b).attr(sort)) ? -1 : 1;
        return x;

    });
    var divItems = list.find('div.panel.panel-default').sort(function (a, b) {
        if (sort == "course_startDate") {
            var c = new Date($(a).attr(sort));
            var d = new Date($(b).attr(sort));

            if (c == "Invalid Date") {
                var x = -1;
            }
            else if (d == "Invalid Date") {
                var x = 1;
            }
            else {
                var x = (c < d) ? -1 : 1;
            }

            return x;
        }
        else if (sort == "course_lastDateAttem") {
            var c = new Date($(a).attr(sort));
            var d = new Date($(b).attr(sort));

            if (c == "Invalid Date") {
                var x = 1;
            }
            else if (d == "Invalid Date") {
                var x = -1;
            }
            else {
                var x = (c < d) ? 1 : -1;
            }

            return x;
        }
        else {
            var x = ($(a).attr(sort) < $(b).attr(sort)) ? -1 : 1;
            return x;
        }


        //var x = ($(a).attr(sort) < $(b).attr(sort)) ? -1 : 1;
        //return x;
    });
    console.log(listItems);
    console.log(divItems);
    list.find('li.course').remove();
    list.find('div.panel').remove();
    list.append(listItems);
    list.append(divItems);
}
var currentSort = 'dsc';
var currentSortKey = 'data-title';
$(document).ready(function () {
    // filter by enrollment date to start
    // todo: add a user setting in the profile for default sort/display
    var dateFrom = $('#dateFrom');
    var dateTo = $('#dateTo');
    //dateFrom.attr("placeholder", "mm/dd/yyyy");
    //dateTo.attr("placeholder", "mm/dd/yyyy");

    TC.initDateFields = function () {
        $('.tc.clear-dates').on('click', function () { TC.clearDateFilter() });
        var dateFields = $('input.date');
        var dateFormat = (typeof (userDateFormat) !== 'undefined') ? userDateFormat.toLowerCase().replace('yyyy', 'yy') : 'mm/dd/yy'
        
        //$(function () {
        //    $("#dateFrom").datepicker({ dateFormat: "mm/dd/yy" }).bind("change", function () {
        //        var dateVal = $(this).val();
        //        console.log(dateVal);
        //    })
        //})

        $.each(dateFields, function () {
            $(this).on('click', function (e) { e.stopPropagation(); });
            $(this).datepicker({
                dateFormat: dateFormat
            }).datepicker();
        });
        dateFrom.datepicker("destroy");
        dateTo.datepicker("destroy");

        $('#dateFrom').on('change', function () {
            if ($(this).val() !== '')
                //TC.filterDates();
                searchTranscripts('transcript_table', 'transcript_search');
        });
        $('#dateTo').on('change', function () {
            if ($(this).val() !== '')
                //TC.filterDates();
                searchTranscripts('transcript_table', 'transcript_search');
        })
    };

    TC.filterDates = function (onlyData = false) {
        // set start and end dates
        var startDate = $('#dateFrom');
        var endDate = $('#dateTo');
        var totalCredits = 0;
        var selectFilter = $("#selected-filters-activity");
        var arrayFilter = [];
        var dataOnly = [];

        // exist filter
        selectFilter.children().each(function () {
            arrayFilter.push($(this).attr("data-filter"));
        });

        // make sure there are values
        if (startDate.val() !== '' && endDate.val() !== '') {
            var startTicks = new Date(startDate.val()).getTime();
            var endTicks = new Date(endDate.val()).getTime();
            // make sure the start date is less than the end date
            if (startTicks <= endTicks) {
                console.log('filtering dates');
                var rows = $('.tab-pane.active table.sortable tbody tr');
                $.each(rows, function () {
                    //var tempDate = $(this).attr('data-completion-date');
                    //var formatDate = tempDate.split("-").reverse().join("-");
                    //var compDate = new Date(formatDate).getTime();
                    if (typeof (dateFormat) !== 'undefined' && dateFormat.toLowerCase() == 'yy/mm/dd') {
                        if ($(this).attr('data-completion-date').indexOf('-') >=0)
                            var d = $(this).attr('data-completion-date').split('-');
                        else
                            var d = $(this).attr('data-completion-date').split('/');
                        d = d[1] + '/' + d[2] + '/' + d[0];
                        var compDate = new Date(d).getTime();
                    } else {
                        var d = $(this).attr('data-utc-completion');                       
                        var compDate = new Date(d).getTime();
                    }
                   // var compDate = new Date($(this).attr('data-completion-date')).getTime();
                    var credit_providers = $(this).attr("data-credit-providers");
                    var credit_categories = $(this).attr("data-creditcategories");
                    var credit_providersMatch = true;
                    var credit_categoriesMatch = true;
                    var type = $.inArray($(this).attr('type'), arrayFilter) != -1;
                    var outcome = $.inArray($(this).attr('outcome'), arrayFilter) != -1;
                    var md = $.inArray($(this).attr('data-coursetype'), arrayFilter) != -1;

                    // Eric Test
                    var dateSearchFilter = $('#filter-description > span');
                    var searchArray = [];
                    var searchMatch = true;

                    for (var i = 0; i < dateSearchFilter.length; i++) {
                        var filter = dateSearchFilter[i]

                        if (!filter.classList.contains('hidden')) {
                            if (filter.classList.contains('filtersapplied-search')) {
                                searchArray.push(filter.textContent);
                            }
                        }
                    }
                    // Test End

                    if ($('#selected-filters-activity').children('[data-filter-type=credits]').length > 0) {
                        credit_categoriesMatch = false;
                        credit_providersMatch = false;

                        if (credit_categories) {
                            var array1 = credit_categories.split('|');
                            var array2 = [];
                            $('#selected-filters-activity').find('[data-filter-type="credits"]').each(function () {
                                array2.push($(this).attr("data-filter"));
                            });
                            for (let i = 0; i < array1.length; i++) {
                                for (let j = 0; j < array2.length; j++) {
                                    if (array1[i] === array2[j]) {
                                        credit_categoriesMatch = true;
                                    }
                                }
                            }
                        }

                        if (credit_providers) {
                            var array1 = credit_providers.split('|');
                            var array2 = [];
                            $('#selected-filters-activity').find('[data-filter-type="credits"]').each(function () {
                                array2.push($(this).attr("data-filter"));
                            });
                            for (let i = 0; i < array1.length; i++) {
                                for (let j = 0; j < array2.length; j++) {
                                    if (array1[i] === array2[j]) {
                                        credit_providersMatch = true;
                                    }
                                }
                            }
                        }
                    }

                    if (compDate >= startTicks && compDate <= endTicks) {
                        if (!$(this).hasClass('hidden')) {
                            var credit = $(this).children('td.credits-awarded').text() * 1;
                            totalCredits += credit;
                            if ((type === true || ($('#selected-filters .filter[data-filter-type="type"]').length < 1)) && credit_categoriesMatch && credit_providersMatch && (outcome === true || ($('#selected-filters .filter[data-filter-type="outcome"]').length < 1)) && (md === true || ($('#selected-filters .filter[data-filter-type="md"]').length < 1))) {
                                $(this).attr("show", "show");
                                dataOnly.push(this);
                            }
                        }
                    } else {
                        $(this).hide();
                        $(this).attr("show", "hide");
                    }
                });

                updateFilterDescription('daterange', startDate.val(), endDate.val());
                //$('th.total-credits.credits-awarded').text(parseFloat(totalCredits).toFixed(2));
            } else {
                // alert('start date must be before end date');
            }

        }

        if (onlyData) {
            return dataOnly;
        }
    };
    TC.clearDateFilter = function () {
        var startDate = $('#dateFrom').val('');
        var endDate = $('#dateTo').val('');

        var rows = $('table.sortable tbody tr');
        $.each(rows, function () {
            if (!$(this).hasClass('hidden')) {
                $(this).show();
            }
        });

        //updateFilterDescription('search', '', '', '', "",null);
        updateFilterDescription('daterange', '', '', '', "", null);
    }

    TC.initDateFields();
    // trying to not hide the drop down when you mouse into the datepicker

    $('#MyTranscripts a[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
        var target = $(e.target).attr("href") // activated tab
        TC.sortBy(currentSortKey, null);
        TC.filterDates();
    });

    TC.sortBy = function (sortkey, el) {
        sortkey = (sortkey === 'data-creditcategories') ? 'data-credit-category-name' : sortkey;
        if (el !== null) {
            var sortitem = $(el);
            currentSortKey = sortkey;
            if (sortitem.hasClass('sort')) {
                currentSort = (currentSort === 'asc') ? 'dsc' : 'asc';
            }
            $('.dropdown-menu.course-sort span').removeClass('sort');
            sortitem.addClass('sort');
        }
        console.log('new sort');
        if ($('.tab-pane').length > 0) {
            var courseList = $('.tab-pane.active table.sortable tbody');
            var items = $('.tab-pane.active table.sortable tbody tr[' + sortkey + ']');
        } else {
            var courseList = $('table.sortable tbody');
            var items = $('*[' + sortkey + ']');
        }

        // courseList.html('');
        //console.log(items);
        items.sort(function (a, b) {
            // convert to integers from strings
            // added trim as some titles have spaces before this messess up the sort
            if (sortkey.indexOf('date') < 0) {
                if (sortkey === 'data-credits') {
                    a = $(a).find('.credits-awarded').text().replace('Credits Issued', '').replace('Credits Awarded', '');
                    b = $(b).find('.credits-awarded').text().replace('Credits Issued', '').replace('Credits Awarded', '');
                    a = a * 1;
                    b = b * 1;
                } else {
                    a = $(a).attr(sortkey).trim();
                    b = $(b).attr(sortkey).trim();
                }
            } else {
                a = new Date.parse($(a).attr(sortkey).split(' ')[0]).getTime();
                b = new Date.parse($(b).attr(sortkey).split(' ')[0]).getTime();
            }

            // compare
            if (sortkey === 'data-credits') {
                return (currentSort === 'asc') ? a - b : b - a;
            } else {
                if (a > b) {
                    return (currentSort === 'asc') ? 1 : -1;
                } else if (a < b) {
                    return (currentSort === 'asc') ? -1 : 1;
                } else {
                    return 0;
                }
            }
        }).appendTo(courseList);

        //courseList.append(items);
        console.log('sorted');

        console.log(currentSort);
        //console.log(items);
    };
    //mylearningactivities page ticket number 48228
    TC.ActivitiesSortBy = function (sortkey, el) {
        sortkey = (sortkey === 'data-creditcategories') ? 'data-credit-category-name' : sortkey;
        if (el !== null) {
            var sortitem = $(el);
            currentSortKey = sortkey;
            if (sortitem.hasClass('sort')) {
                currentSort = (currentSort === 'asc') ? 'dsc' : 'asc';
            }
            $('.dropdown-menu.course-sort span').removeClass('sort');
            sortitem.addClass('sort');
        }
        console.log('new sort');
        if ($('#LearningActivities').length > 0) {
            //var courseList = $('.tab-pane.active table.sortable tbody');
            var courseList = $('table.filterable.sortable');
            courseList = courseList.find('tbody');
            //var items = $('.tab-pane.active table.sortable tbody tr[' + sortkey + ']');
            var items = $('table.filterable.sortable ');
            items = items.find('tbody tr[' + sortkey + ']');
        } else {
            //var courseList = $('table.sortable tbody');
            var courseList = $('table.sortable tbody');
            var items = $('*[' + sortkey + ']');
        }

        // courseList.html('');
        //console.log(items);
        var m = items;

        var list = items.sort(function (a, b) {

            // convert to integers from strings
            // added trim as some titles have spaces before this messess up the sort
            if (sortkey.indexOf('date') < 0) {
                if (sortkey === 'data-credits') {
                    a = $(a).find('.credits-awarded').text().replace('Credits Issued', '');
                    b = $(b).find('.credits-awarded').text().replace('Credits Issued', '');
                    a = a * 1;
                    b = b * 1;
                } else {
                    a = $(a).attr(sortkey).trim();
                    b = $(b).attr(sortkey).trim();
                }
            } else {
                if ($(a).attr(sortkey).split(' ')[0] != "")
                    a = new Date.parse($(a).attr(sortkey).split(' ')[0]).getTime();
                else
                    a = -1;
                if ($(b).attr(sortkey).split(' ')[0] != "")
                    b = new Date.parse($(b).attr(sortkey).split(' ')[0]).getTime();
                else
                    b = 1
            }

            // compare
            if (sortkey === 'data-credits') {
                return (currentSort === 'asc') ? a - b : b - a;
            } else {
                if (a > b) {
                    return (currentSort === 'asc') ? 1 : -1;
                } else if (a < b) {
                    return (currentSort === 'asc') ? -1 : 1;
                } else {
                    return 0;
                }
            }
        });
        courseList.append(list);
        //courseList.append(items);
        console.log('sorted');

        console.log(currentSort);
        //console.log(items);
    };






    if (document.location.href.indexOf('MyLearningActi') > 0) {
        currentSort = 'dsc';
        //TC.sortBy('data-date-enrolled', null);

    }
})

//return a>b ? -1 : a<b ? 1 : 0;