/*
 * 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)
 *
 */


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
			},
			
			elements,
			currentElm = 0
		;
		
		//extend defaults
		for ( name in settings )
			d[name] = settings[name];
	
		d.elements ? load(parseCustom) : load(parseAll);
	
	}
	else
		callback();

	function parseAll ()
	{	
		d.root ? elements = document.getElementById(d.root).all : elements = document.all;
		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(document.getElementById(elements[i][0]), elements[i][1] || d.method);
	}
	
	function fixIt(elm, method)
	{
		/*
		elm.attachEvent("onpropertychange", function() {
		  if (event.propertyName == "src" || event.propertyName == "backgroundImage" ) 
		  	alert(123);
		  	//fixIt(elm);
		  	
		});
		*/

		var s = elm.style,
			cs = elm.currentStyle,
			method = method || detMethod(cs),
			bg = cs.backgroundImage
		;

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



		//fix all png images width src
		if ( elm.src && elm.src.match(/\.png/) && !isInFilter(elm) )
		{	
			s.width = elm.width;
			s.height = elm.height;
			s.filter = filter(elm.src, method);
			elm.src = d.gif;
		};
		
		//fix background
		if ( bg && bg.match(/\.png/) && !isInFilter(elm) )
		{	
			if (cs.width == 'auto') s.width = elm.offsetWidth;
			s.filter = filter(bg, method);
			s.backgroundImage = 'none';
			
			//link fix.
		   for (var n = 0; n < elm.childNodes.length; n++)		
			if (elm.childNodes[n].style) elm.childNodes[n].style.position = 'relative';

		
		};


		

		fixed();
	}




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

	function isInFilter(elm)
	{	
		if (elm.className.match(d.noFixClass) )
			return true
		
		if (elm.id && d.filter)
			for (var i=0; i< d.filter.length; i++)
				if (elm.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 load(f)
	{
		d.onload ? window.attachEvent('onload', f) : f();
	}		


};



