var function_available;
var is_IE;
init();

function init() {
	var ua = navigator.userAgent;
	if (ua.indexOf('MSIE'))
		is_IE = 1 
	if (document.selection) {
		function_available = 1;
	}
	if (ua.indexOf('Gecko') >= 0 && ua.indexOf('Safari') < 0) {
		if (navigator.appName == "Netscape" && getNNVersionNumber() < 7.1 && getNNVersionNumber() > 5) {
			function_available = 0;
		} else {
			function_available = 1;
		}
	}
	if (ua.indexOf('Safari') >= 0) {
		function_available = 1;
	}
}

function markup (e, startv, endv, option) {
	if (!function_available) return;
	var str = get_range(e);
	if (!str) {
		if (is_IE)
			e.focus();
		set_range(e, startv + endv);
		return false;
	}
	if (option == 'inline') {
		// str = str.replace(/(\r?\n|\r)/ig, endv + "$1" + startv);
		str = str.replace(/(^[\+\-]*)/ig, "$1" + startv);
		str = str.replace(/((\r?\n|\r)[\+\-]*)/ig, endv + "$1" + startv);
		set_range(e, str + endv);
	} else if (option == 'insertbr') {
		set_range(e, startv + str.replace(/(\r?\n|\r)/ig, '<br />') + endv);
	} else {
		set_range(e, startv + str + endv);
	}
	return false;
}

function markup_html (e, v, c, empty) {
	var starttag = '<' + v;
	if (c) {
		if (empty) {
			starttag = starttag + ' class="' + c + '" />';
		} else {
			starttag = starttag + ' class="' + c + '">';
		}
	} else {
		if (empty) {
			starttag = starttag + ' />';
		} else {
			starttag = starttag + '>';
		}
	}
	if (empty) {
		markup(e, '', starttag, '');
	} else {
		markup(e, starttag, '</' + v + '>', '');
	}
	return false;
}

function markup_html_a (e, msg, defval) {
	if (!function_available) return;
	var value = prompt(msg, defval);
	var str = get_range(e);
	if (value) {
		startv = '<a href="' + value + '">';
		endv = '</a>';
		if (!str) {
			if (is_IE)
				e.focus();
			set_range(e, startv + endv);
		} else {
			markup(e, startv, endv, '');
		}
	}
	return false;
}

function getNNVersionNumber() {
	if (navigator.appName == "Netscape") {
		var appVer = parseFloat(navigator.appVersion);
		if (appVer < 5) {
			return appVer;
		} else {
			if (typeof navigator.vendorSub != "undefined") {
				return parseFloat(navigator.vendorSub);
			}
		}
	}
	return 0;
}

function get_range (e) {
	if (document.selection)
		return document.selection.createRange().text;
	else {
		var length = e.textLength;
		var start = e.selectionStart;
		var end = e.selectionEnd;
		if (end == 1 || end == 2) end = length;

		return e.value.substring(start, end).replace(/(.*)\n+$/,"$1");       
	}
}

function set_range (e, v) {
	if (document.selection)
		document.selection.createRange().text = v;
	else {
		var scrollTop=e.scrollTop;

		var length = e.textLength;
		var start = e.selectionStart;
		var end = e.selectionEnd;
		if (end == 1 || end == 2) end = length;
		e.value = e.value.substring(0, start) + v + e.value.substr(end, length);

		e.setSelectionRange(start, start + v.length);
		e.focus();
		e.scrollTop=scrollTop;
	}
}

