function blockError(){return true;}
window.onerror = blockError;
   
if(!Array.prototype.push)
{
	Array.prototype.push =  function()
	{
		var i;
		for(i=0; j=arguments[i]; i++) this[this.length] = j;
		return this.length;
	}
}

IEmarginFix =
{
	run : null,
	
	kill : function()
	{
		clearTimeout("IEmarginFix.run");
	},
	
	init : function()
	{
		var valid = navigator.userAgent.toLowerCase().indexOf('mac') == -1 && document.all && document.getElementsByTagName && document.compatMode != "CSS1Compat";
		if(!valid) return;
		var ss = document.styleSheets;
		var auto, list, s, i, elm, expr, blk;
		auto = new Array();
		list = new Array();
		s = this.getRules();
		
		for(i=0; i<s.length; i++)
			if( this.checkMargin(s[i][1]) )
				auto.push(s[i][0]);
		
		for(i=0; a = auto[i]; i++)
		{
			ss[ss.length-1].addRule(a, "position : relative; left : expression((this.parentNode.offsetWidth - this.offsetWidth) / 2);");
		}
		this.list = auto;
		
		if(window.attachEvent) window.attachEvent("onload", IEmarginFix.checkInline);
	},
	
	checkInline : function()
	{
		var i, a, elm, blk, list = new Array(), auto = IEmarginFix.list;
		for(i=0; a = auto[i]; i++)
		{
			if( a.charAt(0) == '.' )
				list = list.concat( IEmarginFix.getClass(a.substring(1)) );
			else if( a.charAt(0) == '#' )
				list.push( document.all[a.substring(1)] );
			else
				list = list.concat( document.getElementsByTagName(a) );
		}
		
		for(i=0; i<list.length; i++)
		{
			elm = list[i];
			if(elm)
			{
				blk = IEmarginFix.getStyle(elm, "display");
				if(blk != "block" && ( IEmarginFix.ie50 ? !IEmarginFix.ie50check(elm.tagName) : blk != "list-item" ) ) // check for existence and block item
				{
					elm.style.position = "static";
					elm.style.left = "auto";
				}
			}
		}
	},
	
	checkMargin : function(str)
	{
		return (
			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)
		);
	},
	
	/* these next few methods are basically for IE 5.0's bad interpretation of the "display" property
	(always returning "inline" unless explicitly set, even for block elements! */
	
	ie50 : navigator.appVersion.toLowerCase().indexOf("msie 5.0") != -1,
	
	ie50check : function(tag)
	{
		var i;
		tag = tag.toUpperCase();
		for(i=0; i<this.blockElms.length; i++)
			if(tag == this.blockElms[i])
				return true;
		return false;
	},
	
	blockElms : new Array("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"),
	
	/* end IE5.0 detect */
	
	getClass : function(cls)
	{
		var el, r, i;
		el = document.all ? document.all : document.getElementsByTagName('*');
		r = new Array();
		for(i=0; el[i]; i++) if(el[i].className == cls) r.push(el[i]);
		if(r.length!=0) return r;
		else return null;
	},
	
	getRules : function(wh) // grabs all the styles
	{
		if(document.styleSheets && document.styleSheets.length)
		{
			var i, j, k, m, x, y, s = new Array(), is = true;
			for(i=0; i < document.styleSheets.length; i++)
			{
				j = document.styleSheets.item(i);
				if(wh) is = (j.title || j.id) == wh;
				if(is)
				{
					if(j.cssRules) // mozilla
					{
						for(k=0; m = j.cssRules.item(k); k++)
						{
							if(m.styleSheet && m.styleSheet.cssRules.length) // imported sheets
								for(x=0; y = m.styleSheet.cssRules.item(x); x++) s.push([y.selectorText, y.style.cssText]);
							else s.push([m.selectorText, m.style.cssText])
						}
					}
					else if(j.rules) // explorer
					{
						if(j.imports && j.imports.length)
						{
							for(k=0; m = j.imports[k]; k++)
								for(x=0; y = m.rules[x]; x++)
									s.push([y.selectorText, y.style.cssText]);
						}
						for(k=0; m = j.rules[k]; k++)
								s.push([m.selectorText, m.style.cssText]);
					}
				}
				if(wh && is) break;
				else is = true;
			}
		}
		return s || null;
	},
	
	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) return r; else return null;
	},

	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();




//The example above example includes the IE8.js library int the page if the version of Internet Explorer is less than 8.
<!--[if lt IE 8]>
<script src="http://ie7-js.googlecode.com/svn/version/2.0(beta3)/IE8.js" type="text/javascript"></script>
<![endif]-->




