/* DOM functions */

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function positionElement(obj, pos)
{
    if (obj)
    {
        obj.style.left = pos[0] + 'px';
        obj.style.top = pos[1] + 'px';
    }
}

function positionElementRelativeTo(obj, rel, oX, oY)
{
    if (obj && rel)
    {
        var _pos = findPos(rel);
        _pos[0] = _pos[0] + oX;
        _pos[1] = _pos[1] + oY;
        positionElement(obj, _pos);
    }
}

function setElementSize(obj, size)
{
    if (obj)
    {
        if (size[0] > 0)
            obj.style.width = size[0] + 'px';
        if (size[1] > 0)
            obj.style.height = size[1] + 'px';
    }
}

// Creates an anonymous wrapper function for the statements that should execute when this event is fired
// Functions can reference source element of the event via "_this"
// IMPORTANT: No "on" prefix in evt_name! i.e.: pass "click" instead of "onclick"!
function addElementEventListener(obj, evt_name, func)
{
    // Prepare eventhandler anonymous function
    var evtHandler_top = 'function(e) { var _this; if (!e) var e = window.event; if (e.target) _this = e.target; else if (e.srcElement) _this = e.srcElement; /* Defeat Safari bug: */ if (_this.nodeType == 3) _this = _this.parentNode; ';
    var evtHandler_bot = ' e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); }';
    
    if (obj.attachEvent)   // IE / Opera
    {
        eval("obj.attachEvent('on" + evt_name + "', " + evtHandler_top + func + evtHandler_bot + ")");
    }
    else if (obj.addEventListener)   // Others
    {
        eval("obj.addEventListener('" + evt_name + "', " + evtHandler_top + func + evtHandler_bot + ", true)");
    }
    /*else
    {
        alert('ERROR: unsupported browser!');
    }*/
}

// NOT IMPLEMENTED!
function removeElementEventListener(obj, evt_name)
{

}

/*function setElementAttribute(obj, attr, val)
{
    //var attributeExists = false;
    //eval("attributeExists = obj." + attr);
    
    if (document.createAttribute)
    {
        var _aN;
        eval("_aN = document.createAttribute('" + attr + "')");
        _aN.value = val;
        obj.setAttributeNode(_aN);
    }
    else if (obj.getAttribute)
    {
        //eval("obj.setAttribute('" + attr + "','" + val + "');");
        obj.setAttribute(attr, val);
    }
    else
    {
        eval("obj." + attr + ".value = '" + val + "'");
    }
}*/

function getMousePosition(e)
{
    var posx = posy = 0;
    if (!e) var e = window.event;
    if (e.pageX || e.pageY)
    {
        posx = e.pageX;
        posy = e.pageY;
    }
    else if (e.clientX || e.clientY)
    {
        posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
        posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
    }
    return [posx,posy];
}

