var PositionUtil = {

  webGetScrollPostion:function (e) {
    var b = e.document.body;
    if (e == b)return {left:0,top:0};
    with (e.getBoundingClientRect()) {
      return {left:b.scrollLeft + left,top:b.scrollTop + top};
    }
  },

  webGetClientPosition:function (e) {
    var b = e.document.body;
    if (e == b)return {left:-b.scrollLeft,top:-b.scrollTop};
    with (e.getBoundingClientRect()) {
      return {left:left - b.clientLeft,top:top - b.clientTop};
    }
  },

  webGetStandParent:function (e) {
    for (var p = e.parentElement; p != null; p = p.parentElement) {
      var sp = p.currentStyle.position;
      if (sp == 'absolute' || sp == 'relative')
        return p;
    }
    return e.document.body;
  },

  webCalcPosition:function (floate, e) {
    var epos = PositionUtil.webGetScrollPostion(e);
    var spos = PositionUtil.webGetScrollPostion(PositionUtil.webGetStandParent(floate));
    var s = PositionUtil.webGetStandParent(floate);
    return {left:epos.left - spos.left - s.clientLeft,top:epos.top - spos.top - s.clientTop};
  },

  webAdjustMirror:function (floate, e, pos) {
    var cw = e.document.body.clientWidth;
    var ch = e.document.body.clientHeight;
    var fw = floate.offsetWidth;
    var fh = floate.offsetHeight;
    var ew = e.offsetWidth;
    var eh = e.offsetHeight;

    var ecpos = PositionUtil.webGetClientPosition(e);
    var empos = {left:ecpos.left + ew / 2,top:ecpos.top + eh / 2};
    var pcpos = PositionUtil.webGetClientPosition(PositionUtil.webGetStandParent(floate));
    var fcpos = PositionUtil.webGetClientPosition(floate);
    var fmpos = {left:pcpos.left + pos.left + fw / 2,top:pcpos.top + pos.top + fh / 2};

    if ((fmpos.left < empos.left) ? ((fmpos.left - fw / 2 < 0) && ((empos.left * 2 - fmpos.left) + fw / 2 <= cw)) : ((fmpos.left + fw / 2 > cw) && ((empos.left * 2 - fmpos.left) - fw / 2 >= 0)))
      fmpos.left = empos.left * 2 - fmpos.left;

    if ((fmpos.top < empos.top) ? ((fmpos.top - fh / 2 < 0) && ((empos.top * 2 - fmpos.top) + fh / 2 <= ch)) : ((fmpos.top + fh / 2 > ch) && ((empos.top * 2 - fmpos.top) - fh / 2 >= 0)))
      fmpos.top = empos.top * 2 - fmpos.top;

    pos.left = fmpos.left - pcpos.left - fw / 2;
    pos.top = fmpos.top - pcpos.top - fh / 2;
  }    ,

  aa:function(element) {

    if (element == null) {
      return null;
    }
    var elmt = element;
    var offsetTop = elmt.offsetTop;
    var offsetLeft = elmt.offsetLeft;
    var offsetWidth = elmt.offsetWidth;
    var offsetHeight = elmt.offsetHeight;
    while (elmt = elmt.offsetParent)
    {
      // add this judge
      if (elmt.currentStyle.position == 'absolute' ||
          elmt.currentStyle.position == 'relative' ||
          (elmt.currentStyle.overflow != 'visible' && elmt.currentStyle.overflow != '' )) {
        break;
      }
      offsetTop += elmt.offsetTop;
      offsetLeft += elmt.offsetLeft;
    }
    //alert("top="+offsetTop);
    //alert("left="+offsetLeft);
  } 


}
