/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

var opacityHandler = new function()
{
	this.getOpacityType = function()
	{
		if (typeof(document.body.style.opacity) == 'string')
		{
			self.opacityType = 'opacity';
		}
		else if (typeof(document.body.style.MozOpacity) == 'string')
		{
			self.opacityType = 'MozOpacity';
		}
		else if (typeof(document.body.style.KhtmlOpacity) == 'string')
		{
			self.opacityType = 'KhtmlOpacity';
		}
		else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1] >= 5.5 )
		{
			var version = navigator.appVersion.match(/MSIE ([\d.]+);/)[1];
			if (version >= 8 && version < 9)
			{
				self.opacityRecursive =  true;
			}
			self.opacityType =  'filter';
		}
	}
	this.setOpacity = function(element, opacity)
	{
		if (!this.opacityType)
		{
			this.getOpacityType();
		}
		if (opacity < 0)
		{
			opacity = 0;
		}
		if (this.opacityType == "filter")
		{
			if (element.currentStyle.filter != '' && element.style.filter == '')
			{
				element.style.filter += element.currentStyle.filter;
			}
			try
			{
				element.filters.item('DXImageTransform.Microsoft.alpha').opacity = Math.round(opacity*100);
			}
			catch(error)
			{
				element.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+ Math.round(opacity*100) +")";
			}
		}
		else
		{
			element.style[this.opacityType] = opacity;
		}
		
		if (this.opacityRecursive)
		{
			for (var i=0; i<element.childNodes.length; i++)
			{
				if (element.childNodes[i].nodeType == '1')
				{
					var position = element.childNodes[i].currentStyle['position'];
					if (position == 'absolute' || position == 'relative')
					{
						this.setOpacity(element.childNodes[i], opacity);
					}
				}
			}
		}
		
	}
	this.getOpacity = function(element)
	{
		if (element.filters)
		{
			try 
			{
				opacity = element.filters.item("DXImageTransform.Microsoft.Alpha").opacity / 100;
			}
			catch(error)
			{
				opacity = 1;
			}
		}
		else if (window.getComputedStyle)
		{
			opacity = document.defaultView.getComputedStyle(element, null).getPropertyValue(this.opacityType);
		}
		return parseFloat(opacity);
	}
	var self = this;
	this.opacityType = false;
	this.opacityRecursive = false;
	addHandler(window, "load", this.getOpacityType);
}
