// Find cursor position
// (Thnx http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130)
function storeCaret(textEl) {
	if(textEl.createTextRange){
		textEl.caretPos = document.selection.createRange().duplicate();
	}
}



// Set Inner HTML (Thnx SMF)
function setInnerHTML(obj,exe){
	if(typeof(obj.innerHTML) != 'undefined'){
		obj.innerHTML = exe;
	}else{
		var range = document.createRange();
		range.selectNodeContents(element);
		range.deleteContents();
		obj.appendChild(range.createContextualFragment(exe));
	}
}


// Check Length (Thnx SMF)
function CheckLength(obj,counter,maxLength){
	var counter = document.getElementById(counter);
	var old = "";
	var inp = obj.value;

	if(old != inp){
		old = inp;
		if(inp.replace(/\r/,"").length > maxLength){
			obj.value = inp.replace(/\r/,"").substring(0,maxLength);
		}
		inp = obj.value.replace(/\r/,"");
	}
	setInnerHTML(counter,maxLength-inp.length);
}

// Replaces the currently selected text with the passed text. (SMF)
function replaceText(text,textarea){
	// Attempt to create a text range (IE).
	if(typeof(textarea.caretPos) != "undefined" && textarea.createTextRange){
		var caretPos = textarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
		caretPos.select();
	}else if(typeof(textarea.selectionStart) != "undefined"){ // Mozilla text range replace.
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text + end;
		if(textarea.setSelectionRange){
			textarea.focus();
			textarea.setSelectionRange(begin.length + text.length, begin.length + text.length);
		}
		textarea.scrollTop = scrollPos;
	}else{ // Just put it on the end.
		textarea.value += text;
		textarea.focus(textarea.value.length - 1);
	}
}

// Surrounds the selected text with text1 and text2. (SMF)
function surroundText(text1,text2,textarea){
	// Can a text range be created?
	if(typeof(textarea.caretPos) != "undefined" && textarea.createTextRange){
		var caretPos = textarea.caretPos, temp_length = caretPos.text.length;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text1 + caretPos.text + text2 + ' ' : text1 + caretPos.text + text2;
		if (temp_length == 0){
			caretPos.moveStart("character", -text2.length);
			caretPos.moveEnd("character", -text2.length);
			caretPos.select();
		}else{
			textarea.focus(caretPos);
		}
	}else if (typeof(textarea.selectionStart) != "undefined"){ // Mozilla text range wrap.
		var begin = textarea.value.substr(0, textarea.selectionStart);
		var selection = textarea.value.substr(textarea.selectionStart, textarea.selectionEnd - textarea.selectionStart);
		var end = textarea.value.substr(textarea.selectionEnd);
		var newCursorPos = textarea.selectionStart;
		var scrollPos = textarea.scrollTop;

		textarea.value = begin + text1 + selection + text2 + end;
		if(textarea.setSelectionRange){
			if(selection.length == 0){
				textarea.setSelectionRange(newCursorPos + text1.length, newCursorPos + text1.length);
			}else{
				textarea.setSelectionRange(newCursorPos, newCursorPos + text1.length + selection.length + text2.length);
			}
			textarea.focus();
		}
		textarea.scrollTop = scrollPos;
	}else{ // Just put them on the end, then.
		textarea.value += text1 + text2;
		textarea.focus(textarea.value.length - 1);
	}
}
