/*************************************************************************** * Internet Explorer Margin Fix * Copyright 2002-2005 by David Schontzler and contributors * http://iemarginfix.sourceforge.net * Distributed under the Academic Free License 2.1 or above * Description: This script will fix the horizontal margin support in IE5-7 *************************************************************************** * Version: 2.4.0.src * $Revision: 14 $ * $LastChangedDate: 2007-05-21 08:33:19 -0700 (Mon, 21 May 2007) $ ***************************************************************************/ IEmarginFix = { list : [], ss : null, needsFixed: (function() { var ua = navigator.userAgent; return /msie [5-7]\./i.test(ua) && !/mac/i.test(ua) && document.compatMode != "CSS1Compat" && window.attachEvent && document.styleSheets.length > 0; })(), init : function() { if(IEmarginFix.needsFixed) { this.ss = document.styleSheets; var auto, lop, list, s, i, a; auto = []; lop = []; list = []; s = this.getRules(); for(i=0; i 0 ? lop.length > 0 ? auto.concat(lop) : auto : lop; window.attachEvent("onload", IEmarginFix.checkInline); } }, autoFix : function(elm) { var rslt = "auto", w = elm.currentStyle.width; var id = elm.id ? "#" + elm.id : elm.className ? elm.tagName + "." + elm.className : elm.tagName; // Credit: BS if(w.indexOf("%") != -1) { rslt = ( 100 - parseInt(w) )/2 + "%"; IEmarginFix.ss[IEmarginFix.ss.length-1].addRule(id, "margin-left : " + rslt + "; margin-right : " + rslt + "; width : 100%"); } else IEmarginFix.ss[IEmarginFix.ss.length-1].addRule(id, "margin-left : expression( IEmarginFix.pxAutoFix(this) );"); return rslt; }, // so we don't have to go through the if...else all over again! pxAutoFix : function(elm) { var rslt, par = elm.parentNode; rslt = par.clientWidth > 0 ? par.clientWidth : par.scrollWidth; rslt = (rslt - elm.offsetWidth) / 2; return Math.max(rslt, 0); }, lopsidedFix : function(elm) { var par = elm.parentNode, parWidth, rslt; parWidth = par.clientWidth > 0 ? par.clientWidth : par.scrollWidth; rslt = parWidth - elm.offsetWidth; if( elm.currentStyle.marginRight.indexOf("px") != -1 ) { rslt -= parseInt( elm.currentStyle.marginRight ); } else if( elm.currentStyle.marginRight.indexOf("%") != -1 ) { rslt -= parseInt(elm.currentStyle.marginRight) * 0.01 * parWidth; } rslt -= ( parseInt(par.currentStyle.paddingLeft) + parseInt(par.currentStyle.paddingRight) ); return rslt; }, checkInline : function() { var i, a, elm, blk, list = [], auto = IEmarginFix.list; for(i=0; a = auto[i]; i++) { if( a.indexOf(".") != -1 ) { // classes list = list.concat( IEmarginFix.getClass( a.substring(a.indexOf(".")+1) ) ); } else if( a.charAt(0) == '#' ) { // ids list[list.length] = document.all[a.substring(1)]; } else { // tags elm = document.getElementsByTagName(a); if(elm.length > 0) { for(i=0; i < elm.length; i++) { list = list.concat( elm.item(i) ); } } } } for(i=0; i 0 && !j.media.match(/^(screen)|(media)$/i) ) { screen = false; } else { screen = true; } if(!j.disabled && screen && is) { if(j.rules) { if(j.imports && j.imports.length) { for(k=0; k < j.imports.length; k++) { for(x=0; y = j.imports[k].rules[x]; x++) { s[s.length] = [y.selectorText, y.style.cssText]; } } } for(k=0; m = j.rules[k]; k++) { s[s.length] = [m.selectorText, m.style.cssText]; } } else { return null; } } if(wh && is) { break; } else { is = true; } } } return s; }, getStyle : function(obj,sty) { var sty2 = IEmarginFix.compactStyle(sty); var r = obj.style[sty2]; if(r=='') { if(document.defaultView) { r = document.defaultView.getComputedStyle(obj,'').getPropertyValue(sty); } else r = obj.currentStyle[sty2]; } if(!r) { r = null; } return r; }, compactStyle : function(str) { var s = str.split('-'); var o = [s[0]]; for(i=1;(j=s[i]);i++) { o[o.length] = j.charAt(0).toUpperCase(); o[o.length] = j.substring(1) }; return o.join(''); } }; IEmarginFix.init();