/*
----------------------------------------------------------------------------
Name: jAccordion
Version: 0.1
Description: Simple nested accordion menu (jQuery plugin)
License: http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt
Author: Sherdog (Mike Sheridan)
----------------------------------------------------------------------------
*/

// IE fix
if (!Array.indexOf) {
    Array.prototype.indexOf = function(obj) {
        for (var i = 0; i < this.length; i++) {
            if (this[i] == obj) {
                return i;
            }
        }
        return -1;
    }
}
// $.jAccordion class
jQuery.jAccordion = {
    MenuDivId: null,
    MenuClassName: 'Menu',
    MenuItemClassName: 'MenuItem',
    SelectedClassName: 'sidenav_expanded',
    arrOpenNodes: new Array(),
    collapseSubMenus: function(id) {
        $('#' + id + ' ul').css({ 'display': 'none' });
        $('#' + id + '>ul').css({ 'display': 'block' });
    },
    expand: function(id) {
        $('#' + id).parent("li").find(">ul").slideDown("fast").css({ 'display': 'block' });
        //this is where we set the arrow to be expanded and all other's to collapsed
   		$('#' + id).parent('li').removeClass('sidenav-collapsed').addClass("sidenav-expanded");
       // alert('expanding ' + id);

    },
    collapse: function(id) {
        $('#' + id).parent("li").find(">ul").slideUp("fast", function(){ $(this).css({'display': 'none'})});
        //alert('collapsing ' + id)
        $('#' + id).parent('li').removeClass('sidenav-expanded').addClass("sidenav-collapsed");
    },
    removeFromOpenNodesArray: function(nodeId) {
        this.arrOpenNodes.splice(this.arrOpenNodes.indexOf(nodeId), 1);
    },
    collapseNonParentNodes: function(nodeId) {
        var ArrayNodeIsParentOfNode = false;
        var arrToRemove = new Array();
        for (var x = 0; x < this.arrOpenNodes.length; x++) {
            ArrayNodeIsParentOfNode = $('#' + nodeId).parents().index($('#' + this.arrOpenNodes[x]).parent("li")) >= 0;
            if (!ArrayNodeIsParentOfNode) {
                this.collapse(this.arrOpenNodes[x]);
                arrToRemove.push(this.arrOpenNodes[x]);
            }
        }
        for (var i = 0; i < arrToRemove.length; i++) {
            this.removeFromOpenNodesArray(arrToRemove[i]);
        }
    },
    expandMenuItem: function(MenuItemId) {
        $("#" + MenuItemId).parent("li").parent("ul").slideDown("fast").css({ 'display': 'block' });
    },
    expandSelectedNode: function() {
        var selectedNode = $('.' + this.SelectedClassName);
       // alert(selectedNode.attr("id"));
        if (selectedNode.length > 0) {
        	
            var selectedMenuItemId = selectedNode.attr("id");
            this.expandMenuItem(selectedMenuItemId);
          
            selectedNode.parents('ul').slideDown("fast").css({ 'display': 'block' });
            var t = this;
            jQuery.each(selectedNode.parents('li'), function() {
                var id = $(this).find('span:first').not('.' + t.MenuItemClassName).attr('id');
                if (typeof id != "undefined") {
                    t.arrOpenNodes.push(id);
                }
            });
        }
    },
    setSelectedNode: function(id) {
        $('.' + this.SelectedClassName).removeClass(this.SelectedClassName);
        $('#' + id).addClass(this.SelectedClassName);
        this.collapseSubMenus(this.MenuDivId);
       // $('#' + id).addClass('sidenav-expanded');
        this.arrOpenNodes = new Array();
        this.expandSelectedNode();
    },
    menuClick: function(clickedNode) {
        var thisNode = clickedNode;
        
        var thisNodeId = thisNode.attr("id");
        if (this.arrOpenNodes.length == 0) {
        
            this.expand(thisNodeId);
            this.arrOpenNodes.push(thisNodeId);
			
        }
        else if (this.arrOpenNodes.indexOf(thisNodeId) > -1) {
            this.collapse(thisNodeId);
            this.removeFromOpenNodesArray(thisNodeId);
        }
        else if (this.arrOpenNodes.indexOf(thisNodeId) == -1) {
            this.collapseNonParentNodes(thisNodeId);
            this.expand(thisNodeId);
            this.arrOpenNodes.push(thisNodeId);
        }
    },
    init: function(id, selectedId) {
        this.MenuDivId = id;
        var t = this;
        
        $('.Menu').parent('li').addClass("sidenav-collapsed");
       // alert('selectedId'+ selectedId)
        $('#' + selectedId).parents('li').removeClass('sidenav-collapsed').addClass('sidenav-expanded');
        
        
        $('#' + id + ' .' + this.MenuClassName).click(function() {
            t.menuClick($(this));
        });
        this.collapseSubMenus(id);
        if (selectedId != null) {
            this.setSelectedNode(selectedId);
        }
        else {
            this.expandSelectedNode();
        }
    }
};
// .jAccordion() function
jQuery.fn.jAccordion = function(selectedId, menuClassName, menuItemClassName, selectedClassName) {
    var objJAccordion = $.jAccordion;
    if (menuClassName != null) {
        objJAccordion.MenuClassName = menuClassName;
    }
    if (menuItemClassName != null) {
        objJAccordion.MenuItemClassName = menuItemClassName;
    }
    if (selectedClassName != null) {
        objJAccordion.SelectedClassName = selectedClassName;
    }
    var id = $(this).attr('id');
    objJAccordion.init(id, selectedId);
}
