// jQuery Function to append Text at Text-Caret for input or Textareas
$.fn.extend({
	insertAtCaret: function(myValue){
		el = this[0];
		if (document.selection) {
			el.focus();
			sel = document.selection.createRange();
			sel.text = myValue;
			el.focus();
		} else if (el.selectionStart || el.selectionStart == '0') {
			var startPos = el.selectionStart;
			var endPos = el.selectionEnd;
			var scrollTop = el.scrollTop;
			el.value = el.value.substring(0, startPos)+myValue+el.value.substring(endPos,el.value.length);
			el.focus();
			el.selectionStart = startPos + myValue.length;
			el.selectionEnd = startPos + myValue.length;
			el.scrollTop = scrollTop;
		} else {
			el.value += myValue;
			el.focus();
		}
	}
})
// jQuery function to set text around some marked Text in Input or Textareas
$.fn.extend({
	caret: function (start, end) {
		var elem = this[0];
		if (elem) {							
			// get caret range
			if (typeof start == "undefined") {
				if (elem.selectionStart || elem.selectionStart == '0') {
					start = elem.selectionStart;
					end = elem.selectionEnd;
				} else if (document.selection) {
					var val = this.val();
					var range = document.selection.createRange().duplicate();
					range.moveEnd("character", val.length)
					start = (range.text == "" ? val.length : val.lastIndexOf(range.text));
					range = document.selection.createRange().duplicate();
					range.moveStart("character", -val.length);
					end = range.text.length;
				}
			} else { // set caret range
				var val = this.val();
				if (typeof start != "number") start = -1;
				if (typeof end != "number") end = -1;
				if (start < 0) start = 0;
				if (end > val.length) end = val.length;
				if (end < start) end = start;
				if (start > end) start = end;
				elem.focus();
				if (elem.selectionStart || elem.selectionStart == '0') {
					elem.selectionStart = start;
					elem.selectionEnd = end;
				} else if (document.selection) {
					var range = elem.createTextRange();
					range.collapse(true);
					range.moveStart("character", start);
					range.moveEnd("character", end - start);
					range.select();
				}
			}
			return {start:start, end:end};
		}
	}
});
