// Wordt ook gebruikt door module frm

function emoteInsert(elem, emote) {
	insertAtCaret(XPS_elem(elem), emote);
}

// http://parentnode.org/javascript/working-with-the-cursor-position/
function insertAtCaret(obj, text) {
	if (document.selection) {
		obj.focus();

		var orig = obj.value.replace(/\r\n/g, "\n");
		var range = document.selection.createRange();

		if (range.parentElement() != obj) {
			return false;
		}

		range.text = text;

		var actual = tmp = obj.value.replace(/\r\n/g, "\n");

		for (var diff = 0; diff < orig.length; diff++) {
			if (orig.charAt(diff) != actual.charAt(diff)) break;
		}

		for (var index = 0, start = 0;
			tmp.match(text)
				&& (tmp = tmp.replace(text, ""))
				&& index <= diff; index = start + text.length) {
			start = actual.indexOf(text, index);
		}
	} else if (obj.selectionStart) {
		var start = obj.selectionStart;
		var end   = obj.selectionEnd;

		obj.value = obj.value.substr(0, start)
			+ text
			+ obj.value.substr(end, obj.value.length);
	}

	if (start != null) {
		setCaretTo(obj, start + text.length);
	} else {
		obj.value += text;
	}
}
			
function setCaretTo(obj, pos) {
	if (obj.createTextRange) {
		var range = obj.createTextRange();

		range.move('character', pos);
		range.select();
	} else if (obj.selectionStart) {
		obj.focus();
		obj.setSelectionRange(pos, pos);
	}
}
