/* Copyright (c) 2007 Paul Bakaus and Brandon Aaron || http://brandonaaron.net)
 * Dual licensed under the MIT and GPL licenses.
 * Rev: 3641 
 * Requires: jQuery 1.2+
 */
(function($){

$.dimensions= {
 version: '@VERSION'
};
$.each( [ 'Height', 'Width'],function(i,name){

 $.fn[ 'inner'+name] =function() {
 if(!this[0])return;
 
 var torl=name== 'Height'? 'Top': 'Left', borr=name== 'Height'? 'Bottom': 'Right'; 
 return num(this,name.toLowerCase() ) +num(this, 'padding'+torl) +num(this, 'padding'+borr);
};

 $.fn[ 'outer'+name] =function(options) {
 if(!this[0])return;
 
 var torl=name== 'Height'? 'Top': 'Left', borr=name== 'Height'? 'Bottom': 'Right'; 
 options= $.extend({margin:false},options|| {});
 
 return num(this,name.toLowerCase() )
 +num(this, 'border'+torl+ 'Width') +num(this, 'border'+borr+ 'Width')
 +num(this, 'padding'+torl) +num(this, 'padding'+borr)
 + (options.margin? (num(this, 'margin'+torl) +num(this, 'margin'+borr)) :0);
};
});
$.each( ['Left', 'Top'],function(i,name) {
$.fn[ 'scroll'+name] =function(val) {
 if(!this[0])return;
 
 return val!=undefined?
 
 this.each(function() {
 this==window||this==document?
 window.scrollTo( 
 name== 'Left'?val: $(window)[ 'scrollLeft'](),
 name== 'Top'?val: $(window)[ 'scrollTop']()
 ) :
 this[ 'scroll'+name] =val;
 }) :
 
 this[0] ==window||this[0] ==document?
 self[ (name== 'Left'? 'pageXOffset': 'pageYOffset') ] ||
 $.boxModel&&document.documentElement[ 'scroll'+name] ||
 document.body[ 'scroll'+name] :
 this[0][ 'scroll'+name];
};
});
$.fn.extend({
 position:function() {
 var left=0,top=0,elem=this[0],offset,parentOffset,offsetParent,results;
 
 if(elem) {
 offsetParent=this.offsetParent();
 
 offset =this.offset();
 parentOffset=offsetParent.offset();
 
 offset.top -=num(elem, 'marginTop');
 offset.left-=num(elem, 'marginLeft');
 
 parentOffset.top +=num(offsetParent, 'borderTopWidth');
 parentOffset.left+=num(offsetParent, 'borderLeftWidth');
 
 results= {
 top: offset.top -parentOffset.top,
 left:offset.left-parentOffset.left
 };
 }
 
 return results;
},

 offsetParent:function() {
 var offsetParent=this[0].offsetParent;
 while(offsetParent&& (!/^body|html$/i.test(offsetParent.tagName) && $.css(offsetParent, 'position') == 'static') )
 offsetParent=offsetParent.offsetParent;
 return$(offsetParent);
}
});
function num(el,prop) {
 return parseInt($.css(el.jquery?el[0]:el,prop))||0;
};
})(jQuery);