function FixPng(img, src)
{
	if(img.getAttribute("pngnofix") == "1")
	{
		return;
	}
	if(src != "Transparent.gif")
	{
		var imgName = src.toUpperCase()
		if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
		{
			var oldonmouseover = img.onmouseover;
			var oldonmouseout = img.onmouseout;
			var oldStyle = "";
			if(img.style)
			{
				oldStyle = img.style.cssText;
			}
			if(img.getAttribute("processed") == "1")
			{
				oldStyle = img.getAttribute("oldStyle");
				oldonmouseover = img.getAttribute("oldonmouseover");
				oldonmouseout = img.getAttribute("oldonmouseout");
			}
			var style = "width:" + img.width + "px; height:" + img.height + "px;"
				+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
				+ "(src=\'" + src + "\', sizingMethod='scale');";
			style += oldStyle;
			img.style.cssText = style;
			img.src = "Transparent.gif";
			img.setAttribute("oldonmouseover", oldonmouseover);
			img.setAttribute("oldonmouseout", oldonmouseout);
			img.setAttribute("oldStyle", oldStyle);
			img.setAttribute("processed", "1");
						
			if (typeof img.onmouseover != 'function') {
				img.onmouseover = function() {FixThisPng(img);}
			} else {
				img.onmouseover = function() {
					if (oldonmouseover) {
						oldonmouseover();
					}
					FixThisPng(img);
				}
			}
			
			if (typeof img.onmouseover != 'function') {
				img.onmouseout = function() {FixThisPng(img);}
			} else {
				img.onmouseout = function() {
					if (oldonmouseout) {
						oldonmouseout();
					}
					FixThisPng(img);
				}
			}			
		}
	}
}

function FixThisPng(img)
{
	FixPng(img, this.src);
}

function FixAllPng()
{
	var arVersion = navigator.appVersion.split("MSIE")
	var version = parseFloat(arVersion[1])

	if ((version >= 5.5) && (document.body.filters)) 
	{
		for(var i=0; i<document.images.length; i++)
		{
			var img = document.images[i];
			FixPng(img, img.src);
		}
	}
}

function OnPngLoaded() {
	var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
	var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
	for (var i = document.all.length - 1, obj = null; (obj = document.all[i]); i--) {
		if (itsAllGood && obj.currentStyle.backgroundImage.match(/\.png/i) != null) {
			FixBackground(obj);
			obj.attachEvent("onpropertychange", OnPropertyChanged);
		}
	}
}

function OnPropertyChanged() {
	if (window.event.propertyName == "style.backgroundImage") {
		var el = window.event.srcElement;
		if (!el.currentStyle.backgroundImage.match(/x\.gif/i)) {
			var bg	= el.currentStyle.backgroundImage;
			var src = bg.substring(5,bg.length-2);
			el.filters.item(0).src = src;
			el.style.backgroundImage = "url(x.gif)";
		}
	}
}

function GetElementPosition(obj) {
    var position = {x:0, y:0, width:0, height:0};
	var curleft = curtop = 0;
	var currentObject = obj;
	if (currentObject.offsetParent) {
		curleft = currentObject.offsetLeft;
		curtop = currentObject.offsetTop;
		while (currentObject = currentObject.offsetParent) {
			curleft += currentObject.offsetLeft;
			curtop += currentObject.offsetTop;
		}
	}
	position.x = curleft;
	position.y = curtop;
	position.width = obj.offsetWidth;
	position.height = obj.offsetHeight;
	return position;
}

function RestoreBackground(obj)
{
	oldStyle = obj.getAttribute("oldStyle");
	obj.style.cssText = oldStyle;
}

function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	if(level > 1)return "";
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

var CurrentThis;

function PrepareAndEval(functionObject)
{
	if(!functionObject)return false;
	functionText = "" + functionObject;
	firstBrace = functionText.indexOf('{');
	lastBrace = functionText.lastIndexOf('}');
	functionText = functionText.substring(firstBrace + 1, lastBrace);
	functionText = functionText.replace("this", "CurrentThis");
	if (window.execScript) {
		return window.execScript(functionText);
	} else {
		return eval(functionText);
	}
}

function FixBackground(obj) {	
	var bg	= obj.currentStyle.backgroundImage;
	var src = bg.substring(5,bg.length-2);
	var dofix = 0;
	var scale = 0;
	if(obj.getAttribute("pngbgscale") == "1")
	{
		dofix = 1;
		scale = 1;
	}
	else if(obj.getAttribute("pngbgnoscale") == "1")
	{	
		dofix = 1;
		scale = 0;
	}
	else if(obj.getAttribute("pngnofix") == "1")
	{
	}
	else
	{
		if((obj.currentStyle.backgroundRepeat == "no-repeat") || (obj.currentStyle.backgroundRepeat == ""))
		{
			dofix = 1;
			scale = 0;
		}
	}
	if(dofix)
	{
		var oldonmouseover = obj.onmouseover;
		var oldonmouseout = obj.onmouseout;
		var oldStyle = "";
		if(obj.style)
		{
			oldStyle = obj.style.cssText;
		}
		var style = "";
		var objectPosition = GetElementPosition(obj);
		if(objectPosition.height == 0)
		{
			objectPosition.height = 1;
		}
		style += "height:" + objectPosition.height + "px;";
		if(scale)
		{
			style += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', src='" + src + "', sizingMethod='scale');";
		}
		else
		{
			style += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true', src='" + src + "', sizingMethod='crop');";
		}
		style += oldStyle;
		obj.style.cssText = style;
		obj.style.backgroundImage = "url(x.gif)";
		if(obj.getAttribute("processed") == "1")
		{
		}
		else
		{
			obj.setAttribute("processed", "1");
			var originalCode = "" + oldonmouseover;
			if (typeof obj.onmouseover == 'function') {
				obj.onmouseover = function() {
					RestoreBackground(obj);
					var result  = false;
					CurrentThis = obj;
					result = PrepareAndEval(oldonmouseover);
					FixThisBackground(obj);
					return result;
				}
			}
			
			if (typeof obj.onmouseout == 'function') {
				obj.onmouseout = function() {
					RestoreBackground(obj);
					var result  = false;
					CurrentThis = obj;
					result = PrepareAndEval(oldonmouseout);
					FixThisBackground(obj);
					return result;
				}
			}		
		}	
	}	
}

function FixThisBackground(obj)
{
	FixBackground(obj);
}

var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;
if(IE6)
{
	FixAllPng();
		
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = OnPngLoaded;
	} else {
		window.onload = function() {
			if (oldonload) {
				oldonload();
			}
			OnPngLoaded();
		}
	}
}