function Tag(id, name)
{
	var m_id   = id;
	var n_name = name;

	this.id = function()
	{
		return m_id;
	}

	this.name = function()
	{
		return m_name;
	}
};

Tag.from_xml = function(xml)
{
	return new Tag(parseInt(xml.getAttribute('id')), xml.firstChild.nodeValue);
}

function show_add_tags(record_id)
{
	// Create new form/input areas
	var form = {
		element: 'form', id: 'newtagform', onsubmit: function() { return add_tags(); },
		children: [
			{ element: 'input', type: 'hidden', id: 'record_id', value: record_id },
			{ element: 'input', type: 'text', id: 'newtags' }
		]
	};

	// Replace 'add tags' link with new form
	var item = document.getElementById('newtag');
	item.parentNode.replaceChild(create_element(form), item);

	// Set focus on textbox
	document.getElementById('newtags').focus();
}

function add_tags()
{
	// Get contents of textbox
	var tags_box = document.getElementById('newtags');

	if (!tags_box)
		return;

	var tags = tags_box.value;

	// Get record ID
	var record_id_elem = document.getElementById('record_id');

	if (!record_id_elem)
		return;

	var record_id = record_id_elem.value;

	// Create new Ajax object
	var ajax = new pgengler.Ajax(base_url, display_tags);

	// Make Ajax request
	ajax.post({
		act: 'ajax_addtags',
		record: record_id,
		tags: tags
	});

	return false;
}

//////
// REMOVE TAGS
//////
function remove_tag(record_id, tag_id)
{
	var ajax = new pgengler.Ajax(base_url, display_tags);

	ajax.post({
		act: 'ajax_removetag',
		record: record_id,
		tag: tag_id
	});
}

///////
// POPULATE TAG LIST
///////
function display_tags(response)
{
	var root = response.getElementsByTagName('tags')[0];

	var record_id = root.getAttribute('id');

	// Get current tags list
	var list = document.getElementById('tags');

	// Create new list
	var new_list = {
		element: 'ul', id: 'tags', children: [ ]
	};

	var len = root.getElementsByTagName('tag').length;
	for (var i = 0; i < len; i++) {
		var tag = Tag.from_xml(root.getElementsByTagName('tag')[i]);

		new_list.children.push({
			element: 'li', text: tag.name(),
			children: [
				{ element: 'text', text: ' [ ' },
				{ element: 'a', href: '#', text: 'x', onclick: function() { remove_tag(record_id, tag.id()); return false; } },
				{ element: 'text', text: ' ]' }
			]
		});
	}

	new_list.children.push({
		element: 'li', id: 'newtag',
		children: [
			{ element: 'a', href: '#', text: 'Add tags', onclick: function() { show_add_tags(record_id); return false } }
		]
	});

	list.parentNode.replaceChild(create_element(new_list), list);
}

