if (typeof Function.prototype.bind == "undefined")
    Function.prototype.bind = function(object) {
        var method = this;
        return function() { return method.apply(object, arguments); };
    }


function MouseTail(id, offsetX, offsetY) {
    this.id = id;
    this.offsetX = offsetX;
    this.offsetY = offsetY;
    this.visible = false;
    this.object = null;
    this.onMouseMove = function() {
        if(!this.visible) return;
        if(!this.object) this.object = document.getElementById(this.id);
        if(!this.object) return;
        this.object.style.left = (MouseTail.Mouse.x + this.offsetX) + "px";
        this.object.style.top  = (MouseTail.Mouse.y + this.offsetY) + "px";
    };

    this.show = function() {
        if(this.visible) return;
        this.visible = true;
        this.onMouseMove();
        if(this.object) this.object.style.visibility = "visible";
    };

    this.hide = function() {
        if(!this.visible) return;
        this.visible = false;
        if(this.object) this.object.style.visibility = "hidden";
    };


    if(!MouseTail.initialized) {
        MouseTail.Mouse = {x: 0, y: 0};
        if(typeof document.addEventListener != 'undefined') document.addEventListener("mousemove", function(e) {
                MouseTail.Mouse.x = e.pageX;
                MouseTail.Mouse.y = e.pageY;
                this.onMouseMove();
            }.bind(this), false);
        else if (typeof document.attachEvent != 'undefined') document.attachEvent("onmousemove", function() {
                MouseTail.Mouse.x = window.event.clientX+document.body.scrollLeft;
                MouseTail.Mouse.y = window.event.clientY+document.body.scrollTop;
                this.onMouseMove();
            }.bind(this));
        MouseTail.initialized = true;
    }
}
