/********************************************
 * Название:	Универсальнаый fade-эффект	*
 * Дата:		7 июня 2010 года.			*
 * Версия:		2							*
 * Автор:		Maligan						*
 ********************************************/
function fade ( eObject, nMin, nMax, fOn, fOff )
{
	/*
		Сохранение параметров в объекте
	*/
	// Скорость гашения\проявления
	eObject._fadeOn			= fOn;
	eObject._fadeOff		= fOn;
	// Максимальное\минимальное значение
	eObject._fadeMin		= nMin;
	eObject._fadeMax		= nMax;
	// Состояние сейчас
	eObject._fadeOpacity	= nMin;
	// Таймер повтора
	eObject._fadeTimer		= 0;
	// Установка прозрачности на минимум
	_setOpacity (eObject, nMin);
	// Задание функции обработки
	eObject.onmouseover	= function () { return _fade(this, fOn); };
	eObject.onmouseout	= function () { return _fade(this, -fOff); };
	
	/*
		Функция обработки
	*/
	function _fade( eObject, fSpeed )
	{
		// Сброс старого таймера
		clearTimeout(eObject._fadeTimer);
		// Выбор условия для завершения изменения
		if ((fSpeed > 0) ? (eObject._fadeOpacity < eObject._fadeMax) : (eObject._fadeOpacity > eObject._fadeMin))
		{
			eObject._fadeOpacity 	+= fSpeed;
			eObject._fadeTimer		= setTimeout( function () { return _fade(eObject, fSpeed) }, 25);
			_setOpacity (eObject, eObject._fadeOpacity);
		}
		return true;
	}

	/*
		Кроссбраузерная прозрачность
	*/
	function _setOpacity( eObject, fOpacity )
	{
		var property = _getProperty();
		if (!eObject || !property) return false; // Если не существует элемент с указанным id или браузер не поддерживает ни один из известных функции способов управления прозрачностью
	  
		if (property == "filter")  // Internet Exploder 5.5+
		{
			fOpacity *= 100;
			// Если уже установлена прозрачность, то меняем её через коллекцию filters, иначе добавляем прозрачность через style.filter
			var oAlpha = eObject.filters['DXImageTransform.Microsoft.alpha'] || eObject.filters.alpha;
			if (oAlpha) oAlpha.opacity = fOpacity;
			else eObject.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+fOpacity+")"; // Для того чтобы не затереть другие фильтры используем "+="
		}
		else eObject.style[property] = fOpacity;
	}

	function _getProperty()
	{
		if (typeof document.body.style.opacity == 'string')				// CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9)
			return 'opacity';
		else if (typeof document.body.style.MozOpacity == 'string') 	// Mozilla 1.6 и младше, Firefox 0.8 
			return 'MozOpacity';
		else if (typeof document.body.style.KhtmlOpacity == 'string') 	// Konqueror 3.1, Safari 1.1
			return 'KhtmlOpacity';
		else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) // Internet Exploder 5.5+
			return 'filter';
		return false;
	}
}
