/*
wwww.tigir.com - 06.07.2006

Source: http://www.tigir.com/js/opacity.js

Библиотека opacity.js к статье "CSS прозрачность (css opacity, javascript opacity)" - http://www.tigir.com/opacity.htm

setElementOpacity - установка прозрачности
getOpacityProperty - проверка, есть ли возможность менять прозрачность
fadeOpacity - плавное изменение прозрачности
*/

/* Функция кроссбраузерной установки прозрачности

Пример: setElementOpacity(document.body, 0.5); //сделать документ прозрачным на половину
*/
function setElementOpacity(oElem, nOpacity)
{
	var p = getOpacityProperty();
	(setElementOpacity = p=="filter"?new Function('oElem', 'nOpacity', 'nOpacity *= 100;	var oAlpha = oElem.filters["DXImageTransform.Microsoft.alpha"] || oElem.filters.alpha;	if (oAlpha) oAlpha.opacity = nOpacity; else oElem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")";'):p?new Function('oElem', 'nOpacity', 'oElem.style.'+p+' = nOpacity;'):new Function)(oElem, nOpacity);
}

// Функция getOpacityProperty() возвращает свойство которое используется для смены прозрачности или undefined, и может использоваться для проверки возможности изменения прозрачности
function getOpacityProperty()
{
	var p;
	if (typeof document.body.style.opacity == 'string') p = 'opacity';
	else if (typeof document.body.style.MozOpacity == 'string') p =  'MozOpacity';
	else if (typeof document.body.style.KhtmlOpacity == 'string') p =  'KhtmlOpacity';
	else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) p =  'filter';
	
	return (getOpacityProperty = new Function("return '"+p+"';"))();
}

/* Функции для плавного изменения прозрачности:

1) fadeOpacity.addRule('opacityRule1', 1, 0.5, 30); //вначале создаем правило, задаем имя правила, начальную прозрачность и конечную, необязательный параметр задержки, влийяющий на скорость смены прозрачности
2) fadeOpacity('elemID', 'opacityRule1'); // выполнить плавную смену прозрачности элемента с id равным elemID, по правилу opacityRule1
3) fadeOpacity.back('elemID'); //вернуться в исходное сотояние прозрачности
*/
function fadeOpacity(sElemId, sRuleName, bBackward)
{
//	if (fadeOpacity.aProc[sElemId]) 
	
	var elem = document.getElementById(sElemId);
	if (!elem || !getOpacityProperty() || !fadeOpacity.aRules[sRuleName]) return;

	if (!bBackward) elem.style.display="block";
	
	var rule = fadeOpacity.aRules[sRuleName];
	var nOpacity = rule.nStartOpacity;
	if (fadeOpacity.aProc[sElemId]) {clearInterval(fadeOpacity.aProc[sElemId].tId); nOpacity = fadeOpacity.aProc[sElemId].nOpacity;} 

	if (nOpacity==rule.nFinishOpacity && !bBackward) {fadeOpacity.back(sElemId);return;}
	if ((nOpacity==rule.nStartOpacity && bBackward) || (nOpacity==rule.nFinishOpacity && !bBackward)) {return;}

	fadeOpacity.aProc[sElemId] = {'nOpacity':nOpacity, 'tId':setInterval('fadeOpacity.run("'+sElemId+'")', fadeOpacity.aRules[sRuleName].nDalay), 'sRuleName':sRuleName, 'bBackward':Boolean(bBackward)};

}

fadeOpacity.addRule = function(sRuleName, nStartOpacity, nFinishOpacity, nDalay){fadeOpacity.aRules[sRuleName]={'nStartOpacity':nStartOpacity, 'nFinishOpacity':nFinishOpacity, 'nDalay':(nDalay || 30),'nDSign':(nFinishOpacity-nStartOpacity > 0?1:-1)};};

fadeOpacity.back = function(sElemId){if (fadeOpacity.aProc[sElemId]) fadeOpacity(sElemId,fadeOpacity.aProc[sElemId].sRuleName,true);};

fadeOpacity.run = function(sElemId)
{
	elem=document.getElementById(sElemId).style;
	var proc = fadeOpacity.aProc[sElemId];
	var rule = fadeOpacity.aRules[proc.sRuleName];
	
	proc.nOpacity = Math.round(( proc.nOpacity + .1*rule.nDSign*(proc.bBackward?-1:1) )*10)/10;
	setElementOpacity(document.getElementById(sElemId), proc.nOpacity);
	
	if (proc.nOpacity==rule.nStartOpacity || proc.nOpacity==rule.nFinishOpacity) clearInterval(fadeOpacity.aProc[sElemId].tId);
	if (proc.nOpacity==rule.nStartOpacity) elem.display="none"; 
}
fadeOpacity.aProc = {};
fadeOpacity.aRules = {};


// Slide

var $expandMaxHeight = 0;
var $expandInterval;

var GROW = 1;
var SHRINK = -1;


function smoothChange(object, factor) {
    var k = Math.abs((1 - object.offsetHeight/$expandMaxHeight) - object.offsetHeight/$expandMaxHeight);
    
    if (k<0.4) {
        var growth = 6*factor; //в середине элемента скорость прироста высоты быстрее
    } else {
        var growth = 3*factor; // чем в начале и конце элемента
    }
    
    if (
        ( (factor == GROW) && ((object.offsetHeight + growth) > $expandMaxHeight) ) ||
        ( (factor == SHRINK) && ((object.offsetHeight + growth) < 0) )
        )
    {
        growth = factor>0 ? ($expandMaxHeight - object.offsetHeight) : 0;
        clearInterval($expandInterval);
        $expandInterval = null;
    }
    
    object.style.height = object.offsetHeight + growth + 'px';
    if (factor == SHRINK && !$expandInterval) {
        object.style.height = $expandMaxHeight + 'px';
        object.style.display = 'none';
    }
}

function smoothShowVertical(object) {
    if ($expandInterval)
        return false;
        
    object.style.height = '0px';
    $expandInterval = setInterval(function(object) { return function () { smoothChange(object, GROW) } }(object), 20);
}

function smoothHideVertical(object) {    
    if ($expandInterval)
        return false;

    $expandInterval = setInterval(function(object) { return function () { smoothChange(object, SHRINK) } }(object), 20);
}

var CURRENT_TARGET;
function show(aID) {
    if ($expandInterval)
        return false;

    var target = document.getElementById(aID).style;
    var value = target.display == 'block' ? 'none' : 'block';
        
    if (CURRENT_TARGET && CURRENT_TARGET != target) {
        CURRENT_TARGET.display = 'none';
    };
    
    if (target.display == 'none') {
        CURRENT_TARGET = target;
        target.display = 'block';
    
        //---
        object = document.getElementById(aID);
        $expandMaxHeight = object.offsetHeight;
        object.style.height = '0px';

        smoothShowVertical(document.getElementById(aID));
        //---
    } else {
        $expandMaxHeight = object.offsetHeight;
        smoothHideVertical(document.getElementById(aID));
        //target.display = 'none';
    }
};

function checkComplaint(ID)
{
	obj=document.getElementById('compl'+ID);
	
	if (obj.value=='') alert('Вы должны указать причину!');
	else
	{
		complText=encodeURIComponent(obj.value);
		document.getElementById('poss'+ID).innerHTML='<img src="/img/loading.gif" align="left" />&nbsp;Отправка...';
		requestdata('/tpl/comments/action.php?id='+ID+'&complaint='+complText, 'poss'+ID)
	}
	
}

function openComplaint(ID)
{
str='<div class="complaint">';
str+='Укажите причину:<form name="complaint"><textarea rows="2" name="complaint" class="complaint" id="compl'+ID+'"></textarea><input type="button" value="Отправить жалобу" onclick="checkComplaint('+ID+')" /></form>';
str+='</div>';
document.getElementById('poss'+ID).innerHTML=str;
}


function checkMessage(ID)
{
	obj=document.getElementById('mess'+ID);
	if (obj.value=='') alert('Вы должны указать причину!');
	else
	{
		document.getElementById('f'+ID).innerHTML='<img src="/img/loading.gif" align="left" />&nbsp;Отправка...';
		requestdata('/fate/action.php?action=del&id='+ID+'&mess='+obj.value,'f'+ID);
	}
	
}

function openGetMessage(ID)
{
str='<div class="complaint">';
str+='Укажите причину:<form name="message"><textarea rows="2" name="message" class="complaint" id="mess'+ID+'"></textarea><input type="button" value="Отправить" onclick="checkMessage('+ID+')" /></form>';
str+='</div>';
document.getElementById('f'+ID).innerHTML=str;
}

function ignoreComment(ID)
{
// document.getElementById('poss'+ID).innerHTML='';
document.getElementById('inter'+ID).style.border="thin none white";
requestdata('/tpl/comments/action.php?action=ignore&id='+ID,'poss'+ID);
}