
function ajax_add_tag_url( type, id, tag )
{
	return unique_get('/ajax/add-tag/?type=' + type + '&id=' + id + '&tag=' + encodeURIComponent(tag.toLowerCase()));
}

function ajax_remove_tag_url( type, id, tag )
{
	return unique_get('/ajax/remove-tag/?type=' + type + '&id=' + id + '&tag=' + encodeURIComponent(tag.toLowerCase()));
}

function create_tag_element( type, id, tag, action, id_prefix )
{
	var new_el = null;
	if( action == 'remove_tag' )
	{
		new_el = document.createElement('div');
		new_el.className = 'tag';
		var new_span = document.createElement('span');
		new_span.innerHTML = unescape(tag);
		var new_a = document.createElement('a');
		new_a.href = '#';
		new_a.className = 'remove';
		new_a.onclick = function() { if( confirm("Remove '" + unescape(tag.toLowerCase()) + "'?") ) { eval(action + '(' + type + ', ' + id + ", '" + tag + "')"); return false; } };
		new_a.innerHTML = 'remove';
		new_el.appendChild(new_span);
		new_el.appendChild(new_a);
	}
	else
	{
		new_el = document.createElement('span');
		new_el.innerHTML = '<a href="#" onclick="' + action + '(' + type + ', ' + id + ", '" + tag.toLowerCase() + "'); return false;" + '">' + unescape(tag.toLowerCase()) + '</a>'
	}

	new_el.setAttribute('id', id_prefix + tag.toLowerCase());

	return new_el;
}

function add_suggested_tag( type, id, tag, your_or_this)
{
	var url = ajax_add_tag_url(type, id, tag);
	var req = create_XMLHttpRequest();
	req.open('GET', url, true);
	req.onreadystatechange = function() {
		if( req.readyState == 4 && req.status == 200 )
		{
			document.getElementById('suggestedTag_' + tag.toLowerCase()).style.display = 'none';
			var my_tags_el = document.getElementById('myTags');
			my_tags_el.appendChild(document.createTextNode(' '));
			my_tags_el.appendChild(create_tag_element(type, id, tag, 'remove_tag', 'myTag_'));
			document.getElementById('noTagsMessage').innerHTML = 'The following tags have been added to ' + your_or_this + ' advice:';
			var tag_list = getElementsByClassName(my_tags_el, 'div', 'tag');
			cycle_class_names(tag_list, ['left odd', 'right odd', 'left even', 'right even']);
		}
	}
	req.send(null);
}

function add_custom_tag( type, id, tag, your_or_this )
{
	tag = unescape(tag);
	if( tag.match(/^\s*$/) )
	{
		document.getElementById('empty_tag_error').style.display = 'block';
	}
	else if( tag.match(/\s*,\s*/) )
	{
		var tag_list = tag.split(/\s*,\s*/);
		for( i in tag_list )
		{
			if( !tag_list[i].match(/^\s*$/) )
			{
				add_custom_tag(type, id, escape(tag_list[i]), your_or_this);
			}
		}
	}
	else
	{
		document.getElementById('empty_tag_error').style.display = 'none';

		var url = ajax_add_tag_url(type, id, tag);
		var req = create_XMLHttpRequest();
		req.open('GET', url, true);
		req.onreadystatechange = function() {
			if( req.readyState == 4 && req.status == 200 )
			{
				if( document.getElementById('myTag_' + escape(tag.toLowerCase())) == undefined )
				{
					var my_tags_el = document.getElementById('myTags');
					my_tags_el.appendChild(document.createTextNode(' '));
					my_tags_el.appendChild(create_tag_element(type, id, escape(tag), 'remove_tag', 'myTag_'));
					document.getElementById('noTagsMessage').innerHTML = 'The following tags have been added to ' + your_or_this + ' advice:';
					var tag_list = getElementsByClassName(my_tags_el, 'div', 'tag');
					cycle_class_names(tag_list, ['left odd', 'right odd', 'left even', 'right even']);
					var suggested_tag_el = document.getElementById('suggestedTag_' + tag.toLowerCase());
					if( suggested_tag_el != undefined )
					{
						suggested_tag_el.style.display = 'none';
					}
				}
			}
		}
		req.send(null);
	}
}

function remove_tag( type, id, tag, your_or_this )
{
	var url = ajax_remove_tag_url(type, id, unescape(tag));
	var req = create_XMLHttpRequest();
	req.open('GET', url, true);
	req.onreadystatechange = function() {
		if( req.readyState == 4 && req.status == 200 )
		{
			var tag_el = document.getElementById('myTag_' + tag.toLowerCase());
			tag_el.parentNode.removeChild(tag_el);
			/*
			tag_el.innerHTML = '&nbsp;';
			tag_el.className = tag_el.className.replace(/odd|even/, '');
			tag_el.setAttribute('id', '');
			var suggested_tags_el = document.getElementById('suggestedTags');
			suggested_tags_el.appendChild(document.createTextNode(' '));
			suggested_tags_el.appendChild(create_tag_element(type, id, tag, 'add_suggested_tag', 'suggestedTag_'));
			*/

			var suggested_tag_el = document.getElementById('suggestedTag_' + tag.toLowerCase());
			if( suggested_tag_el )
			{
				suggested_tag_el.style.display = 'inline';
			}

			var my_tags_el = document.getElementById('myTags');
			var tag_list = getElementsByClassName(my_tags_el, 'div', 'tag');
			if( tag_list.length == 0 )
			{
				document.getElementById('noTagsMessage').innerHTML = 'You have not added any tags to ' + your_or_this + ' advice yet.';
			}

			cycle_class_names(tag_list, ['left odd', 'right odd', 'left even', 'right even']);
		}
	}
	req.send(null);
}

function add_all_suggested( type, id )
{
	var total_added = 0;
	var node_list = getElementsByClassName(document.getElementById('suggestedTags'), 'span', 'tag');
	for( i in node_list )
	{
		var node = node_list[i];
		if ( node.style.display != 'none' )
		{
			add_suggested_tag(type, id, escape(node.firstChild.innerHTML), 'the');
			total_added++;
		}
	}
	if ( total_added == 0 )
	{
		alert('You have already added all the tags');
	}
}
