﻿// Визуальные эффекты
// SiteCom company. 2007.

// Скрыть / отобразить пункты каталога (слева)
function hideCatalogLayers(sLayerID)
{
    // Получаем указатель на слой (div)
    var dLayer = document.getElementById(sLayerID);
    // Получаем высоту слоя (div height)
    var iHeight = parseInt(dLayer.style.height);

    // Слой (div) свертут
    var dtNow = new Date(); // Текущие время/дата
    
    // div свернут / развернут
    if(iHeight <= 0)
    {
        // Сдвигаем слой
        OnSlideLayer("down", dtNow.getTime(), 1500, null, 290);
        // Устанавливаем видимость слоя
        dLayer.style.visibility = "visible";
        
        // Обновляем надпись кнопки
        document.getElementById("CatalogExpLink").innerHTML = "...свернуть";
    }
    else
    {
        // Сдвигаем слой
        OnSlideLayer("up", dtNow.getTime(), 1500, null, 290);
        
        // Обновляем надпись кнопки    
        document.getElementById("CatalogExpLink").innerHTML = "...подробнее";
    }
}

function OnSlideLayer(sDirection, tStartTime, iTimeLenght, tTimer, iDivHeight)
{
    // Текущая дата
	var dtNow = new Date();
	dtNow = dtNow.getTime();

	// Получаем указатель на слой (div)
	oDivObject = document.getElementById("dCatalogMain");

    // Время работы раскрывания (сколь уже времени прошло)
	var tFlowTime = dtNow - tStartTime;
	// Проверяем - не закончилось ли время выполнения процесса
	if (tFlowTime < iTimeLenght)
	{ 
	    // Если время работы еще не закончилось
	    var iDistancePercent = (sDirection == "down") ? addNonlinearIncrement(tFlowTime / iTimeLenght) : 1 - addNonlinearIncrement(tFlowTime / iTimeLenght);
	
	    // Раздвигаем слой
	    oDivObject.style.height = iDistancePercent * iDivHeight +"px";
    	
    	// Запускаем таймер
	    tTimer = setTimeout(function(){OnSlideLayer(sDirection, tStartTime, iTimeLenght, tTimer, iDivHeight)}, 10);
	}
	else{ 
	    // Если процесс закончен
	    // Устанавливаем конечные значения
		  oDivObject.style.height = (sDirection=="down") ? iDivHeight + "px" : 0;
		  tTimer = null; // Очищаем память таймера
	}
}

// Нелинейное приращение
function addNonlinearIncrement(iPercent)
{
    // Возвращает косинусоидальное значение от процентной состовляющей
	  return (1 - Math.cos(iPercent * Math.PI)) / 2;
}