function ImageFadeClass()
{
	var objDiv			= null;
	var objLink			= null;
	var objImage		= null;
	var objImageList	= null;
	var objTimeout		= null;
	var bIsRunning		= false;
	var nTimeout		= 0;
	var nPause			= 0;
	var nPercent		= 0;
	var nIndex			= 0;
	var nOpacity		= 0;
	var nSleep			= 0;

	this.initFade = function()
	{
		return(initFade.apply(this, arguments));
	};

	this.startFade = function()
	{
		return(startFade.apply(this, arguments));
	};

	this.stopFade = function()
	{
		return(stopFade.apply(this, arguments));
	};

	function initFade(vDiv, vImageList, vTimeout, vPause, vPercent)
	{
		if(typeof(vDiv) === 'string')
		{
			objDiv = document.getElementById(vDiv);
		}
		else if(typeof(vDiv) === 'object')
		{
			objDiv = vDiv;
		};

		if((vDiv === null) && (objDiv.nodeType !== 1))
		{
			return(false);
		};

		if((typeof(vImageList) !== 'object') || (vImageList === null))
		{
			return(false);
		};

		objImageList = [];

		for(var sKey in vImageList)
		{
			var objImg = new Image();
				objImg.src = sKey;
				objImg.url = vImageList[sKey];

			objImageList.push(objImg);
		};

		if(isNaN(nTimeout = parseInt(vTimeout)) || !nTimeout)
		{
			nTimeout = 40;
		};

		if(isNaN(nPause = parseInt(vPause)) || !nPause)
		{
			nPause = 5000;
		};

		if(isNaN(nPercent = parseInt(vPercent)) || !nPercent)
		{
			nPercent = 4;
		};

		nIndex = 0;
		nOpacity = 0;
		nSleep = 0;

		objLink = document.createElement('a');
		objLink.appendChild(objImage = document.createElement('img'));

		loadSettings.call(this);
		loadImage.call(this);
		setOpacity.call(this);

		objDiv.appendChild(objLink);

		return(startFade.call(this));
	};

	function startFade()
	{
		if(!bIsRunning)
		{
			bIsRunning = true;

			objTimeout = setTimeout(function(){updateFade.call(this)}, Math.min(Math.max((nSleep - new Date().getTime()), 0), nPause));
		};

		return(true);
	};

	function stopFade()
	{
		if(bIsRunning)
		{
			if(objTimeout)
			{
				clearTimeout(objTimeout);

				objTimeout = null;
			};

			bIsRunning = false;
		};

		return(true);
	};

	function loadImage()
	{
		if(objImageList.length)
		{
			if(nIndex < objImageList.length)
			{
				objDiv.style.backgroundImage = 'url(' + objImageList[nIndex].src + ')';
			}
			else
			{
				objDiv.style.backgroundImage = 'url(' + objImageList[0].src + ')';
			};

			if((nIndex + 1) < objImageList.length)
			{
				objImage.src = objImageList[nIndex + 1].src;
				objLink.href = objImageList[nIndex + 1].url;
			}
			else
			{
				objImage.src = objImageList[0].src;
				objLink.href = objImageList[0].url;
			};

			return(true);
		};

		return(false);
	};

	function setOpacity()
	{
		if(typeof(objImage.style.opacity) == 'string')
		{
			objImage.style.opacity = (nOpacity / 100).toString();
		}
		else if(typeof(objImage.style.MozOpacity) == 'string')
		{
			objImage.style.MozOpacity = (nOpacity / 100).toString();
		}
		else
		{
			objImage.style.filter = 'Alpha(opacity=' + nOpacity.toString() + ')';
		};

		return(true);
	};

	function updateFade()
	{
		if(bIsRunning)
		{
			if(nOpacity < 100)
			{
				nOpacity += nPercent;
				nSleep = parseInt(new Date().getTime() + nTimeout);

				setOpacity.call(this);
				saveSettings.call(this);

				objTimeout = setTimeout(function(){updateFade.call(this)}, nTimeout);
			}
			else
			{
				nIndex = (((nIndex + 1) < objImageList.length) ? (nIndex + 1) : 0);
				nOpacity = 0;
				nSleep = parseInt(new Date().getTime() + nPause);

				loadImage.call(this);
				setOpacity.call(this);
				saveSettings.call(this);

				objTimeout = setTimeout(function(){updateFade.call(this)}, nPause);
			};
		};

		return(bIsRunning);
	};

	function loadSettings()
	{
		for(var i = 0, objCookies = document.cookie.split('; '), sName, sValue, nValue, objValue, nPos; i < objCookies.length; i++)
		{
			if((nPos = objCookies[i].indexOf('=')) !== (-1))
			{
				sName = unescape(objCookies[i].substr(0, nPos));
				sValue = unescape(objCookies[i].substr(nPos + 1));

				if(sName == objDiv.id)
				{
					if((objValue = sValue.split(',')).length === 3)
					{
						nIndex = (isNaN(parseInt(objValue[0])) ? 0 : parseInt(objValue[0]));
						nOpacity = (isNaN(parseInt(objValue[1])) ? 0 : parseInt(objValue[1]));
						nSleep = (isNaN(parseInt(objValue[2])) ? 0 : parseInt(objValue[2]));
					};
				};
			};
		};

		return(true);
	};

	function saveSettings()
	{
		document.cookie = objDiv.id + '=' + escape([nIndex, nOpacity, nSleep].join(',')) + '; path=/';

		return(true);
	};
};

