jQuery.iUtil = {
	// get elements position
	getPosition: function(e){
		var x = 0;
		var y = 0;
		var es = e.style;
		var restoreStyles = false;
		
		if( jQuery(e).css('display') == 'none' ){
			var oldVisibility = es.visibility;
			var oldPosition = es.position;
			
			restoreStyles = true;
			es.visibility = 'hidden';
			es.display = 'block';
			es.position = 'absolute'
		}
		
		var el = e;

		while (el) {
			x += el.offsetLeft + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderLeftWidth) || 0 : 0);
			y += el.offsetTop + (el.currentStyle && !jQuery.browser.opera ? parseInt(el.currentStyle.borderTopWidth) || 0 : 0);
			el = el.offsetParent
		}
		
		el = e;
		
		while (el && el.tagName && el.tagName.toLowerCase() != 'body') {
			x -= el.scrollLeft || 0;
			y -= el.scrollTop || 0;
			el = el.parentNode
		}
		
		if (restoreStyles == true) {
			es.display = 'none';
			es.position = oldPosition;
			es.visibility = oldVisibility
		}
		
		return {
			x: x,
			y: y
		}
	},
	getPositionLite: function (el) {
		var x = 0,
		y = 0;
		while (el) {
			x += el.offsetLeft || 0;
			y += el.offsetTop || 0;
			el = el.offsetParent
		}
		return {
			x: x,
			y: y
		}
	},
	getSize: function (e) {
		var w = jQuery.css(e, 'width');
		var h = jQuery.css(e, 'height');
		var wb = 0;
		var hb = 0;
		var es = e.style;
		if (jQuery(e).css('display') != 'none') {
			wb = e.offsetWidth;
			hb = e.offsetHeight
		} else {
			var oldVisibility = es.visibility;
			var oldPosition = es.position;
			es.visibility = 'hidden';
			es.display = 'block';
			es.position = 'absolute';
			wb = e.offsetWidth;
			hb = e.offsetHeight;
			es.display = 'none';
			es.position = oldPosition;
			es.visibility = oldVisibility
		}
		return {
			w: w,
			h: h,
			wb: wb,
			hb: hb
		}
	},
	getSizeLite: function (el) {
		return {
			wb: el.offsetWidth || 0,
			hb: el.offsetHeight || 0
		}
	},
	getClient: function (e) {
		var h, w, de;
		if (e) {
			w = e.clientWidth;
			h = e.clientHeight
		} else {
			de = document.documentElement;
			w = window.innerWidth || self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
			h = window.innerHeight || self.innerHeight || (de && de.clientHeight) || document.body.clientHeight
		}
		return {
			w: w,
			h: h
		}
	},
	getScroll: function (e) {
		var t = 0,
		l = 0,
		w = 0,
		h = 0,
		iw = 0,
		ih = 0;
		if (e && e.nodeName.toLowerCase() != 'body') {
			t = e.scrollTop;
			l = e.scrollLeft;
			w = e.scrollWidth;
			h = e.scrollHeight;
			iw = 0;
			ih = 0
		} else {
			if (document.documentElement) {
				t = document.documentElement.scrollTop;
				l = document.documentElement.scrollLeft;
				w = document.documentElement.scrollWidth;
				h = document.documentElement.scrollHeight
			} else if (document.body) {
				t = document.body.scrollTop;
				l = document.body.scrollLeft;
				w = document.body.scrollWidth;
				h = document.body.scrollHeight
			}
			iw = self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
			ih = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0
		}
		return {
			t: t,
			l: l,
			w: w,
			h: h,
			iw: iw,
			ih: ih
		}
	},
	getMargins: function (e, toInteger) {
		var el = jQuery(e);
		var t = el.css('marginTop') || '';
		var r = el.css('marginRight') || '';
		var b = el.css('marginBottom') || '';
		var l = el.css('marginLeft') || '';
		if (toInteger) return {
			t: parseInt(t) || 0,
			r: parseInt(r) || 0,
			b: parseInt(b) || 0,
			l: parseInt(l)
		};
		else return {
			t: t,
			r: r,
			b: b,
			l: l
		}
	},
	getPadding: function (e, toInteger) {
		var el = jQuery(e);
		var t = el.css('paddingTop') || '';
		var r = el.css('paddingRight') || '';
		var b = el.css('paddingBottom') || '';
		var l = el.css('paddingLeft') || '';
		if (toInteger) return {
			t: parseInt(t) || 0,
			r: parseInt(r) || 0,
			b: parseInt(b) || 0,
			l: parseInt(l)
		};
		else return {
			t: t,
			r: r,
			b: b,
			l: l
		}
	},
	getBorder: function (e, toInteger) {
		var el = jQuery(e);
		var t = el.css('borderTopWidth') || '';
		var r = el.css('borderRightWidth') || '';
		var b = el.css('borderBottomWidth') || '';
		var l = el.css('borderLeftWidth') || '';
		if (toInteger) return {
			t: parseInt(t) || 0,
			r: parseInt(r) || 0,
			b: parseInt(b) || 0,
			l: parseInt(l) || 0
		};
		else return {
			t: t,
			r: r,
			b: b,
			l: l
		}
	},
	getPointer: function (event) {
		var x = event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft)) || 0;
		var y = event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop)) || 0;
		return {
			x: x,
			y: y
		}
	},
	traverseDOM: function (nodeEl, func) {
		func(nodeEl);
		nodeEl = nodeEl.firstChild;
		while (nodeEl) {
			jQuery.iUtil.traverseDOM(nodeEl, func);
			nodeEl = nodeEl.nextSibling
		}
	},
	purgeEvents: function (nodeEl) {
		jQuery.iUtil.traverseDOM(nodeEl, function (el) {
			for (var attr in el) {
				if (typeof el[attr] === 'function') {
					el[attr] = null
				}
			}
		})
	},
	centerEl: function (el, axis) {
		var clientScroll = jQuery.iUtil.getScroll();
		var windowSize = jQuery.iUtil.getSize(el);
		if (!axis || axis == 'vertically') jQuery(el).css({
			top: clientScroll.t + ((Math.max(clientScroll.h, clientScroll.ih) - clientScroll.t - windowSize.hb) / 2) + 'px'
		});
		if (!axis || axis == 'horizontally') jQuery(el).css({
			left: clientScroll.l + ((Math.max(clientScroll.w, clientScroll.iw) - clientScroll.l - windowSize.wb) / 2) + 'px'
		})
	},
	fixPNG: function (el, emptyGIF) {
		var images = jQuery('img[@src*="png"]', el || document),
		png;
		images.each(function () {
			png = this.src;
			this.src = emptyGIF;
			this.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + png + "')"
		})
	}
};
