

var wsb = wsb ? wsb : function()
{
	// xGetElementById r2, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xGetElementById(e)
	{
	  if (typeof(e) == 'string') {
	    if (document.getElementById) e = document.getElementById(e);
	    else if (document.all) e = document.all[e];
	    else e = null;
	  }
	  return e;
	}
	
	// xNum r2, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xNum()
	{
	  for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}
	  return true;
	}

	// xDef r1, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xDef()
	{
	  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
	  return true;
	}

	// xStr r1, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xStr(s)
	{
	  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
	  return true;
	}

	// xCamelize r1, Copyright 2007-2009 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xCamelize(cssPropStr)
	{
	  var i, c, a, s;
	  a = cssPropStr.split('-');
	  s = a[0];
	  for (i=1; i<a.length; ++i) {
	    c = a[i].charAt(0);
	    s += a[i].replace(c, c.toUpperCase());
	  }
	  return s;
	}

	// xGetComputedStyle r7, Copyright 2002-2007 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xGetComputedStyle(e, p, i)
	{
	  if(!(e=xGetElementById(e))) return null;
	  var s, v = 'undefined', dv = document.defaultView;
	  if(dv && dv.getComputedStyle){
	    s = dv.getComputedStyle(e,'');
	    if (s) v = s.getPropertyValue(p);
	  }
	  else if(e.currentStyle) {
	    v = e.currentStyle[xCamelize(p)];
	  }
	  else return null;
	  return i ? (parseInt(v) || 0) : v;
	}

	// xWidth r7, Copyright 2001-2009 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xWidth(e,w)
	{
	  var css, pl=0, pr=0, bl=0, br=0, gcs;
	  if(!(e=xGetElementById(e))) return 0;
	  if (xNum(w)) {
	    if (w<0) w = 0;
	    else w=Math.round(w);
	  }
	  else w=-1;
	  css=xDef(e.style);
	  if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
	    w = xClientWidth();
	  }
	  else if(css && xDef(e.offsetWidth) && xStr(e.style.width)) {
	    if(w>=0) {
	      if (document.compatMode=='CSS1Compat') {
	        gcs = xGetComputedStyle;
	        pl=gcs(e,'padding-left',1);
	        if (pl !== null) {
	          pr=gcs(e,'padding-right',1);
	          bl=gcs(e,'border-left-width',1);
	          br=gcs(e,'border-right-width',1);
	        }
	        // Should we try this as a last resort?
	        // At this point getComputedStyle and currentStyle do not exist.
	        else if(xDef(e.offsetWidth,e.style.width)){
	          e.style.width=w+'px';
	          pl=e.offsetWidth-w;
	        }
	      }
	      w-=(pl+pr+bl+br);
	      if(isNaN(w)||w<0) return;
	      else e.style.width=w+'px';
	    }
	    w=e.offsetWidth;
	  }
	  else if(css && xDef(e.style.pixelWidth)) {
	    if(w>=0) e.style.pixelWidth=w;
	    w=e.style.pixelWidth;
	  }
	  return w;
	}

	
	// xHeight r7, Copyright 2001-2009 Michael Foster (Cross-Browser.com)
	// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL
	function xHeight(e,h)
	{
	  var css, pt=0, pb=0, bt=0, bb=0, gcs;
	  if(!(e=xGetElementById(e))) return 0;
	  if (xNum(h)) {
	    if (h<0) h = 0;
	    else h=Math.round(h);
	  }
	  else h=-1;
	  css=xDef(e.style);
	  if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
	    h = xClientHeight();
	  }
	  else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {
	    if(h>=0) {
	      if (document.compatMode=='CSS1Compat') {
	        gcs = xGetComputedStyle;
	        pt=gcs(e,'padding-top',1);
	        if (pt !== null) {
	          pb=gcs(e,'padding-bottom',1);
	          bt=gcs(e,'border-top-width',1);
	          bb=gcs(e,'border-bottom-width',1);
	        }
	        // Should we try this as a last resort?
	        // At this point getComputedStyle and currentStyle do not exist.
	        else if(xDef(e.offsetHeight,e.style.height)){
	          e.style.height=h+'px';
	          pt=e.offsetHeight-h;
	        }
	      }
	      h-=(pt+pb+bt+bb);
	      if(isNaN(h)||h<0) return;
	      else e.style.height=h+'px';
	    }
	    h=e.offsetHeight;
	  }
	  else if(css && xDef(e.style.pixelHeight)) {
	    if(h>=0) e.style.pixelHeight=h;
	    h=e.style.pixelHeight;
	  }
	  return h;
	}
	
	// RETURN
	return {
		xGetElementById : function(e) {
			return xGetElementById(e);
		},
		xWidth : function(e, w) {
			return xWidth(e, w);
		},
		xHeight : function(e, h) {
			return xHeight(e, h);
		},
		xGetComputedStyle : function(e, p, i) {
			return xGetComputedStyle(e, p, i);
		},
		test2 : function() {
			alert('2');
		}
	};
}();

