//General /////////////////////////////////////////// function _$(id) { return document.getElementById(id); } //Events /////////////////////////////////////////// var __eventListeners = []; function addEventListener(instance, eventName, listener) { var listenerFn = listener; if (instance.addEventListener) { instance.addEventListener(eventName, listenerFn, false); } else if (instance.attachEvent) { listenerFn = function() { listener(window.event); } instance.attachEvent("on" + eventName, listenerFn); } else { throw new Error("Event registration not supported"); } var event = { instance: instance, name: eventName, listener: listenerFn }; __eventListeners.push(event); return event; } /////////////////////////////////////////// function removeEventListener(event) { var instance = event.instance; if (instance.removeEventListener) { instance.removeEventListener(event.name, event.listener, false); } else if (instance.detachEvent) { instance.detachEvent("on" + event.name, event.listener); } for (var i = 0; i < __eventListeners.length; i++) { if (__eventListeners[i] == event) { __eventListeners.splice(i, 1); break; } } } /////////////////////////////////////////// function unregisterAllEvents() { while (__eventListeners.length > 0) { removeEventListener(__eventListeners[0]); } } // Caret position /////////////////////////////// function GetCaretPos(ctrl) { var CaretPos = 0; // IE Support if (document.selection) { ctrl.focus (); var Sel = document.selection.createRange (); Sel.moveStart ('character', -ctrl.value.length); CaretPos = Sel.text.length; } // Firefox support else if (ctrl.selectionStart || ctrl.selectionStart == '0') CaretPos = ctrl.selectionStart; return (CaretPos); } /////////////////////////////// function SetCaretPos(ctrl, pos) { if(ctrl.setSelectionRange) { ctrl.focus(); ctrl.setSelectionRange(pos,pos); } else if (ctrl.createTextRange) { var range = ctrl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } }