// viewportOffset method taken from prototype 6
// viewportOffsetRight custom method

Element.addMethods(
	{
		viewportOffset: function(forElement) {
	    var valueT = 0, valueL = 0;
	
	    var element = forElement;
	    do {
	      valueT += element.offsetTop  || 0;
	      valueL += element.offsetLeft || 0;
	
	      // Safari fix
	      if (element.offsetParent == document.body &&
	        Element.getStyle(element, 'position') == 'absolute') break;
	
	    } while (element = element.offsetParent);
	
	    element = forElement;
	    do {
	      if (!Prototype.Browser.Opera || element.tagName == 'BODY') {
	        valueT -= element.scrollTop  || 0;
	        valueL -= element.scrollLeft || 0;
	      }
	    } while (element = element.parentNode);
	
	    return Element._returnOffset(valueL, valueT);
  	},
  	viewportOffsetRight: function(forElement) {
  		return document.viewport.getWidth() - forElement.viewportOffset()[0];
  	}
  }
);


Element._returnOffset = function(l, t) {
  var result = [l, t];
  result.left = l;
  result.top = t;
  return result;
};

document.viewport = {
  getDimensions: function() {
    var dimensions = { };
    var B = Prototype.Browser;
    $w('width height').each(function(d) {
      var D = d.capitalize();
      dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] :
        (B.Opera) ? document.body['client' + D] : document.documentElement['client' + D];
    });
    return dimensions;
  },

  getWidth: function() {
    return this.getDimensions().width;
  },

  getHeight: function() {
    return this.getDimensions().height;
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);
  }
};