
var GNODE = new GlobalNode();

var AUTO_MODE = true;

function add_node(n)
{
    for (var i = 0; i < n; ++i) {
	GNODE.add();
    }
    update_node_num(GNODE.count());
}

function remove_node(n)
{
    for (var i = 0; i < n; ++i) {
	GNODE.remove();
    }
    update_node_num(GNODE.count());
}

var g_clock = 0;
function node_step()
{
    var i;
    
    GNODE.step();
    
    var canvas = document.getElementById('frame');
    var ctx = canvas.getContext('2d');
    
    ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
    ctx.fillStyle = rgb(0, 0, 0);
    ctx.beginPath();
    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);
    ctx.fill();
    
    GNODE.draw(ctx);
    ++g_clock;
    
    if (AUTO_MODE) {
	if (GNODE.count() < 200) {
	    if (g_clock % 300 == 0) {
		if (200 - GNODE.count() < 20) {
		add_node(200 - GNODE.count());
		} else {
		    add_node(20);
		}
	    } else if (g_clock % 500 == 0) {
		remove_node(5);
	    }
	}
    }
    update_step_num();
}


function node_loop()
{
    var auto_mode = document.getElementById('auto_true');
    if (auto_mode.checked) {
	AUTO_MODE = true;
    } else {
	AUTO_MODE = false;
    }

    add_node(20);
    setInterval('node_step()', 50);
}

function changeMode(auto)
{
    if (auto) {
	AUTO_MODE = true;
    } else {
    	AUTO_MODE = false;
    }
}

function clear_node()
{
    GNODE.clear();
    g_clock = 0;
    update_node_num(GNODE.count());
}

function update_node_num(count)
{
    var node_field = document.getElementById('nodes');
    node_field.innerHTML= count;
}

function update_step_num()
{
    var step_field = document.getElementById('steps');
    step_field.innerHTML= g_clock;
}

function ui_add_node()
{
    var num_field = document.getElementById('add_node_num');
    var n = 0 + num_field.value;
    
    if (n) {
	add_node(n);
    }
}

function ui_remove_node()
{
    var num_field = document.getElementById('remove_node_num');
    var n = 0 + num_field.value;
    
    if (n) {
	remove_node(n);
    }
}
