+(function () {
+ function capitalize(prop){
+ return prop.replace(/-(.)/g, function(m, m1){ return m1.toUpperCase() })
+ }
+
+ function imitateElement(elmOriginal, elmClone){
+ var styleOriginal = getComputedStyle(elmOriginal,'');
+ var styleClone = getComputedStyle(elmClone,'');
+
+ elmClone.style.left = elmOriginal.offsetLeft + 'px';
+ elmClone.style.top = elmOriginal.offsetTop + 'px';
+
+ var copyProps = [
+ 'width', 'height',
+ 'padding-left', 'padding-right', 'padding-top', 'padding-bottom',
+ 'border-left-style', 'border-right-style','border-top-style','border-bottom-style',
+ 'border-left-width', 'border-right-width','border-top-width','border-bottom-width',
+ 'font-family', 'font-size', 'line-height', 'letter-spacing', 'word-spacing'];
+ for(var i in copyProps){
+ elmClone.style[capitalize(copyProps[i])] =
+ styleOriginal.getPropertyValue(copyProps[i]);
+ }
+
+ elmClone.style.width = elmOriginal.offsetWidth;
+ elmClone.style.height = elmOriginal.offsetHeight;
+ elmClone.style.visibility="hidden"; // ÄɲÃ
+ elmClone.style.position = "absolute"; //ÄɲÃ
+ //elmClone.style =elmOriginal.style;
+
+ elmClone.scrollLeft = elmOriginal.scrollLeft;
+ elmClone.scrollTop = elmOriginal.scrollTop;
+ }
+
+ var elm;
+
+ MIM.caret_pos = function (target)
+ {
+ if (! elm)
+ {
+ elm = document.createElement ('div');
+ document.getElementsByTagName ('body')[0].appendChild (elm);
+ }
+
+ imitateElement(target, elm);
+ var selectionEnd = target.selectionEnd;
+ var value = target.value;
+
+ var elmCursor = document.createElement('span');
+ elmCursor.innerHTML = '|';
+
+ //elm = document.createElement ('pre');
+ elm.innerHTML = '';
+ var elmChild = document.createTextNode(value.substr(0,selectionEnd));
+ elm.appendChild(elmChild);
+ elm.appendChild(elmCursor);
+
+ var x = target.offsetLeft + elmCursor.offsetLeft +2;
+ var y = target.offsetTop + elmCursor.offsetTop -2;
+
+ Xex.Log ("x:" + x + "px y:" + y + "px w:" + elm.offsetWidth);
+ }
+}) ();
+