function setElementOpacity(objElem, nOpacity)
{
	var opacityProp = getOpacityProperty();

	if(!objElem || !opacityProp)
		return; // Если не существует элемент с указанным id или браузер не поддерживает ни один из известных функции способов управления прозрачностью

	if (opacityProp=="filter")  // Internet Exploder 5.5+
	{
		nOpacity *= 100;

		// Если уже установлена прозрачность, то меняем её через коллекцию filters, иначе добавляем прозрачность через style.filter
		var oAlpha = objElem.filters['DXImageTransform.Microsoft.alpha'] || objElem.filters.alpha;
		if(oAlpha)
			oAlpha.opacity = nOpacity;
		else
			objElem.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")"; // Для того чтобы не затереть другие фильтры используем "+="
	}
	else // Другие браузеры
		objElem.style[opacityProp] = nOpacity;
}

function getOpacityProperty()
{
	if(typeof document.body.style.opacity == 'string') // CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9, IE7)
		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; //нет прозрачности
}

function getElementPosition(elemId)
{
	var elem = document.getElementById(elemId);
	var w = elem.offsetWidth;
	var h = elem.offsetHeight;

	var l = 0;
	var t = 0;

	while (elem)
	{
		l += elem.offsetLeft;
		t += elem.offsetTop;
		elem = elem.offsetParent;
	}
	return {"left":l, "top":t, "width": w, "height":h};
}

function OpasityFilter(objElement,fDuration,bShow,fEndOpasity)
{
	if(fEndOpasity==undefined)
		fEndOpasity = 1.0;

	if(bShow)
	{
		objElement.style.visibility = "visible";

		objElement.fOffset = fEndOpasity/(fDuration*40);
		objElement.fEnd = fEndOpasity;
		objElement.fCurOpasity = 0;
		setElementOpacity(objElement,0);

		objElement.ShowFn = function()
		{
			objElement.fCurOpasity += objElement.fOffset;

			setElementOpacity(objElement,objElement.fCurOpasity);
			if(objElement.fCurOpasity>=objElement.fEnd)
			{
				objElement.fCurOpasity=objElement.fEnd;
				setElementOpacity(objElement,objElement.fEnd);
				if(objElement.fEnd==1.0 && objElement.runtimeStyle)
				{
					objElement.style.filter = '';
				}
				return;
			}
			setTimeout(objElement.ShowFn,25);
		}
		objElement.ShowFn();
	}
	else
	{
		objElement.style.visibility = "visible";

		objElement.fOffset = fEndOpasity/(fDuration*40);
		objElement.fEnd = 0;
		objElement.fCurOpasity = fEndOpasity;

		objElement.HideFn = function()
		{
			objElement.fCurOpasity -= objElement.fOffset;

			setElementOpacity(objElement,objElement.fCurOpasity);
			if(objElement.fCurOpasity<=0)
			{
				objElement.fCurOpasity = 0;
				setElementOpacity(objElement,0);
				objElement.style.visibility = "hidden";
				return;
			}
			setTimeout(objElement.HideFn,25);
		}
		objElement.HideFn();
	}
}

function OpasityDivImg(sImgID,sDivBackID,sDivContentID,bBorder)
{
	if(bBorder==undefined)
		bBorder = true;
	this.m_sImgID = sImgID;
	this.m_sDivBackID = sDivBackID;
	this.m_sDivContentID = sDivContentID;
	this.m_fOpasityBack = 0.6;
	this.m_fShowHideTime = 0.12;
	this.m_fOpasityCur = this.m_fOpasityBack;
	this.m_bVisible = false;
	this.m_bActive = false;
	this.m_bBorder = bBorder;

	this.m_objImg = document.getElementById(sImgID);
	this.m_objDivBack = document.getElementById(sDivBackID);
	this.m_objDivContent = document.getElementById(sDivContentID);

	this.m_iTimeoutID = null;

	this.Show = function()
	{
		if(!this.obj)
			return;

		var objThis = this.obj;
		var domImg = document.getElementById(objThis.m_sImgID);
		if(domImg==null)
			return;
		var domDivBack = document.getElementById(objThis.m_sDivBackID);
		if(domDivBack==null)
			return;
		var domDivContent = document.getElementById(objThis.m_sDivContentID);
		if(domDivContent==null)
			return;

		if(g_aObjCurent!=null && g_aObjCurent!=objThis)
		{
			g_aObjCurent.Hide(true);
		}

		if(objThis.m_bVisible)
		{
			if(objThis.m_iTimeoutID!=null)
				clearTimeout(objThis.m_iTimeoutID);
			return;
		}

		var aImgPos = getElementPosition(objThis.m_sImgID);

		if(objThis.m_bBorder)
			domImg.style.border='#3E609F solid 2px;';

		domDivBack.style.left = (aImgPos.left+(domImg.offsetWidth/2))+"px";
		domDivBack.style.top= (aImgPos.top+(domImg.offsetHeight/2))+8+"px";

		domDivContent.style.left = domDivBack.style.left;
		domDivContent.style.top= domDivBack.style.top;

		objTab = domDivContent.childNodes[0];

		if(objTab.tagName!="TABLE")
		{
			objTab = domDivContent.childNodes[1];
		}

		domDivContent.style.width = objTab.offsetWidth+20+"px";
		domDivContent.style.height = objTab.offsetHeight+20+"px";

		domDivBack.style.width = objTab.offsetWidth+20+"px";
		domDivBack.style.height = objTab.offsetHeight+20+"px";


		OpasityFilter(domDivBack,objThis.m_fShowHideTime,true,objThis.m_fOpasityBack);
		OpasityFilter(domDivContent,objThis.m_fShowHideTime,true,1.0);

		objThis.m_bVisible = true;
		objThis.m_bActive = true;
		g_aObjCurent = objThis;
	}

	this.Leave = function()
	{
		if(!this.obj)
			return;
		objMain = this.obj;
		objMain.m_bActive = false;
		if(objMain.m_iTimeoutID!=null)
			clearTimeout(objMain.m_iTimeoutID);
		objMain.m_iTimeoutID = setTimeout("objMain.Hide()",100);
	}

	this.Hide = function(bForce)
	{
		if(bForce==undefined)
			bForce=false;
		var objThis = this;

		clearTimeout(objThis.m_iTimeoutID);
		objThis.m_iTimeoutID = null;

		if(!bForce && objThis.m_bActive==true)
		{
			return;
		}

		if(objThis.m_bVisible==false)
			return;

		var domImg = document.getElementById(objThis.m_sImgID);
		if(domImg==null)
			return;
		var domDivBack = document.getElementById(objThis.m_sDivBackID);
		if(domDivBack==null)
			return;
		var domDivContent = document.getElementById(objThis.m_sDivContentID);
		if(domDivContent==null)
			return;


		var aImgPos = getElementPosition(objThis.m_sImgID);

		if(objThis.m_bBorder)
			domImg.style.border='#A7BADC solid 2px;';

//		domDivBack.style.visibility = "hidden";
//		domDivContent.style.visibility = "hidden";

		if(domDivContent.style.visibility!='hidden')
		{
			OpasityFilter(domDivBack,objThis.m_fShowHideTime,false,objThis.m_fOpasityBack);
			OpasityFilter(domDivContent,objThis.m_fShowHideTime,false,1.0);
		}

		objThis.m_bVisible = false;
		g_aObjCurent = null;
	}

	this.m_objImg.onmouseover = this.Show;
	this.m_objImg.onmousemove = this.Show;
	this.m_objImg.onmouseout = this.Leave;

	this.m_objDivBack.onmouseover = this.Show;
	this.m_objDivBack.onmousemove = this.Show;
	this.m_objDivBack.onmouseout = this.Leave;

	this.m_objDivContent.onmouseover = this.Show;
	this.m_objDivContent.onmousemove = this.Show;
	this.m_objDivContent.onmouseout = this.Leave;

	this.m_objImg.obj = this;
	this.m_objDivBack.obj = this;
	this.m_objDivContent.obj = this;

//	setElementOpacity(sDivBackID,this.m_fOpasityBack);
}

var g_aDivs = Array();
var g_aObjCurent = null;
