(function (k, e, i, j) { k.fn.caret = function (b, l) { var a, c, f = this [0], d = k.browser.msie; if (typeof b === "object" && typeof b.start === "number" && typeof b.end === "number") { a = b.start; c = b.end } else if (typeof b === "number" && typeof l === "number") { a = b; c = l } else if (typeof b === "string") if ((a = f.value.indexOf(b)) > -1) c = a + b[e]; else a = null; else if (Object.prototype.toString.call(b) === "[object RegExp]") { b = b.exec(f.value); if (b != null) { a = b.index; c = a + b[0][e]; } } if (typeof a != "undefined") { if (d) { d = this [0].createTextRange(); d.collapse(true); d.moveStart("character", a); d.moveEnd("character", c - a); d.select() } else { this [0].selectionStart = a; this [0].selectionEnd = c } this [0].focus(); return this } else { if (d) { c = document.selection; if (this [0].tagName.toLowerCase() != "textarea") { d = this.val(); a = c[i]()[j](); a.moveEnd("character", d[e]); var g = a.text == "" ? d[e] : d.lastIndexOf(a.text); a = c[i]()[j](); a.moveStart("character", - d[e]); var h = a.text[e] } else { a = c[i](); c = a[j](); c.moveToElementText(this [0]); c.setEndPoint("EndToEnd", a); g = c.text[e] - a.text[e]; h = g + a.text[e]; } } else { g = f.selectionStart; h = f.selectionEnd } a = f.value.substring(g, h); return { start : g, end : h, text : a, replace : function (m) { return f.value.substring(0, g) + m + f.value.substring(h, f.value[e]); } } } } })(jQuery, "length", "createRange", "duplicate");