(function ($) {
    $.fn.treeviewinit = function () {
        return this.each(function () {
            treeviewId = '#' + $(this).attr('id');
            //      order of selectors is:
            //      intermediate entries (not top entries and not leaf entries)
            //      leaf entries
            //      top level entries
            $(treeviewId + " ul li:has(ul > li > span.sublevel), " + treeviewId + " ul li:not(:has(ul > li > span.sublevel)), " + treeviewId + " > li:has(>span.toplevel)").click(function (e) {
                e.stopPropagation();
                $(treeviewId).find('.selected').removeClass('selected');
                $(this).addClass("selected");
                $(treeviewId).find('li.highlight-toplevel').removeClass('highlight-toplevel');
                $(this).parents('li:has(>span.toplevel)').addClass('highlight-toplevel');
                if ($(this).hasClass("expandable") || $(this).hasClass("collapsable")) {
                    return false;  //prevent event propagation
                }
            });
        });
    };
})(jQuery);
