// attach ui handler

function mouseX(evt) 
{
    if (evt.pageX) 
        return evt.pageX;
    else 
        if (evt.clientX)
            return evt.clientX + (document.documentElement.scrollLeft ?
                    document.documentElement.scrollLeft :
                        document.body.scrollLeft);
    else 
        return null;
}

function mouseY(evt) 
{
    if (evt.pageY) 
        return evt.pageY;
    else 
        if (evt.clientY)
            return evt.clientY + (document.documentElement.scrollTop ?
                    document.documentElement.scrollTop :
                    document.body.scrollTop);
    else 
        return null;
}



function mousePosition(e, org)
{    
    var x = 0;
    var y = 0;
    
    if (e)
    {
         x = e.clientX;
         y = e.clientY;
         
         x += window.pageXOffset;
         y += window.pageYOffset;
    }
    else
    {
         x = event.clientX;
         y = event.clientY;
         x += (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
         y += (document.documentElement.scrollTop  ? document.documentElement.scrollTop  : document.body.scrollTop);
    }

    x -= org.x;
    y -= org.y;
        
    
    return new point(x,y);
}


function getElementPosition(e)
{
    var x = 0;
    var y = 0;
    while(e!=null)
    {
        x += e.offsetLeft;
        y += e.offsetTop;
        e = e.offsetParent;
    }
    
    return new point(x,y);
}


function attach_ui_handler(element, handler)
{
    handler.origin  = getElementPosition(element);
    handler.element = element;
    element._handler = handler;
    
    element.onmousedown = function(e)
    {
        if (element._handler.onmousedown)
        {
            element._handler.onmousedown(mousePosition(e, element._handler.origin));
        }
    }
 
    element.onmouseup = function(e)
    {
        if (element._handler.onmouseup)
        {
            element._handler.onmouseup(mousePosition(e, element._handler.origin));
        }
    }
        
    element.onmousemove = function(e)
    {
        if (element._handler.onmousemove)
        {
            element._handler.onmousemove(mousePosition(e, element._handler.origin));
        }
    }
        
    element.onmouseover = function(e)
    {
        if (element._handler.onmouseover)
        {
            element._handler.onmouseover(mousePosition(e, element._handler.origin));
        }
    }

    element.onfocus = function()
    {
        if (element._handler.onfocus)
        {
            element._handler.onfocus();
        }
    }

    element.onblur = function()
    {
        if (element._handler.onblur)
        {
            element._handler.onblur();
        }
    }

    element.onkeydown = function()
    {
        if (element._handler.onkeydown)
        {
            element._handler.onkeydown();
        }
    }

    element.onkeyup = function()
    {
        if (element._handler.onkeyup)
        {
            element._handler.onkeyup();
        }
    }    
}

