//
// var.jcmsShade.js
//

var jcmsShade =
{
	toString: function()
	{
		return '[object jcmsShade]';
	},
	
	onload: function()
	{
		var node = jcmsNode('jcmsShade');
		// There shouldn't be one!
		if (jcmsIsObject(node))
		{
			node.parentNode.removeChild(node);
		}
		// Create the shade's node.
		node = document.createElement('div');
		node.id = 'jcmsShade';
		node.style.position = 'absolute';
		node.style.visibility = 'hidden';
		node.style.background = 'black';
		if (navigator.userAgent.match(/MSIE [1-8]\.[0-9]/))
		{
			node.style.filter = 'alpha(opacity=50)';
		}
		else
		{
			node.style.opacity = '50';
		}
		node.style.zIndex = 10;
		document.body.insertBefore(node, document.body.firstChild);
	},
	
	GetNode: function()
	{
		return jcmsNode('jcmsShade');
	},
	
	SetZIndex: function(pZIndex)
	{
		if (JCMS_DEBUG)
		{
			if (!jcmsIsNumber(pZIndex))
			{
				throw 'jcmsShade.SetZIndex: invalid parameter: pZIndex: ' + jcmsGetType(pZIndex);
			}
			
			if (pZIndex < 0 || pZIndex > 1000)
			{
				throw 'jcmsShade.SetZIndex: invalid parameter value: pZIndex: ' + pZIndex + ' (0 <> 1000)';
			}
		}
		
		var node = this.GetNode();
		if(node)
		{
			node.style.zIndex = parseInt(pZIndex);
		}
	},
	
	GetZIndex: function()
	{
		var node = this.GetNode();
		if (node)
		{
			var zIndex = parseInt(node.style.zIndex);
			return (isNaN(zIndex) ? 0 : zIndex);
		}
		
		return undefined;
	},	
	
	SetOpacity: function(pOpacity)
	{
		if (JCMS_DEBUG)
		{
			if (!jcmsIsNumber(pOpacity))
			{
				throw 'jcmsShade.SetOpacity: invalid parameter: pOpacity: ' + jcmsGetType(pOpacity);
			}
			
			if (pOpacity < 0 || pOpacity > 1)
			{
				throw 'jcmsShade.SetOpacity: invalid parameter value: pOpacity: ' + pOpacity + ' (0.0 <> 1.0)';
			}
		}
		
		var node = this.GetNode();
		if (node)
		{
			jcmsSetOpacity(node, pOpacity);
		}
	},
	
	GetOpacity: function()
	{
		var node = this.GetNode();
		return jcmsGetOpacity(node);
	},
	
	Size: function()
	{
		var node = this.GetNode();
		if (node)
		{
			// Our little friend needs some time to think about it.
			if (navigator.userAgent.match(/MSIE 1?[1-9]\.[0-9]/))
			{
				window.setTimeout(
					function()
					{
						var node = jcmsShade.GetNode();
						if (node)
						{
							node.style.display = 'none';
							node.style.width
								= Math.max(
									document.documentElement.scrollWidth,
									document.documentElement.clientWidth) + 'px';
							node.style.height
								= Math.max(
									document.documentElement.scrollHeight,
									document.documentElement.clientHeight) + 'px';
							node.style.display = 'block';
						}
					},
					1);
			}
			else
			{
				node.style.display = 'none';
				node.style.width
					= Math.max(
						document.documentElement.scrollWidth,
						document.documentElement.clientWidth) + 'px';
				node.style.height
					= Math.max(
						document.documentElement.scrollHeight,
						document.documentElement.clientHeight) + 'px';
				node.style.display = 'block';
			}
		}
	},
	
	Resize: function()
	{
		var node = this.GetNode();
		if (node && node.style.visibility == 'visible')
		{
			this.Size();
		}
	},
	
	Show: function()
	{
		var node = this.GetNode();
		if (node)
		{
			this.Size();
			node.style.visibility = 'visible';
		}
	},
	
	Hide: function()
	{
		var node = this.GetNode();
		if (node)
		{
			node.style.width = '0px';
			node.style.height = '0px';
			node.style.visibility = 'hidden';
		}
	}
};

jcmsWindowEvents.Add('onload', function() { jcmsShade.onload(); });
jcmsWindowEvents.Add('onresize', function() { jcmsShade.Resize(); });
