/*
 * xpngFix 1.0 
 *
 * fix for semitransparent png24 in IE6
 *
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Copyright (c) 2008 Oleg Slobodskoi (ajaxsoft.de)
 *
 */

var xpngFix_loaded = false;

function xpngFix (settings, callback)
{
	if (typeof settings == 'function')
		callback = settings;
	else if (typeof callback != 'function')
		callback = function(){};
	


	if ( /MSIE\s(5\.5|6\.)/.test(navigator.userAgent) ) 
	{
		//defaults
		var 
			d = {
				gif: '/js/xpngFix/spacer.gif',
				method: null,
				elements: null,
				filter: null,
				root: null,
				noFixClass: 'no-pngFix',
				onload: true,
				applyPositioning: false,
				onmouseover: true
			},
			
			elements,
			currentElem = 0
		;
		
		//extend defaults
		for ( name in settings )
			d[name] = settings[name];
	
		d.elements ? load(parseCustom) : load(parseAll);
	
	}
	else
		callback();

	function parseAll ()
	{	
		
		elements = d.root ? $(d.root).all : document.all;
		//add the root element too
		if (d.root)	elements[elements.length] = d.root;
		
		for (var i=0; i<= elements.length; i++)
				fixIt(elements[i], d.method);
	};
	
	function parseCustom ()
	{
		elements = d.elements;
		for (var i=0; i< elements.length; i++)
			fixIt($(elements[i][0]), elements[i][1] || d.method);
	};
	
	function fixIt(elem, method)
	{
		if (!elem) return;
		var s = elem.style,
			cs = elem.currentStyle,
			method = method || detMethod(cs),
			bg = cs.backgroundImage
		;

		if (bg) bg = bg.substring(5,bg.length-2);



		//fix all png images width src
		if ( elem.src && elem.src.match(/\.png/) && !isInFilter(elem) )
		{	
			s.width = elem.offsetWidth;
			s.height = elem.offsetHeight;
			s.filter = filter(elem.src, method);
			elem.src = d.gif;
			elem.attachEvent('onpropertychange', function() {
				event.propertyName == "src" && fixIt(elem, method);			 	
			});
		};
		
		//fix background
		if ( bg && bg.match(/\.png/) && !isInFilter(elem) )
		{	
			if (cs.width == 'auto') s.width = elem.offsetWidth;
			s.filter = filter(bg, method);
			s.backgroundImage = 'none';

			//link fix.
			if (d.applyPositioning) 
			for (var i = 0; i < elem.childNodes.length; i++)		
				if ( elem.childNodes[i].style && elem.childNodes[i].style.position === '')
					elem.childNodes[i].style.position = 'relative';
					
		};
		fixed();
	};




	function fixed()
	{
		currentElem++;
		currentElem >= elements.length && setTimeout(callback,10);
	};

	function isInFilter(elem)
	{	
		if (elem.className.match(d.noFixClass) )
			return true
		
		if (elem.id && d.filter)
			for (var i=0; i< d.filter.length; i++)
				if (elem.id == d.filter[i])
					return true;
	};
	
	function filter (src, method)
	{
		return "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='"+method+"')";
	};

	function detMethod(cs)
	{
		return cs.backgroundRepeat == 'no-repeat' ? 'crop' : 'scale';
	};
	
	function $ (elem)
	{
		return typeof elem == 'object' ? elem : document.getElementById(elem);
	};
	
	function load(f)
	{
		d.onload && !xpngFix_loaded ? window.attachEvent('onload', f) : f();
		xpngFix_loaded=true;
	};		

	return true;

};




