// JavaScript Code genommen und angepasst von local/boostnavigation/amd/src
// User-Preferences erstmal entfernt
define(['jquery'], function($) {
    "use strict";
    var nodesArray = [];

    function toggleClickHandler(node, nodename) {
        node.click(function(e) {
            // Prevent that the browser opens the node's default action link (if existing).
            e.preventDefault();

            if(nodename == "mycourses") {
                // "MyCourses" angeklickt um diesen einzuklappen
                if (node.attr('data-collapse') == 0) {

                    // Alle Semester verstecken
                    nodesArray.forEach(function(semster){
                        $('.list-group-item[data-key=' + semster + ']').attr("data-collapse", "1");
                        $('.list-group-item[data-key=' + semster + ']').attr("data-hidden", "0");
                    });

                    // TODO User-Preferences setzen
                    //M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 1);

                    // If the parent node is currently collapsed.
                } else if (node.attr('data-collapse') == 1) {
                    // Alle Kurse verstecken
                    nodesArray.forEach(function(nodekey) {
                        // Set the hidden attribute to true for all elements which have the nodename as their data-parent-key attribute.
                        $('.list-group-item[data-parent-key=' + nodekey + ']').attr("data-hidden", "1");
                        $('.list-group-item[data-parent-key=' + nodekey + ']').attr("data-collapse", "1");
                    });

                    // Semester wieder sichtbar machen, Kurse weiterhin verstecken
                    nodesArray.forEach(function(semster){
                        $('.list-group-item[data-key=' + semster + ']').attr("data-collapse", "1");
                        $('.list-group-item[data-key=' + semster + ']').attr("data-hidden", "1");
                    });

                    //TODO: User-Preferences einbinden
                    //M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 0);
                }
            } else {
                // Ein Semester angeklickt um dieses auf oder zu zu klappen
                // If the parent node is currently expanded.
                if (node.attr('data-collapse') == 0) {
                    // Set the hidden attribute to true for all elements which have the nodename as their data-parent-key attribute.
                    $('.list-group-item[data-parent-key=' + nodename + ']').attr("data-hidden", "1");
                    // Change the collapse attribute of the node itself to true.
                    node.attr("data-collapse", "1");
                    // TODO User-Preferences setzen
                    //M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 1);

                    // If the parent node is currently collapsed.
                } else if (node.attr('data-collapse') == 1) {
                    // Set the hidden attribute to false for all elements which have the nodename as their data-parent-key attribute.
                    $('.list-group-item[data-parent-key=' + nodename + ']').attr("data-hidden", "0");

                    // Change the collapse attribute of the node itself to false.
                    node.attr("data-collapse", "0");

                    // TODO User-Preferences setzen
                    //M.util.set_user_preference('local_hsh_boostnavigation-collapse_' + nodename + '_node', 0);
                }
            }
        });
    }

    function initToggleNodes(nodename) {
        // Sonst wäre das Array mit "" initialisiert -> Fehler
        if(nodesArray[0] === "") {
            nodesArray = new Array();
        }

        // Search node to be collapsible.
        var node = $('.list-group-item[data-key="' + nodename + '"]');

        if(nodename === "mycourses") {
            node.attr("data-collapse", "0");
        } else {
            node.attr("data-collapse", "1");
        }

        if(nodename !== "" && nodename !== "mycourses") {
            node.addClass('list-group-item-action semesternode');
            node.attr("data-isexpandable", "1");

            var childNode = $('.list-group-item[data-parent-key=' + nodename + ']');
            childNode.attr("data-hidden", "1");
            childNode.attr("data-collapse", "1");
            if(!nodesArray.includes(nodename)) {
                nodesArray.push(nodename);
            }
        }

        // Add a click handler to this node.
        toggleClickHandler(node, nodename);
    }

    function openNode(nodename) {
        var node = $('.list-group-item[data-key="' + nodename + '"]');
        node.attr("data-hidden", "0");
        node.attr("data-collapse", "0");
        $('.list-group-item[data-parent-key=' + nodename + ']').attr("data-hidden", "0");
        $('.list-group-item[data-parent-key=' + nodename + ']').attr("data-collapse", "0");
    }


    return {
        init: function(params) {
            for (var i = 0, len = params.length; i < len; i++) {
                initToggleNodes(params[i]);
            }
        },
        openSemester: function (nodename) {
            openNode(nodename);
        }
    };
});