(function($) {
	$.fn.getOffsets = function(opt) {
		var $$ = $(this);
		
		var o = $.extend({
			checkFor: 'width',
			checkMargin: true,
			checkPadding: true
		}, opt);
		
		var totalOffset = 0;
		$$.each(function() {
			if (o.checkFor === 'height') {
				if (o.checkMargin) {
					totalOffset += (!isNaN(parseInt($(this).css('margin')))) ? (parseInt($(this).css('margin')) * 2) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('margin-top')))) ? parseInt($(this).css('margin-top')) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('margin-bottom')))) ? parseInt($(this).css('margin-bottom')) : 0;
				}
				if (o.checkPadding) {
					totalOffset += (!isNaN(parseInt($(this).css('padding')))) ? (parseInt($(this).css('padding')) * 2) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('padding-top')))) ? parseInt($(this).css('padding-top')) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('padding-bottom')))) ? parseInt($(this).css('padding-bottom')) : 0;
				}
			}
			if (o.checkFor === 'width') {
				if (o.checkMargin) {
					totalOffset += (!isNaN(parseInt($(this).css('margin')))) ? (parseInt($(this).css('margin')) * 2) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('margin-right')))) ? parseInt($(this).css('margin-right')) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('margin-left')))) ? parseInt($(this).css('margin-left')) : 0;
				}
				if (o.checkPadding) {
					// totalOffset += (!isNaN(parseInt($(this).css('padding')))) ? (parseInt($(this).css('padding')) * 2) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('padding-right')))) ? parseInt($(this).css('padding-right')) : 0;
					totalOffset += (!isNaN(parseInt($(this).css('padding-left')))) ? parseInt($(this).css('padding-left')) : 0;
				}
			}
		});
		
		return Math.round(totalOffset);
	};
	
	$.fn.realOffset = function() {
		var $$ = this.get(0);
		var x = y= 0;
		if ($$.offsetParent) {
			do {
				x += $$.offsetLeft;
				y += $$.offsetTop;
			} while ($$ = $$.offsetParent);
		}
		return {left: x, top: y};
	};
	
	$.pageSize = function(index) {
		var xScroll, yScroll;
		
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		
		var windowWidth, windowHeight;
		
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth; 
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
		
		
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){	
			pageWidth = xScroll;		
		} else {
			pageWidth = windowWidth;
		}
		
		arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
		if (typeof(index) !== 'undefined' && index < 4) {
			return arrayPageSize[index];
		}
		return arrayPageSize;
	};
	
	$.customPause = function(ms){
		var date = new Date();
		curDate = null;
		do{var curDate = new Date();}
		while( curDate - date < ms);
	};
	
	$.pageScroll = function(index){
		var xScroll, yScroll;
		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {// all other Explorers
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;	
		}
		arrayPageScroll = new Array(xScroll, yScroll);
		if (typeof(index) !== 'undefined') {
			if (index === 'x') {
				return arrayPageScroll[0];
			}
			if (index === 'y') {
				return arrayPageScroll[1];
			}
			if (index < 2) {
				return arrayPageScroll[index];
			}
		}
		return arrayPageScroll;
	};
})(jQuery);