
/**
 * Extends Mootools
 * 
 * getPositionNb works better then getPosition ;)
 * 
 * @require     MooTools
 * 
 * @author      Steffen Maechtel <s.maechtel@netzbewegung.com>
 * @version     1.00 alpha
 */



Element.implement({
    getPositionNb: function(relative)
    {
        // default value for relative object
        if (relative == undefined)
        {
            relative = $$('body')[0];
        }
        
        // this element is current relative object
        if (this == relative)
        {
            return {x: 0, y: 0};
        }

        var x = this.offsetLeft;
        var y = this.offsetTop;
        
        
        // if this position relative and
        // if next parent with position relative is the relative object
        // stop here and return current x and y
        if (this.getStyle('position') == 'relative')
        {
            var parents = this.getParents();
            
            for (var i = 0; i < parents.length; i++)
            {
                if (parents[i].getStyle('position') == 'relative')
                {
                    if (parents[i] == relative)
                    {
                        return {x: x, y: y};
                    }
                    break;
                }
            }
        }
        
        // start rekursive parent position here
        var parentElement = this.getParent();
        if (parentElement)
        {
            var position = parentElement.getPositionNb(relative);
           
            if (position.x)
            {
               x = x + position.x;
            }
            
            if (position.y)
            {
               y = y + position.y;
            }
        }
       
        return {x: x, y: y}; 
    } 
});
