	if (!elements)
		var elements = new Array();

	function fade(inEl, outEl)
	{
		var i = elements.length;
		elements[i] = outEl;
		elements[i].fadestate = 'out';
		fadeO(i);
		var i = elements.length;
		elements[i] = inEl;
		elements[i].fadestate = 'in';
		fadeI(i);
	}	

	function fadeO(num)
	{
		var elem = elements[num];

		if (!(elem.fadestate == 'out'))
			return;
		if (typeof(elem.level) == 'undefined')
		{
			elem.level = 100;
		}
		elem.level -= 20;
		if (elem.level < 10)
		{
			elem.level = 0;
			elem.style.filter = 'alpha(opacity = ' + elem.level + ')';
			elem.style.opacity = elem.level / 100.0;
			elem.style.MozOpacity = elem.level / 100.0;
			elem.style.visibility = 'hidden';
			elem.style.zIndex = 1;
		}
		else
		{
			elem.style.filter = 'alpha(opacity = ' + elem.level + ')';
			elem.style.opacity = elem.level / 100.0;
			elem.style.MozOpacity = elem.level / 100.0;
			window.setTimeout('fadeO(' + num + ')', 100);			
		}
	}

	function fadeI(num)
	{
		var elem = elements[num];
		if (!(elem.fadestate == 'in'))
			return;
		if (typeof(elem.level) == 'undefined')
		{
			elem.level = 0;
		}
		elem.level += 20;
		if (elem.level > 90)
		{
			elem.level = 100;
			elem.style.filter = 'alpha(opacity = ' + elem.level + ')';
			elem.style.opacity = elem.level / 100.0;
			elem.style.MozOpacity = elem.level / 100.0;
		}
		else
		{
			elem.style.visibility = 'visible';
			elem.style.zIndex = 2;
			elem.style.filter = 'alpha(opacity = ' + elem.level + ')';
			elem.style.opacity = elem.level / 100.0;
			elem.style.MozOpacity = elem.level / 100.0;
			window.setTimeout('fadeI(' + num + ')', 100);			
		}
	}

	function reg(obj, prop, func)
	{	
		if (obj[prop])
			var old = obj[prop];
		else
			var old = function() { };
		obj[prop] = function (e) { old(e); func(e); }
	}

	function registerFade(hide, cover)
	{
		
		var coverEl = document.getElementById(cover);
		var hideEl = document.getElementById(hide);

		function findInput(el)
		{
			if (el.nodeName == 'INPUT' || el.nodeName == 'input')
				return el;
			for (var child in el.childNodes)
			{
				var x = findInput(el.childNodes[child]);
				if (x) return x;
			}
			return false;
		}

		var inputEl = findInput(hideEl);

		coverEl.className = 'startin';
		hideEl.className = 'startout';

		var oldBodyMove = null;
		var bmo = false;

		var bodymove = function ()
		{
			document.body.onmousemove = oldBodyMove;
			bmo = false;
			hideEl.onmousemove = null;
			coverEl.onmousemove = null;
			if (!froze) fade(coverEl, hideEl);
		}

		var hidemove = function (e)
		{
			if (window.event) window.event.cancelBubble = true;
			if (e && e.stopPropagation()) e.stopPropagation();
		}

		var froze = false;

		reg(coverEl, 'onmouseover', function()
		{
			if (froze) return;
			if (bmo) return;
			bmo = true;
			oldBodyMove = document.body.onmousemove;
			reg(document.body, 'onmousemove', bodymove);
			reg(hideEl, 'onmousemove', hidemove);
			reg(coverEl, 'onmousemove', hidemove);
			fade(hideEl, coverEl);
		});

		function select()
		{
			froze = true;
			fade(hideEl, coverEl);
			inputEl.select();
		}

		function dofocus()
		{
			inputEl.focus();
		}

		function deselect()
		{
			fade(coverEl, hideEl);
			froze = false;
		}

		reg(coverEl, 'onclick', dofocus);
		reg(inputEl, 'onfocus', select);
		reg(inputEl, 'onblur', deselect);
	}