var computers, nodes, groups;

function set_class(id, name)
{
	var element;

	element = document.getElementById(id);
	element.className = name;
}

function ndb_init(computer_count, group_count, node_count)
{
	var i;

	computers = new Array();
	for (i = 1; i <= computer_count; i++) {
        add_computer(i);
    }

    groups = new Array();
	for (i = 1; i <= group_count; i++) {
        add_group(i);
    }

    nodes = new Array();
	for (i = 1; i <= node_count; i++) {
        add_node(i);
    }
}

function add_computer(id)
{
	computers[id]          = new Array();
	computers[id]['id']    = id;
	computers[id]['off']   = false;
	computers[id]['nodes'] = new Array();
}

function toggle_computer(id, state)
{
	computers[id]['off'] = state;
}

function add_group(id)
{
	groups[id]          = new Array();
	groups[id]['id']    = id;
	groups[id]['nodes'] = new Array();
}

function add_node(id)
{
	nodes[id]             = new Array();
	nodes[id]['id']       = id;
}

function add_node_to_computer(id, computer)
{
	nodes[id]['computer'] = computer;
	computers[computer]['nodes'][id] = id;
}

function add_node_to_group(id, group)
{
    nodes[id]['group']    = group;
	groups[group]['nodes'][id] = id;
}

/* highlight computer */
function highlight_computer(id, flag) {
	var name, chk_name, chk, css_class, element;

	flag |= computers[id]['off'];

	set_class('computer'+id, flag ?  'computer_mark' : 'computer');

    for (var node in computers[id]['nodes']) {
	  highlight_node(node, flag);
    }
}

/* highlight node in both computer and node group */
function highlight_node(id, flag) {
    var style;

	flag |= computers[nodes[id]['computer']]['off'];

	style = flag ? 'node_mark' : 'node';

	set_class( 'compnode'+id, style);
	set_class('groupnode'+id, style); 
}

/* highlight group */
function highlight_group(id, flag) {
	set_class('group'+id, flag ? 'group_mark' : 'group');

    for (var node in groups[id]['nodes']) {
	  highlight_node(node, flag);
    }
}
