/* remove a specified item from an array */
function arrayRemove (ary, elem)
{
    for (var i in ary)
	{
        if (ary[i] == elem)
		{
            ary.splice(i, 1);
			return true;
		}
	}
    return false;
}


var nx = new Object();

nx.addNetwork =
function add_network()
{
	// internal representation
	var network = {name: '', displayName: '', servers: []};

	var idx = nx.networks.length;	
	nx.networks.push(network);

	// create the network element
	var net_div = document.createElement('div');
	dojo.addClass(net_div, 'network');
	if (nx.networks.length % 2 == 1)
		dojo.addClass(net_div, "odd");
	else
		dojo.addClass(net_div, 'even');

	net_div.network = network;
	
	// Create Network info inputs
	var heading = document.createElement('p');
	dojo.addClass(heading, 'heading');
	
	var nameLabel = document.createElement('label');
	nameLabel.setAttribute('for', 'network' + idx + '_name');
	nameLabel.innerHTML = 'Name';
	heading.appendChild(nameLabel);
	
	var nameInput = document.createElement('input');
	nameInput.type = 'text';
	nameInput.id = nameLabel.getAttribute('for');
	dojo.connect(nameInput, "onchange",
		function name_onkeypress()
		{
			network.name = nameInput.value;
			network.displayName = nameInput.value;
		}
	);
	heading.appendChild(nameInput);
	
	net_div.appendChild(heading);
	
	var servers_table = document.createElement('table');
	dojo.addClass(servers_table, 'server-list');
	var servers_caption = document.createElement('caption');
	servers_caption.innerHTML = 'Servers';
	servers_table.appendChild(servers_caption);
	  
	var servers_tbody = document.createElement('tbody');
	var servers_header = document.createElement('tr');
	dojo.addClass(servers_header, 'header');
	
	var hostnameTh = document.createElement('th');
	hostnameTh.innerHTML = 'Hostname';
	servers_header.appendChild(hostnameTh);
	var portTh = document.createElement('th');
	portTh.innerHTML = 'Port';
	servers_header.appendChild(portTh);
	var secureTh = document.createElement('th');
	secureTh.innerHTML = 'Secure?';
	servers_header.appendChild(secureTh);
	var removeTh = document.createElement('th');
	servers_header.appendChild(removeTh);

	servers_tbody.appendChild(servers_header);
	servers_table.appendChild(servers_tbody);
	net_div.appendChild(servers_table);
	
	var server_button_p = document.createElement('p');
	dojo.addClass(server_button_p, 'buttons');
	var server_button = document.createElement('input');
	server_button.type = 'button';
	server_button.value = 'Add Server';
	dojo.connect(server_button, 'onclick',
		function srvbtn_onclick()
		{
			nx.addServer(network.servers, servers_tbody);
		}
	)
	server_button_p.appendChild(server_button);
	net_div.appendChild(server_button_p);
	
	var remove_button_p = document.createElement('p');
	dojo.addClass(remove_button_p, 'buttons');
	var remove_button = document.createElement('input');
	remove_button.type = 'button';
	remove_button.value = 'Remove Network';
	dojo.connect(remove_button, 'onclick',
		function rembtn_onclick()
		{
			arrayRemove(nx.networks, network);
			nx.list.removeChild(net_div);
			
			// Update odd/even css
			var net_divs = dojo.query('.network', nx.list);
			net_divs.removeClass('odd').removeClass('even');
			
			dojo.query('.network::nth-child(odd)', nx.list).addClass('odd');
			dojo.query('.network::nth-child(even)', nx.list).addClass('even');
		}
	)
	remove_button_p.appendChild(remove_button);
	net_div.appendChild(remove_button_p);
		
	nx.list.appendChild(net_div);
}

nx.addServer =
function add_server (list, tbody)
{
	// internal representation
	var server = {hostname: '', port: 6667};
	
	var idx = list.length;
	list.push(server);
	
	var tr = document.createElement('tr');
	
	var hostnameCell = document.createElement('td');
	var hostnameInput = document.createElement('input');
	hostnameInput.type = 'text';
	dojo.connect(hostnameInput, "onchange",
		function hostname_onkeypress()
		{
			server.hostname = hostnameInput.value;
		}
	);
	hostnameCell.appendChild(hostnameInput);
	tr.appendChild(hostnameCell);
	
	var portCell = document.createElement('td');
	var portInput = document.createElement('input');
	portInput.type = 'text';
	portInput.value = 6667;
	dojo.addClass(portInput, "port");
	dojo.connect(portInput, "onchange",
		function port_onkeypress()
		{
			server.port = Number(portInput.value);
		}
	);
	portCell.appendChild(portInput);
	tr.appendChild(portCell);
	
	var secureCell = document.createElement('td');
	var secureInput = document.createElement('input');
	secureInput.type = 'checkbox';
	dojo.connect(secureInput, "onchange",
		function secure_onchange()
		{
			if (secureInput.checked)
				server.isSecure = true;
			else
				delete server.isSecure;
		}
	);
	secureCell.appendChild(secureInput);
	tr.appendChild(secureCell);
	
	var removeCell = document.createElement('td');
	var removeInput = document.createElement('input');
	removeInput.type = 'button';
	removeInput.value = 'Remove';
	dojo.connect(removeInput, "onclick",
		function remove_onclick()
		{
			arrayRemove(list, server);
			tbody.removeChild(tr);
		}
	);
	removeCell.appendChild(removeInput);
	tr.appendChild(removeCell);
	
	tbody.appendChild(tr);	
}
nx.generate =
function generate_file()
{
	var textarea = dojo.byId('networks-txt');
	var ts = new TextSerializer();
	ts.serialize(nx.networks);
	textarea.value = ts.getData();
}

function init()
{
	nx.list = dojo.byId('network-list');
	nx.networks = [];
	
	dojo.query('#add-network').connect("onclick", nx.addNetwork);
	dojo.query('#generate-file').connect("onclick", nx.generate);
}

dojo.addOnLoad(init);