Position = { 
  X:function(elem) {
    return this.findPos(elem)[0];
  },
  Y:function(elem) {
    return this.findPos(elem)[1];
  },  
  H:function(elem) {
    return this.getElementHeight(elem);
  },  
  W:function(elem) {
    return this.getElementWidth(elem);
  },  
  getElementHeight:function(elem) {
  	xPos = elem.offsetHeight;
  	return xPos;
  }, 
  R:function(elem) {
    return this.X(elem)+this.W(elem);
  },
  B:function(elem) {
    return this.Y(elem)+this.H(elem);
  },
  v:function() {
    return this.documentWidth();
  },
  docH:function() {
    return this.documentHeight();
  }, 
  docW:function() {
    return this.documentWidth();
  }, 
  pageB:function() {
    return this.documentScollTop()+this.docH();
  },
  getElementWidth:function(elem) {
    xPos = elem.offsetWidth;
  
  	return xPos;
  },
  setX:function(obj,x) {
    parentObj=obj.parentNode;
    var difX = 0;
    try {
      while(parentObj){
        if(getStyle(parentObj,'position')=='relative' || getStyle(parentObj,'position')=='absolute') {
          difX-=this.X(parentObj);
          break;
        }
        parentObj = parentObj.parentNode;
      }
    }
    catch(e) {
      difX = 0; 
    }
    obj.style.left = (x+difX)+'px';    
  },
  setY:function(obj,y) {
    parentObj=obj.parentNode;
    var difY = 0;
    while(parentObj){
      if(getStyle(parentObj,'position')=='relative' || getStyle(parentObj,'position')=='absolute') {
        difY-=this.Y(parentObj);
        break;
      }
      parentObj = parentObj.parentNode;
    }
    obj.style.top = (y+difY)+'px';
  },
  setR:function(obj,x) {
    parentObj=obj.parentNode;
    var difX = 0;
    while(parentObj){
      if(getStyle(parentObj,'position')=='relative' || getStyle(parentObj,'position')=='absolute') {
        difX-=this.docW()-(this.X(parentObj) + this.W(parentObj));
        break;
      }
      parentObj = parentObj.parentNode;
    }
    obj.style.right = (x+difX)+'px';    
  },
  findPosX:function(obj)
  {
  	var curleft = 0;
  	if (obj.offsetParent)
  	{
  		while (obj.offsetParent)
  		{
  			curleft += obj.offsetLeft;
  			obj = obj.offsetParent;
  		}
  	}
  	else if (obj.x) 
	  curleft += obj.x;// + this.X(obj.parentNode);
  	return curleft;
  },  
  findPosY:function(obj)
  {
    var curtop = 0;
  	if (obj.offsetParent)
  	{
  		while (obj.offsetParent)
  		{
  			curtop += obj.offsetTop
  			obj = obj.offsetParent;
  		}
  	}
  	else if (obj.y)
  		curtop += obj.y;
  	return curtop;
  },
  findPos:function(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
  },
  realOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return [valueL, valueT];
  },
  documentWidth:function() {
    if( typeof( window.innerWidth ) == 'number' ) {
      //Non-IE
      return window.innerWidth;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
      //IE 6+ in 'standards compliant mode'
      return document.documentElement.clientWidth;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
      //IE 4 compatible
      return document.body.clientWidth;
    }
  },
  documentScollTop:function() {
    if ( document.documentElement && (document.documentElement.scrollTop)) {
    	var browserTopY = document.documentElement.scrollTop;
    } else {
    	var browserTopY = document.body.scrollTop;
    } 
    return browserTopY;
  },
  documentHeight:function() {
    if( typeof( window.innerWidth ) == 'number' ) {
      //Non-IE
      return window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
      //IE 6+ in 'standards compliant mode'
      return document.documentElement.clientHeight;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
      //IE 4 compatible
      return document.body.clientHeight;
    }
  }
}

function getStyle( element, cssRule )
{
  if(element == document || element == window) return false;
  if( document.defaultView && document.defaultView.getComputedStyle )
  {
    var value = document.defaultView.getComputedStyle( element, '' ).getPropertyValue( 
      cssRule.replace( /[A-Z]/g, function( match, char ) 
      { 
        return "-" + char.toLowerCase(); 
      } ) 
    );
  }
  else if ( element.currentStyle ) var value = element.currentStyle[ cssRule ];
  else                             var value = false;
  return value;
}