$(function() {
	// hide text area, create new input field in its place
	var tArea = $('#Question_topicList');
	if (tArea.length < 1) return;

	tArea.after('<input class="tag" type="text" /><button class="tag">+</button>');
	var tInput = tArea.next();
	var tButton = tInput.next();
	tArea.hide();
	tButton.after('<ol class="tagList">');
	var tagList = tButton.next();

	// update text area based on tag list
	var updateTextArea = function() {
		var str = '';

		tagList.find('li').each(function() {
			str += $(this).find('span').text()+"\n";
		});

		tArea.val($.trim(str));
	}

	// add existing tags from text area to tag list
	// done this way so we catch duplicates
	var removeTagFromList = function(tag) {
		tagList.find('li').each(function() {
			if ($(this).find('span').text() != tag) return;

			$(this).remove();
		});

		// update textarea
		updateTextArea();
	}


	// add a tag to the tag list
	var addTagToList = function(tag) {
		tag = $.trim(tag);
		if (!tag || tag == '') return;

		tagList.append('<li><span></span><button>x</button>');
		tagList.find('li:last-child span').text(tag);
		// remove tag
		tagList.find('li:last-child button').click(function(e) {
			removeTagFromList(tag);

			e.preventDefault();
			e.stopPropagation();

			return false;
		});

		// update textarea
		updateTextArea();
	}

	tButton.click(function(e) {
		addTagToList(tInput.val());
		tInput.val('');

		e.preventDefault();
		e.stopPropagation();

		return false;
	});


	// get existing tags from the text area
	var parts = tArea.val().split("\n");
	for (var i = 0, len = parts.length; i < len; i++) {
		var str = $.trim(parts[i]);
		if (str == '') continue;
		addTagToList(str);
	}


	// hook up autocomplete
	tInput.autocomplete(topicList);

	// result from autocomplete
	tInput.bind('result', function(e) {
		addTagToList(tInput.val());
		tInput.val('');
	});

	// If there's an unrecognized tag and enter is pressed, add the tag to the list
	tInput.bind('keypress', function(e) {
		if (e.keyCode != 13 || tInput.val() == '') {
			return true;
		}

		e.preventDefault();
		e.stopPropagation();

		addTagToList(tInput.val());
		tInput.val('');

		return false;
	});
});
