qx.Class.define("nx4.webwidgets.dom.Element",
{
  type:"static",

  statics :
  {
    /**
     * Groessen eines Elementes holen.
     * Enthaelt Hilfsroutinen um die 0-Werte bei display:none zu umgehen
     * @param element Zielelement
     * @return width,height-Hash
     */
    dimensions : function(element)
    {
      var display = qx.bom.element.Style.get(element, "display");
      if (display != 'none' && display != null) // Safari bug
        return {width: element.offsetWidth, height: element.offsetHeight};

      // All *Width and *Height properties give 0 on elements with display none,
      // so enable the element temporarily
      var els = element.style;
      var oVisibility = els.visibility;
      var oPosition   = els.position;
      var oDisplay    = els.display;
      els.visibility  = 'hidden';
      els.position    = 'absolute';
      els.display     = 'block';
      var oWidth      = element.clientWidth;
      var oHeight     = element.clientHeight;
      els.display     = oDisplay;
      els.position    = oPosition;
      els.visibility  = oVisibility;
      return {width: oWidth, height: oHeight};
    },

    /**
     * Ermittelt die Koordinate die ein Element haben muesste um zentriert angezeigt zu werden.
     * @param element Element
     * @return Map (x,y)
     */
    centerCoords : function(element)
    {
      var dim = nx4.webwidgets.dom.Element.dimensions(element);

      var vp = qx.bom.Viewport;
      var v = { w:vp.getWidth(), h:vp.getHeight() };

      //Wenn das Element groesser als das Fenster ist, dieses auf (0,0) bringen
      var x = (dim.width  >= v.w) ? 0 : Math.round((v.w  - dim.width)/2);
      var y = (dim.height >= v.h) ? 0 : Math.round((v.h - dim.height)/2);

      //noch die Scroll-Position anfuegen, damit es wirklich immer zentriert wird
      x+= vp.getScrollLeft();
      y+= vp.getScrollTop();

      return { x:x, y:y };
    },

    /**
     * Zentriert ein Element in der Bildschirmmitte.
     */
    center : function(element)
    {
      var c = nx4.webwidgets.dom.Element.centerCoords(element);
      qx.bom.element.Style.setStyles(element, { top:c.y+'px', left:c.x+'px' });
    }
  }
});

