// dependency: none

function addLoadEvent(func) 
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function') 
	{
		window.onload = func;
	}
	else 
	{
		window.onload = function() 
		{
			oldonload();
			func();
		}
	}
}


function Handler(htmlElement, mouseMoveFunction, mouseUpFunction)
{
   	this.htmlElement = htmlElement;
    this.mouseMove = function(event)
    {
      	mouseMoveFunction(this.htmlElement, event);
    }
    this.mouseUp = function(event)
    {
     	mouseUpFunction(this.htmlElement, event);
    }
}
      
function addMouseHandler(htmlElement, mouseDownFunction, mouseMoveFunction, mouseUpFunction)
{
    htmlElement.onmousedown = function(event)
    {
     	if (event == null)
      	{
          	event = window.event;
      	}
       	mouseHandler.onMouseUp(event);
       	mouseDownFunction(this, event);
       	mouseHandler.currentHandler = new Handler(this, mouseMoveFunction, mouseUpFunction);
       	return false;
     }
}
      
var mouseHandler = 
{
  	currentHandler: false,
          
    init: function()
    {
        document.onmousemove = new Function("event", "return mouseHandler.onMouseMove(event)");
        document.onmouseup = new Function("event", "return mouseHandler.onMouseUp(event)");
    },
          
    onMouseMove: function(event)
    {
        if (this.currentHandler)
        {
          	if (event == null)
          	{
              	event = window.event;
          	}
              	this.currentHandler.mouseMove(event);
            }
        return false;
    },
          
    onMouseUp: function(event)
    {
        if (this.currentHandler)
        {
          	if (event == null)
          	{
              	event = window.event;
           	}
           	this.currentHandler.mouseUp(event);
           	this.currentHandler = false;
        }
        return false;
    }
}

    addLoadEvent(mouseHandler.init);

