/** * Interface Elements for jQuery * utility function * * http://interface.eyecon.ro * * Copyright (c) 2006 Stefan Petre * Dual licensed under the MIT (MIT-LICENSE.txt) * and GPL (GPL-LICENSE.txt) licenses. * * */ jQuery.iUtil = { 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 + "')"; }); } }; // Helper function to support older browsers! [].indexOf || (Array.prototype.indexOf = function(v, n){ n = (n == null) ? 0 : n; var m = this.length; for (var i=n; i