/*xbStyle.js Revision: 0.201 2002-02-11Contributor(s): Bob Clary, Original Work, Copyright 2000                Bob Clary, Netscape Communications, Copyright 2001Netscape grants you a royalty free license to use, modify and distribute this software provided that this copyright notice appears on all copies.  This software is provided "AS IS," without a warranty of any kind.Change Log:2001-07-19: bclary - fixed function cssStyleGetLeft() and cssStyleGetTop() to             correctly handle the case where the initial style.left/style.top            are not initialized. This fixes positioning for relatively positioned            DIVS and as a result fixes behavior for ILAYERs exposed as relatively            positioned divs.2001-10-02: bclary - added missing xbClipRect.getHeight/setHeight methods.2001-11-20: bclary - removed use of practical browser sniffer,             added object sniffing, and limited support for opera            note opera returns ints for HTMLElement.style.[left|top|height|width] etc.2002-02-11: bclary - with the help of Rob Johnston <rob_johnston@hotmail.com>            found that the "if (document.getElementsByName)" test excluded            IE4. Added a test for document.all to enable IE4 to fully use             xbStyle.*/function xbStyleNotSupported() {}function xbStyleNotSupportStringValue(propname) { xbDEBUG.dump(propname + ' is not supported in this browser'); return '';};/////////////////////////////////////////////////////////////// xbClipRectfunction xbClipRect(a1, a2, a3, a4){  this.top  = 0;  this.right  = 0;  this.bottom  = 0;  this.left  = 0;  if (typeof(a1) == 'string')  {    var val;    var ca;    var i;          if (a1.indexOf('rect(') == 0)    {      // I would have preferred [0-9]+[a-zA-Z]+ for a regexp      // but NN4 returns null for that.       ca = a1.substring(5, a1.length-1).match(/-?[0-9a-zA-Z]+/g);      for (i = 0; i < 4; ++i)      {        val = xbToInt(ca[i]);        if (val != 0 && ca[i].indexOf('px') == -1)        {          xbDEBUG.dump('xbClipRect: A clipping region ' + a1 + ' was detected that did not use pixels as units.  Click Ok to continue, Cancel to Abort');          return;        }        ca[i] = val;      }      this.top    = ca[0];      this.right  = ca[1];      this.bottom = ca[2];      this.left   = ca[3];    }  }      else if (typeof(a1) == 'number' && typeof(a2) == 'number' && typeof(a3) == 'number' && typeof(a4) == 'number')  {    this.top    = a1;    this.right  = a2;    this.bottom = a3;    this.left   = a4;  }}xbClipRect.prototype.top = 0;xbClipRect.prototype.right = 0;xbClipRect.prototype.bottom = 0;xbClipRect.prototype.left = 0;function xbClipRectGetWidth(){    return this.right - this.left;}xbClipRect.prototype.getWidth = xbClipRectGetWidth; function xbClipRectSetWidth(width){  this.right = this.left + width;}xbClipRect.prototype.setWidth = xbClipRectSetWidth;function xbClipRectGetHeight(){    return this.bottom - this.top;}xbClipRect.prototype.getHeight = xbClipRectGetHeight; function xbClipRectSetHeight(height){  this.bottom = this.top + height;}xbClipRect.prototype.setHeight = xbClipRectSetHeight;function xbClipRectToString(){  return 'rect(' + this.top + 'px ' + this.right + 'px ' + this.bottom + 'px ' + this.left + 'px )' ;}xbClipRect.prototype.toString = xbClipRectToString;/////////////////////////////////////////////////////////////// xbStyle//// Note Opera violates the standard by cascading the effective values// into the HTMLElement.style object. We can use IE's HTMLElement.currentStyle// to get the effective values. In Gecko we will use the W3 DOM Style Standard getComputedStylefunction xbStyle(obj, position){  if (typeof(obj) == 'object' && typeof(obj.style) != 'undefined')     this.styleObj = obj.style;  else if (document.layers) // NN4  {    if (typeof(position) == 'undefined')      position = '';            this.styleObj = obj;    this.styleObj.position = position;  }  this.object = obj;}xbStyle.prototype.styleObj = null;xbStyle.prototype.object = null;/////////////////////////////////////////////////////////////// xbStyle.getEffectiveValue()// note that xbStyle's constructor uses the currentStyle object // for IE5+ and that Opera's style object contains computed values// already. Netscape Navigator's layer object also contains the // computed values as well. Note that IE4 will not return the // computed values.function xbStyleGetEffectiveValue(propname){  var value = null;  // W3/Gecko  if (document.defaultView && document.defaultView.getComputedStyle)  {    if (navigator.family == 'gecko')    {      // xxxHack: work around Gecko getComputedStyle bugs...      switch(propname)      {      case 'clip':         return this.styleObj[propname];      case 'top':        if (navigator.family == 'gecko' && navigator.version < 0.96 && this.styleObj.position == 'relative')           return this.object.offsetTop;      case 'left':        if (navigator.family == 'gecko' && navigator.version < 0.96 && this.styleObj.position == 'relative')           return this.object.offsetLeft;      }    }    // Note that propname is the name of the property in the CSS Style    // Object. However the W3 method getPropertyValue takes the actual    // property name from the CSS Style rule, i.e., propname is     // 'backgroundColor' but getPropertyValue expects 'background-color'.     var capIndex;     var cappropname = propname;     while ( (capIndex = cappropname.search(/[A-Z]/)) != -1)     {       if (capIndex != -1)         cappropname = cappropname.substring(0, capIndex) + '-' + cappropname.substring(capIndex, capIndex).toLowerCase() + cappropname.substr(capIndex+1);     }     value =  document.defaultView.getComputedStyle(this.object, '').getPropertyValue(cappropname);     // xxxHack for Gecko:     if (!value && this.styleObj[propname])       value = this.styleObj[propname];  }  else if (typeof(this.styleObj[propname]) == 'undefined')     value = xbStyleNotSupportStringValue(propname);  else   {    if (navigator.family != 'ie4' || navigator.version < 5)    {      // IE4+, Opera, NN4      value = this.styleObj[propname];    }    else    {     // IE5+     value = this.object.currentStyle[propname];     if (!value)       value = this.styleObj[propname];    }  }  return value;}/////////////////////////////////////////////////////////////// xbStyle.getClip()function cssStyleGetClip(){  var clip = this.getEffectiveValue('clip');  // hack opera  if (clip == 'rect()')    clip = '';  if (clip == '')    clip = 'rect(0px ' + this.getWidth() + 'px ' + this.getHeight() + 'px 0px)';  return clip;}function nsxbStyleGetClip(){  var clip = this.styleObj.clip;  var rect = new xbClipRect(clip.top, clip.right, clip.bottom, clip.left);  return rect.toString();}/////////////////////////////////////////////////////////////// xbStyle.setClip()function cssStyleSetClip(sClipString){  this.styleObj.clip = sClipString;}function nsxbStyleSetClip(sClipString){  var rect          = new xbClipRect(sClipString);  this.styleObj.clip.top    = rect.top;  this.styleObj.clip.right  = rect.right;  this.styleObj.clip.bottom  = rect.bottom;  this.styleObj.clip.left    = rect.left;}/////////////////////////////////////////////////////////////// xbStyle.getClipTop()function cssStyleGetClipTop(){  var clip = this.getClip()  var rect = new xbClipRect(clip);  return rect.top;}function nsxbStyleGetClipTop(){  return this.styleObj.clip.top;}/////////////////////////////////////////////////////////////// xbStyle.setClipTop()function cssStyleSetClipTop(top){  var clip = this.getClip();  var rect         = new xbClipRect(clip);  rect.top         = top;  this.styleObj.clip = rect.toString();}function nsxbStyleSetClipTop(top){  return this.styleObj.clip.top = top;}/////////////////////////////////////////////////////////////// xbStyle.getClipRight()function cssStyleGetClipRight(){  var clip = this.getClip();  var rect = new xbClipRect(clip);  return rect.right;}function nsxbStyleGetClipRight(){  return this.styleObj.clip.right;}/////////////////////////////////////////////////////////////// xbStyle.setClipRight()function cssStyleSetClipRight(right){  var clip = this.getClip();  var rect          = new xbClipRect(clip);  rect.right        = right;  this.styleObj.clip  = rect.toString();}function nsxbStyleSetClipRight(right){  return this.styleObj.clip.right = right;}/////////////////////////////////////////////////////////////// xbStyle.getClipBottom()function cssStyleGetClipBottom(){  var clip = this.getClip();  var rect = new xbClipRect(clip);  return rect.bottom;}function nsxbStyleGetClipBottom(){  return this.styleObj.clip.bottom;}/////////////////////////////////////////////////////////////// xbStyle.setClipBottom()function cssStyleSetClipBottom(bottom){  var clip = this.getClip();  var rect           = new xbClipRect(clip);  rect.bottom        = bottom;  this.styleObj.clip   = rect.toString();}function nsxbStyleSetClipBottom(bottom){  return this.styleObj.clip.bottom = bottom;}/////////////////////////////////////////////////////////////// xbStyle.getClipLeft()function cssStyleGetClipLeft(){  var clip = this.getClip();  var rect = new xbClipRect(clip);  return rect.left;}function nsxbStyleGetClipLeft(){  return this.styleObj.clip.left;}/////////////////////////////////////////////////////////////// xbStyle.setClipLeft()function cssStyleSetClipLeft(left){  var clip = this.getClip();  var rect = new xbClipRect(clip);  rect.left = left;  this.styleObj.clip = rect.toString();}function nsxbStyleSetClipLeft(left){  return this.styleObj.clip.left = left;}/////////////////////////////////////////////////////////////// xbStyle.getClipWidth()function cssStyleGetClipWidth(){  var clip = this.getClip();  var rect = new xbClipRect(clip);  return rect.getWidth();}function nsxbStyleGetClipWidth(){  return this.styleObj.clip.width;}/////////////////////////////////////////////////////////////// xbStyle.setClipWidth()function cssStyleSetClipWidth(width){  var clip = this.getClip();  var rect = new xbClipRect(clip);  rect.setWidth(width);  this.styleObj.clip = rect.toString();}function nsxbStyleSetClipWidth(width){  return this.styleObj.clip.width = width;}/////////////////////////////////////////////////////////////// xbStyle.getClipHeight()function cssStyleGetClipHeight(){  var clip = this.getClip();  var rect = new xbClipRect(clip);  return rect.getHeight();}function nsxbStyleGetClipHeight(){  return this.styleObj.clip.height;}/////////////////////////////////////////////////////////////// xbStyle.setClipHeight()function cssStyleSetClipHeight(height){  var clip = this.getClip();  var rect = new xbClipRect(clip);  rect.setHeight(height);  this.styleObj.clip = rect.toString();}function nsxbStyleSetClipHeight(height){  return this.styleObj.clip.height = height;}// the CSS attributes left,top are for absolutely positioned elements// measured relative to the containing element.  for relatively positioned// elements, left,top are measured from the element's normal inline position.// getLeft(), setLeft() operate on this type of coordinate.//// to allow dynamic positioning the getOffsetXXX and setOffsetXXX methods are// defined to return and set the position of either an absolutely or relatively// positioned element relative to the containing element./////////////////////////////////////////////////////////////////////////////////// xbStyle.getLeft()function cssStyleGetLeft(){  var left = this.getEffectiveValue('left');  if (typeof(left) == 'number')     return left;  if (left != '' && left.indexOf('px') == -1)  {    xbDEBUG.dump('xbStyle.getLeft: Element ID=' + this.object.id + ' does not use pixels as units. left=' + left + ' Click Ok to continue, Cancel to Abort');    return 0;  }  if (left == '')    left = this.styleObj.left = '0px';        return xbToInt(left);}function nsxbStyleGetLeft(){  return this.styleObj.left;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setLeft()function cssStyleSetLeft(left){  if (typeof(this.styleObj.left) == 'number')    this.styleObj.left = left;  else    this.styleObj.left = left + 'px';}function nsxbStyleSetLeft(left){  this.styleObj.left = left;}/////////////////////////////////////////////////////////////////////////////// xbStyle.getTop()function cssStyleGetTop(){  var top = this.getEffectiveValue('top');  if (typeof(top) == 'number')     return top;  if (top != '' && top.indexOf('px') == -1)  {    xbDEBUG.dump('xbStyle.getTop: Element ID=' + this.object.id + ' does not use pixels as units. top=' + top + ' Click Ok to continue, Cancel to Abort');    return 0;  }  if (top == '')    top = this.styleObj.top = '0px';        return xbToInt(top);}function nsxbStyleGetTop(){  return this.styleObj.top;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setTop()function cssStyleSetTop(top){  if (typeof(this.styleObj.top) == 'number')    this.styleObj.top = top;  else    this.styleObj.top = top + 'px';}function nsxbStyleSetTop(top){  this.styleObj.top = top;}/////////////////////////////////////////////////////////////////////////////// xbStyle.getPageX()function cssStyleGetPageX(){  var x = 0;  var elm = this.object;  var elmstyle;  var position;    //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the   // effective position attribute , attempt to use offsetXXX  if (typeof(elm.offsetLeft) == 'number')  {    while (elm)    {      x += elm.offsetLeft;      elm = elm.offsetParent;    }  }  else  {    while (elm)    {      if (elm.style)      {        elmstyle = new xbStyle(elm);        position = elmstyle.getEffectiveValue('position');        if (position != '' && position != 'static')          x += elmstyle.getLeft();      }      elm = elm.parentNode;    }  }    return x;}function nsxbStyleGetPageX(){  return this.styleObj.pageX;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setPageX()function cssStyleSetPageX(x){  var xParent = 0;  var elm = this.object.parentNode;  var elmstyle;  var position;    //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the   // effective position attribute , attempt to use offsetXXX  if (typeof(elm.offsetLeft) == 'number')  {    while (elm)    {      xParent += elm.offsetLeft;      elm = elm.offsetParent;    }  }  else  {    while (elm)    {      if (elm.style)      {        elmstyle = new xbStyle(elm);        position = elmstyle.getEffectiveValue('position');        if (position != '' && position != 'static')          xParent += elmstyle.getLeft();      }      elm = elm.parentNode;    }  }    x -= xParent;  this.setLeft(x);}    function nsxbStyleSetPageX(x){  this.styleObj.x = this.styleObj.x  + x - this.styleObj.pageX;}/////////////////////////////////////////////////////////////////////////////// xbStyle.getPageY()function cssStyleGetPageY(){  var y = 0;  var elm = this.object;  var elmstyle;  var position;    //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the   // effective position attribute , attempt to use offsetXXX  if (typeof(elm.offsetTop) == 'number')  {    while (elm)    {      y += elm.offsetTop;      elm = elm.offsetParent;    }  }  else  {    while (elm)    {      if (elm.style)      {        elmstyle = new xbStyle(elm);        position = elmstyle.getEffectiveValue('position');        if (position != '' && position != 'static')          y += elmstyle.getTop();      }      elm = elm.parentNode;    }  }    return y;}function nsxbStyleGetPageY(){  return this.styleObj.pageY;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setPageY()function cssStyleSetPageY(y){  var yParent = 0;  var elm = this.object.parentNode;  var elmstyle;  var position;    //xxxHack: Due to limitations in Gecko's (0.9.6) ability to determine the   // effective position attribute , attempt to use offsetXXX  if (typeof(elm.offsetTop) == 'number')  {    while (elm)    {      yParent += elm.offsetTop;      elm = elm.offsetParent;    }  }  else  {    while (elm)    {      if (elm.style)      {        elmstyle = new xbStyle(elm);        position = elmstyle.getEffectiveValue('position');        if (position != '' && position != 'static')          yParent += elmstyle.getTop();      }      elm = elm.parentNode;    }  }    y -= yParent;  this.setTop(y);}    function nsxbStyleSetPageY(y){  this.styleObj.y = this.styleObj.y  + y - this.styleObj.pageY;}/////////////////////////////////////////////////////////////////////////////// xbStyle.getHeight()function cssStyleGetHeight(){  var height = this.getEffectiveValue('height');  if (typeof(height) == 'number')     return height;  if ((height == 'auto' || height.indexOf('%') != -1) && typeof(this.object.offsetHeight) == 'number')    height = this.object.offsetHeight + 'px';  if (height != '' && height != 'auto' && height.indexOf('px') == -1)  {    xbDEBUG.dump('xbStyle.getHeight: Element ID=' + this.object.id + ' does not use pixels as units. height=' + height + ' Click Ok to continue, Cancel to Abort');    return 0;  }  height = xbToInt(height);  return height;}function nsxbStyleGetHeight(){  //if (this.styleObj.document && this.styleObj.document.height)  //  return this.styleObj.document.height;      return this.styleObj.clip.height;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setHeight()function cssStyleSetHeight(height){  if (typeof(this.styleObj.height) == 'number')    this.styleObj.height = height;  else    this.styleObj.height = height + 'px';}function nsxbStyleSetHeight(height){  this.styleObj.clip.height = height;}/////////////////////////////////////////////////////////////////////////////// xbStyle.getWidth()function cssStyleGetWidth(){  var width = this.getEffectiveValue('width');  if (typeof(width) == 'number')     return width;  if ((width == 'auto' || width.indexOf('%') != -1) && typeof(this.object.offsetWidth) == 'number')    width = this.object.offsetWidth + 'px';  if (width != '' && width != 'auto' && width.indexOf('px') == -1)  {    xbDEBUG.dump('xbStyle.getWidth: Element ID=' + this.object.id + ' does not use pixels as units. width=' + width + ' Click Ok to continue, Cancel to Abort');    return 0;  }  width = xbToInt(width);  return width;}function nsxbStyleGetWidth(){  //if (this.styleObj.document && this.styleObj.document.width)  //  return this.styleObj.document.width;      return this.styleObj.clip.width;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setWidth()function cssStyleSetWidth(width){  if (typeof(this.styleObj.width) == 'number')    this.styleObj.width = width;  else    this.styleObj.width = width + 'px';}// netscape will not dynamically change the width of a // layer. It will only happen upon a refresh.function nsxbStyleSetWidth(width){  this.styleObj.clip.width = width;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// xbStyle.getVisibility()function cssStyleGetVisibility(){  return this.getEffectiveValue('visibility');}function nsxbStyleGetVisibility(){  switch(this.styleObj.visibility)  {  case 'hide':    return 'hidden';  case 'show':    return 'visible';  }  return '';}/////////////////////////////////////////////////////////////////////////////// xbStyle.setVisibility()function cssStyleSetVisibility(visibility){  this.styleObj.visibility = visibility;}function nsxbStyleSetVisibility(visibility){  switch(visibility)  {  case 'hidden':    visibility = 'hide';    break;  case 'visible':    visibility = 'show';    break;  case 'inherit':    break;  default:    visibility = 'show';    break;  }  this.styleObj.visibility = visibility;}/////////////////////////////////////////////////////////////////////////////// xbStyle.getzIndex()function cssStyleGetzIndex(){  return xbToInt(this.getEffectiveValue('zIndex'));}function nsxbStyleGetzIndex(){  return this.styleObj.zIndex;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setzIndex()function cssStyleSetzIndex(zIndex){  this.styleObj.zIndex = zIndex;}function nsxbStyleSetzIndex(zIndex){  this.styleObj.zIndex = zIndex;}/////////////////////////////////////////////////////////////////////////////// xbStyle.getBackgroundColor()function cssStyleGetBackgroundColor(){  return this.getEffectiveValue('backgroundColor');}function nsxbStyleGetBackgroundColor(){  return this.styleObj.bgColor;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setBackgroundColor()function cssStyleSetBackgroundColor(color){  this.styleObj.backgroundColor = color;}function nsxbStyleSetBackgroundColor(color){  if (color)  {    this.styleObj.bgColor = color;    this.object.document.bgColor = color;    this.resizeTo(this.getWidth(), this.getHeight());  }}/////////////////////////////////////////////////////////////////////////////// xbStyle.getColor()function cssStyleGetColor(){  return this.getEffectiveValue('color');}function nsxbStyleGetColor(){  return '#ffffff';}/////////////////////////////////////////////////////////////////////////////// xbStyle.setColor()function cssStyleSetColor(color){  this.styleObj.color = color;}function nsxbStyleSetColor(color){  this.object.document.fgColor = color;}/////////////////////////////////////////////////////////////////////////////// xbStyle.moveAbove()function xbStyleMoveAbove(cont){  this.setzIndex(cont.getzIndex()+1);}/////////////////////////////////////////////////////////////////////////////// xbStyle.moveBelow()function xbStyleMoveBelow(cont){  var zindex = cont.getzIndex() - 1;              this.setzIndex(zindex);}/////////////////////////////////////////////////////////////////////////////// xbStyle.moveBy()function xbStyleMoveBy(deltaX, deltaY){  this.moveTo(this.getLeft() + deltaX, this.getTop() + deltaY);}/////////////////////////////////////////////////////////////////////////////// xbStyle.moveTo()function xbStyleMoveTo(x, y){  this.setLeft(x);  this.setTop(y);}/////////////////////////////////////////////////////////////////////////////// xbStyle.moveToAbsolute()function xbStyleMoveToAbsolute(x, y){  this.setPageX(x);  this.setPageY(y);}/////////////////////////////////////////////////////////////////////////////// xbStyle.resizeBy()function xbStyleResizeBy(deltaX, deltaY){  this.setWidth( this.getWidth() + deltaX );  this.setHeight( this.getHeight() + deltaY );}/////////////////////////////////////////////////////////////////////////////// xbStyle.resizeTo()function xbStyleResizeTo(x, y){  this.setWidth(x);  this.setHeight(y);}////////////////////////////////////////////////////////////////////////// Navigator 4.x resizing...function nsxbStyleOnresize(){    if (saveInnerWidth != xbGetWindowWidth() || saveInnerHeight != xbGetWindowHeight())    location.reload();  return false;}/////////////////////////////////////////////////////////////////////////////// xbStyle.setInnerHTML()function xbSetInnerHTML(str){  if (typeof(this.object.innerHTML) != 'undefined')    this.object.innerHTML = str;}function nsxbSetInnerHTML(str){  this.object.document.open('text/html');  this.object.document.write(str);  this.object.document.close();}////////////////////////////////////////////////////////////////////////// Extensions to xbStyle that are not supported by Netscape Navigator 4// but that provide cross browser implementations of properties for // Mozilla, Gecko, Netscape 6.x and Opera/////////////////////////////////////////////////////////////////////////////// xbStyle.getBorderTopWidth()function cssStyleGetBorderTopWidth(){  return xbToInt(this.getEffectiveValue('borderTopWidth'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getBorderRightWidth()function cssStyleGetBorderRightWidth(){  return xbToInt(this.getEffectiveValue('borderRightWidth'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getBorderBottomWidth()function cssStyleGetBorderBottomWidth(){  return xbToInt(this.getEffectiveValue('borderLeftWidth'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getBorderLeftWidth()function cssStyleGetBorderLeftWidth(){  return xbToInt(this.getEffectiveValue('borderLeftWidth'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getMarginTop()function cssStyleGetMarginTop(){  return xbToInt(this.getEffectiveValue('marginTop'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getMarginRight()function cssStyleGetMarginRight(){  return xbToInt(this.getEffectiveValue('marginRight'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getMarginBottom()function cssStyleGetMarginBottom(){  return xbToInt(this.getEffectiveValue('marginBottom'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getMarginLeft()function cssStyleGetMarginLeft(){  return xbToInt(this.getEffectiveValue('marginLeft'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getPaddingTop()function cssStyleGetPaddingTop(){  return xbToInt(this.getEffectiveValue('paddingTop'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getPaddingRight()function cssStyleGetPaddingRight(){  return xbToInt(this.getEffectiveValue('paddingRight'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getPaddingBottom()function cssStyleGetPaddingBottom(){  return xbToInt(this.getEffectiveValue('paddingBottom'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getPaddingLeft()function cssStyleGetPaddingLeft(){  return xbToInt(this.getEffectiveValue('paddingLeft'));}/////////////////////////////////////////////////////////////////////////////// xbStyle.getClientTop()function cssStyleGetClientTop(){  return this.getTop() - this.getMarginTop() - this.getBorderTopWidth() - this.getPaddingTop();}/////////////////////////////////////////////////////////////////////////////// xbStyle.getClientLeft()function cssStyleGetClientLeft(){  return this.getLeft() - this.getMarginLeft() - this.getBorderLeftWidth() - this.getPaddingLeft();}/////////////////////////////////////////////////////////////////////////////// xbStyle.getClientWidth()function cssStyleGetClientWidth(){  return this.getMarginLeft() + this.getBorderLeftWidth() + this.getPaddingLeft() + this.getWidth() + this.getPaddingRight() + this.getBorderRightWidth() + this.getMarginRight();}/////////////////////////////////////////////////////////////////////////////// xbStyle.getClientHeight()function cssStyleGetClientHeight(){  return this.getMarginTop() + this.getBorderTopWidth() + this.getPaddingTop() + this.getHeight() + this.getPaddingBottom() + this.getBorderBottomWidth() + this.getMarginBottom();}////////////////////////////////////////////////////////////////////////xbStyle.prototype.getEffectiveValue     = xbStyleGetEffectiveValue;xbStyle.prototype.moveAbove             = xbStyleMoveAbove;xbStyle.prototype.moveBelow             = xbStyleMoveBelow;xbStyle.prototype.moveBy                = xbStyleMoveBy;xbStyle.prototype.moveTo                = xbStyleMoveTo;xbStyle.prototype.moveToAbsolute        = xbStyleMoveToAbsolute;xbStyle.prototype.resizeBy              = xbStyleResizeBy;xbStyle.prototype.resizeTo              = xbStyleResizeTo;if (document.all || document.getElementsByName){  xbStyle.prototype.getClip            = cssStyleGetClip;  xbStyle.prototype.setClip            = cssStyleSetClip;    xbStyle.prototype.getClipTop         = cssStyleGetClipTop;  xbStyle.prototype.setClipTop         = cssStyleSetClipTop;    xbStyle.prototype.getClipRight       = cssStyleGetClipRight;  xbStyle.prototype.setClipRight       = cssStyleSetClipRight;    xbStyle.prototype.getClipBottom      = cssStyleGetClipBottom;  xbStyle.prototype.setClipBottom      = cssStyleSetClipBottom;    xbStyle.prototype.getClipLeft        = cssStyleGetClipLeft;  xbStyle.prototype.setClipLeft        = cssStyleSetClipLeft;    xbStyle.prototype.getClipWidth       = cssStyleGetClipWidth;  xbStyle.prototype.setClipWidth       = cssStyleSetClipWidth;    xbStyle.prototype.getClipHeight      = cssStyleGetClipHeight;  xbStyle.prototype.setClipHeight      = cssStyleSetClipHeight;    xbStyle.prototype.getLeft            = cssStyleGetLeft;  xbStyle.prototype.setLeft            = cssStyleSetLeft;  xbStyle.prototype.getTop             = cssStyleGetTop;  xbStyle.prototype.setTop             = cssStyleSetTop;  xbStyle.prototype.getPageX           = cssStyleGetPageX;  xbStyle.prototype.setPageX           = cssStyleSetPageX;  xbStyle.prototype.getPageY           = cssStyleGetPageY;  xbStyle.prototype.setPageY           = cssStyleSetPageY;  xbStyle.prototype.getVisibility      = cssStyleGetVisibility;  xbStyle.prototype.setVisibility      = cssStyleSetVisibility;  xbStyle.prototype.getzIndex          = cssStyleGetzIndex;  xbStyle.prototype.setzIndex          = cssStyleSetzIndex;              xbStyle.prototype.getHeight          = cssStyleGetHeight;  xbStyle.prototype.setHeight          = cssStyleSetHeight;  xbStyle.prototype.getWidth           = cssStyleGetWidth;  xbStyle.prototype.setWidth           = cssStyleSetWidth;  xbStyle.prototype.getBackgroundColor = cssStyleGetBackgroundColor;  xbStyle.prototype.setBackgroundColor = cssStyleSetBackgroundColor;  xbStyle.prototype.getColor           = cssStyleGetColor;  xbStyle.prototype.setColor           = cssStyleSetColor;  xbStyle.prototype.setInnerHTML       = xbSetInnerHTML;  xbStyle.prototype.getBorderTopWidth    = cssStyleGetBorderTopWidth;  xbStyle.prototype.getBorderRightWidth  = cssStyleGetBorderRightWidth;  xbStyle.prototype.getBorderBottomWidth = cssStyleGetBorderBottomWidth;  xbStyle.prototype.getBorderLeftWidth   = cssStyleGetBorderLeftWidth;  xbStyle.prototype.getMarginLeft        = cssStyleGetMarginLeft;  xbStyle.prototype.getMarginTop         = cssStyleGetMarginTop;  xbStyle.prototype.getMarginRight       = cssStyleGetMarginRight;  xbStyle.prototype.getMarginBottom      = cssStyleGetMarginBottom;  xbStyle.prototype.getMarginLeft        = cssStyleGetMarginLeft;  xbStyle.prototype.getPaddingTop        = cssStyleGetPaddingTop;  xbStyle.prototype.getPaddingRight      = cssStyleGetPaddingRight;  xbStyle.prototype.getPaddingBottom     = cssStyleGetPaddingBottom;  xbStyle.prototype.getPaddingLeft       = cssStyleGetPaddingLeft;  xbStyle.prototype.getClientTop         = cssStyleGetClientTop;  xbStyle.prototype.getClientLeft        = cssStyleGetClientLeft;  xbStyle.prototype.getClientWidth       = cssStyleGetClientWidth;  xbStyle.prototype.getClientHeight      = cssStyleGetClientHeight;}else if (document.layers){  xbStyle.prototype.getClip            = nsxbStyleGetClip;  xbStyle.prototype.setClip            = nsxbStyleSetClip;    xbStyle.prototype.getClipTop         = nsxbStyleGetClipTop;  xbStyle.prototype.setClipTop         = nsxbStyleSetClipTop;    xbStyle.prototype.getClipRight       = nsxbStyleGetClipRight;  xbStyle.prototype.setClipRight       = nsxbStyleSetClipRight;    xbStyle.prototype.getClipBottom      = nsxbStyleGetClipBottom;  xbStyle.prototype.setClipBottom      = nsxbStyleSetClipBottom;    xbStyle.prototype.getClipLeft        = nsxbStyleGetClipLeft;  xbStyle.prototype.setClipLeft        = nsxbStyleSetClipLeft;    xbStyle.prototype.getClipWidth       = nsxbStyleGetClipWidth;  xbStyle.prototype.setClipWidth       = nsxbStyleSetClipWidth;    xbStyle.prototype.getClipHeight      = nsxbStyleGetClipHeight;  xbStyle.prototype.setClipHeight      = nsxbStyleSetClipHeight;    xbStyle.prototype.getLeft            = nsxbStyleGetLeft;  xbStyle.prototype.setLeft            = nsxbStyleSetLeft;  xbStyle.prototype.getTop             = nsxbStyleGetTop;  xbStyle.prototype.setTop             = nsxbStyleSetTop;  xbStyle.prototype.getPageX           = nsxbStyleGetPageX;  xbStyle.prototype.setPageX           = nsxbStyleSetPageX;  xbStyle.prototype.getPageY           = nsxbStyleGetPageY;  xbStyle.prototype.setPageY           = nsxbStyleSetPageY;  xbStyle.prototype.getVisibility      = nsxbStyleGetVisibility;  xbStyle.prototype.setVisibility      = nsxbStyleSetVisibility;  xbStyle.prototype.getzIndex          = nsxbStyleGetzIndex;  xbStyle.prototype.setzIndex          = nsxbStyleSetzIndex;              xbStyle.prototype.getHeight          = nsxbStyleGetHeight;  xbStyle.prototype.setHeight          = nsxbStyleSetHeight;  xbStyle.prototype.getWidth           = nsxbStyleGetWidth;  xbStyle.prototype.setWidth           = nsxbStyleSetWidth;  xbStyle.prototype.getBackgroundColor = nsxbStyleGetBackgroundColor;  xbStyle.prototype.setBackgroundColor = nsxbStyleSetBackgroundColor;  xbStyle.prototype.getColor           = nsxbStyleGetColor;  xbStyle.prototype.setColor           = nsxbStyleSetColor;  xbStyle.prototype.setInnerHTML       = nsxbSetInnerHTML;  xbStyle.prototype.getBorderTopWidth    = xbStyleNotSupported;  xbStyle.prototype.getBorderRightWidth  = xbStyleNotSupported;  xbStyle.prototype.getBorderBottomWidth = xbStyleNotSupported;  xbStyle.prototype.getBorderLeftWidth   = xbStyleNotSupported;  xbStyle.prototype.getMarginLeft        = xbStyleNotSupported;  xbStyle.prototype.getMarginTop         = xbStyleNotSupported;  xbStyle.prototype.getMarginRight       = xbStyleNotSupported;  xbStyle.prototype.getMarginBottom      = xbStyleNotSupported;  xbStyle.prototype.getMarginLeft        = xbStyleNotSupported;  xbStyle.prototype.getPaddingTop        = xbStyleNotSupported;  xbStyle.prototype.getPaddingRight      = xbStyleNotSupported;  xbStyle.prototype.getPaddingBottom     = xbStyleNotSupported;  xbStyle.prototype.getPaddingLeft       = xbStyleNotSupported;  xbStyle.prototype.getClientTop         = xbStyleNotSupported;  xbStyle.prototype.getClientLeft        = xbStyleNotSupported;  xbStyle.prototype.getClientWidth       = xbStyleNotSupported;  xbStyle.prototype.getClientHeight      = xbStyleNotSupported;  window.saveInnerWidth = window.innerWidth;  window.saveInnerHeight = window.innerHeight;  window.onresize = nsxbStyleOnresize;}else {  xbStyle.prototype.toString           = xbStyleNotSupported;  xbStyle.prototype.getClip            = xbStyleNotSupported;  xbStyle.prototype.setClip            = xbStyleNotSupported;  xbStyle.prototype.getClipTop         = xbStyleNotSupported;  xbStyle.prototype.setClipTop         = xbStyleNotSupported;  xbStyle.prototype.getClipRight       = xbStyleNotSupported;  xbStyle.prototype.setClipRight       = xbStyleNotSupported;  xbStyle.prototype.getClipBottom      = xbStyleNotSupported;  xbStyle.prototype.setClipBottom      = xbStyleNotSupported;  xbStyle.prototype.getClipLeft        = xbStyleNotSupported;  xbStyle.prototype.setClipLeft        = xbStyleNotSupported;  xbStyle.prototype.getClipWidth       = xbStyleNotSupported;  xbStyle.prototype.setClipWidth       = xbStyleNotSupported;  xbStyle.prototype.getClipHeight      = xbStyleNotSupported;  xbStyle.prototype.setClipHeight      = xbStyleNotSupported;  xbStyle.prototype.getLeft            = xbStyleNotSupported;  xbStyle.prototype.setLeft            = xbStyleNotSupported;  xbStyle.prototype.getTop             = xbStyleNotSupported;  xbStyle.prototype.setTop             = xbStyleNotSupported;  xbStyle.prototype.getVisibility      = xbStyleNotSupported;  xbStyle.prototype.setVisibility      = xbStyleNotSupported;  xbStyle.prototype.getzIndex          = xbStyleNotSupported;  xbStyle.prototype.setzIndex          = xbStyleNotSupported;  xbStyle.prototype.getHeight          = xbStyleNotSupported;  xbStyle.prototype.setHeight          = xbStyleNotSupported;  xbStyle.prototype.getWidth           = xbStyleNotSupported;  xbStyle.prototype.setWidth           = xbStyleNotSupported;  xbStyle.prototype.getBackgroundColor = xbStyleNotSupported;  xbStyle.prototype.setBackgroundColor = xbStyleNotSupported;  xbStyle.prototype.getColor           = xbStyleNotSupported;  xbStyle.prototype.setColor           = xbStyleNotSupported;  xbStyle.prototype.setInnerHTML       = xbStyleNotSupported;  xbStyle.prototype.getBorderTopWidth    = xbStyleNotSupported;  xbStyle.prototype.getBorderRightWidth  = xbStyleNotSupported;  xbStyle.prototype.getBorderBottomWidth = xbStyleNotSupported;  xbStyle.prototype.getBorderLeftWidth   = xbStyleNotSupported;  xbStyle.prototype.getMarginLeft        = xbStyleNotSupported;  xbStyle.prototype.getMarginTop         = xbStyleNotSupported;  xbStyle.prototype.getMarginRight       = xbStyleNotSupported;  xbStyle.prototype.getMarginBottom      = xbStyleNotSupported;  xbStyle.prototype.getMarginLeft        = xbStyleNotSupported;  xbStyle.prototype.getPaddingTop        = xbStyleNotSupported;  xbStyle.prototype.getPaddingRight      = xbStyleNotSupported;  xbStyle.prototype.getPaddingBottom     = xbStyleNotSupported;  xbStyle.prototype.getPaddingLeft       = xbStyleNotSupported;  xbStyle.prototype.getClientTop         = xbStyleNotSupported;  xbStyle.prototype.getClientLeft        = xbStyleNotSupported;  xbStyle.prototype.getClientWidth       = xbStyleNotSupported;  xbStyle.prototype.getClientHeight      = xbStyleNotSupported;}