/* Copyright 2006 poradna.net */ 

var Cursor = {
	getPosition: function (element) {
		if (typeof element.selectionStart != 'undefined' && typeof element.selectionEnd != 'undefined')
			return {begin: element.selectionStart, end: element.selectionEnd};
		if (document.selection && document.selection.createRange) {
			element.focus ();
			var selRange = document.selection.createRange ().duplicate ();
			// check if element contains selected text
			if (selRange.parentElement () != element)
				return {begin: element.value.length, end: element.value.length};
			var range = selRange.duplicate ();
			range.moveToElementText (element);

			var minInt = -6553600;
			var offset = range.moveStart ('character', minInt);

			var pos = {
				begin: offset - selRange.moveStart ('character', minInt),
				end: offset - selRange.moveEnd ('character', minInt)
			};

			var s = element.value.replace (/\r/g, '');
			s.substr (pos.begin, pos.end - pos.begin).replace (/\n/g, function () {++pos.end;});
			s.substr (0, pos.begin).replace (/\n/g, function () {++pos.begin; ++pos.end});

			return pos;
		}

		return {begin: element.value.length, end: element.value.length};
	},

	setPosition: function (element, begin, end) {
		if (typeof element.selectionStart != 'undefined' && typeof element.selectionEnd != 'undefined') {
			element.setSelectionRange (begin, end);
			element.focus ();
		} else if (document.selection && document.selection.createRange) {
			var s = element.value;
			s.substr (begin, end - begin).replace (/\r/g, function () {--end;})
			s.substr (0, begin).replace (/\r/g, function () {--begin; --end})
			var range = element.createTextRange ();
			range.move ('character', begin);
			range.moveEnd ('character', end - begin);
			range.select ();
		}
	},

	replaceSelection: function (element, text) {
		var pos = this.getPosition (element);
		var newpos = pos.begin + text.length;
		var s = element.value;

		element.value = s.substr (0, pos.begin) + text + s.substr (pos.end);
		this.setPosition (element, newpos, newpos);
	},

	encloseSelection: function (element, beforeText, afterText, defaultText) {
		var pos = this.getPosition (element);
		var newbeginpos = pos.begin + beforeText.length;
		var newendpos = pos.end + beforeText.length;
		var s = element.value;

		if (pos.begin == pos.end) {
			if (typeof defaultText != 'string') defaultText = '';
			s = s.substr (0, pos.begin) + beforeText + defaultText + afterText + element.value.substr (pos.end);
			newendpos += defaultText.length;
		} else {
			s = s.substr (0, pos.begin) + beforeText + s.substr (pos.begin, pos.end - pos.begin) + afterText +
			element.value.substr (pos.end);
		}

		element.value = s;

		this.setPosition (element, newbeginpos, newendpos);
	}
}

function formatting (before, after) {
	Cursor.encloseSelection (document.getElementById('IBody'), before, after);
}