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<s.length; i++) { if( this.checkMargin(s[i][1]) ) { auto[auto.length] = s[i][0];} else if( this.checkLopsided(s[i][1]) ) { lop[lop.length] = s[i][0];}
}
for(i=0; a = auto[i]; i++) { this.ss[this.ss.length-1].addRule(a, "margin-left : expression( IEmarginFix.autoFix(this) );");}
for(i=0; a = lop[i]; i++) { this.ss[this.ss.length-1].addRule(a, "margin-left : expression( IEmarginFix.lopsidedFix(this) );");}
this.list = auto.length > 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; 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;}, 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 ) { list = list.concat( IEmarginFix.getClass( a.substring(a.indexOf(".")+1) ) );} else if( a.charAt(0) == '#' ) { list[list.length] = document.all[a.substring(1)];} else { 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<list.length; i++) { elm = list[i]; if(elm && elm.style) { blk = IEmarginFix.getStyle(elm, "display"); if(blk != "block" && ( IEmarginFix.ie50 ? !IEmarginFix.ie50check(elm.tagName) : blk != "list-item" ) ) { elm.style.margin = 0;}}}}, checkMargin : function(str) { return ( str.search(/position\s*:\s*absolute/i) == -1 && ( str.match(/margin\s*:\s*auto(;|$)/i) || str.match(/margin\s*:\s*\S+\s+auto(;|$)/i) || ( str.match(/margin-left\s*:\s*auto/i) && str.match(/margin-right\s*:\s*auto/i) ) || str.match(/margin\s*:\s*\S+\s+auto\s+\S+(;|$)/i) || str.match(/margin\s*:\s*\S+\s+auto\s+\S+\s+auto/i) ));}, checkLopsided : function(str) { return ( str.search(/position\s*:\s*absolute/i) == -1 && ( str.match(/margin-left\s*:\s*auto/i) && str.match(/margin-right\s*:\s*\d+(px|%)?/i) || str.match(/margin-left\s*:\s*auto/i) && !str.match(/margin-right/i)
) );}, ie50 : navigator.appVersion.toLowerCase().indexOf("msie 5.0") != -1, ie50check : function(tag) { var i, r = false; tag = tag.toUpperCase(); for(i=0; i<this.blockElms.length; i++) { if(tag == this.blockElms[i]) { r = true;}
}
return r;}, blockElms : ["ADDRESS", "BLOCKQUOTE", "BODY", "CENTER", "COL", "COLGROUP", "DD", "DIR", "DIV", "DL", "DT", "FIELDSET", "FORM", "FRAME", "HN", "HR", "IFRAME", "LEGEND", "LI", "LISTING", "MARQUEE", "MENU", "OL", "P", "PLAINTEXT", "PRE", "TABLE", "TBODY", "TD", "TFOOT", "TH", "THEAD", "TR", "UL", "XMP"], getClass : function(cls) { var el, r, i; el = document.all ? document.all : document.getElementsByTagName('*'); r = []; for(i=0; el[i]; i++) { if(el[i].className == cls) { r[r.length] = el[i];}
}
if(r.length==0) { r = null;}
return r;}, getRules : function(wh) { var s = null; if(document.styleSheets && document.styleSheets.length) { var i, j, k, m, x, y, is = true, screen = true; s = []; for(i=0; i < document.styleSheets.length; i++) { j = document.styleSheets.item(i); if(wh) { is = (j.title || j.id) == wh;}
if( typeof j.media == "string" && j.media.length > 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(); 