//скрипты для фейдинга
//требует под себя функцию getObject из библиотеки js_misk.js
var fadeFrequency=50;
var fadeDelta=1;
var fadeOutArray=new Object();
var currId=null;

var zoomX=5;
var zoomY=1;
var zoomDelta=1;
var zoomFrequency=10;

function startFadeOut(targetElem, cElems)
{
  if (typeof(targetElem) == "string") tmp=getObject(targetElem);
  else tmp=targetElem;
  cElems=cElems || false;
  currId=null;
  uFadeOut(tmp);
}

function startFadeIn(targetElem, cElems)
{
  cElems=cElems || false;
  var tmp=new Array();
  if (typeof(targetElem) == "string") tmp[0]=getObject(targetElem);
  else tmp[0]=targetElem;
//  tmp[0]=targetElem;
  var num=cElems.length;
  for (var i = 0; i < num; i++)
    if (typeof(cElems[i]) == "string") tmp[i+1]=getObject(cElems[i]);
    else tmp[i+1]=cElems[i];
  //теперь в tmp - ряд, который нам нужно фэйдить
  //первый его элемент - это объект, вызвавший действие
//  uFadeIn(targetElem);
  uFadeIn(tmp);
}

function startZoomIn(targetID, maxLength, isHeight)
{
  var targetElem=getObject(targetID);
  if (!targetElem) return;
  var funcObj = arguments.callee;
  funcObj.maxLength = maxLength;
  funcObj.isHeight = isHeight;
  uZoomIn(targetElem);
}

function startZoomOut(targetID, maxLength, isHeight)
{
  var targetElem=getObject(targetID);
  if (!targetElem) return;
  var funcObj = arguments.callee;
  funcObj.maxLength = maxLength;
  funcObj.isHeight = isHeight;
  uZoomOut(targetElem);
}

function uZoomIn(targetElem)
{
  var funcObj = arguments.callee;
  funcObj.Timer = funcObj.Timer || false;
  //если таймер уже запущен, то надо очистить timeout:
  if (funcObj.Timer)
  {
    clearTimeout(funcObj.Timer);
    funcObj.Timer = null;
  }
  //теперь увеличиваем:
  if (startZoomIn.isHeight)
  {
    targetElem.style.height = parseInt(targetElem.style.height) + zoomX*zoomDelta + "px";
    var newVal=parseInt(targetElem.style.height);
  }
  else
  {
    targetElem.style.width = parseInt(targetElem.style.width) + zoomY*zoomDelta + "px";
    var newVal=parseInt(targetElem.style.width);
  }
  if (newVal < startZoomIn.maxLength)
  {
    c=targetElem;
    funcObj.Timer=setTimeout("uZoomIn(c)", zoomFrequency);
  }
}

function uZoomOut(targetElem)
{
  var funcObj = arguments.callee;
  funcObj.Timer = funcObj.Timer || false;
  //если таймер уже запущен, то надо очистить timeout:
  if (funcObj.Timer)
  {
    clearTimeout(funcObj.Timer);
    funcObj.Timer = null;
  }
  //теперь увеличиваем:
  if (startZoomOut.isHeight)
  {
    targetElem.style.height = parseInt(targetElem.style.height) - zoomX*zoomDelta + "px";
    var newVal=parseInt(targetElem.style.height);
  }
  else
  {
    targetElem.style.width = parseInt(targetElem.style.width) - zoomY*zoomDelta + "px";
    var newVal=parseInt(targetElem.style.width);
  }
  if (newVal > startZoomOut.maxLength)
  {
    c1=targetElem;
    funcObj.Timer=setTimeout("uZoomOut(c1)", zoomFrequency);
  }
}

function uFadeIn(targetElems)
{
  currId=targetElems[0].id;
  fadeOutArray[currId]=targetElems;
  var funcObj = arguments.callee;
  funcObj.IDArray = funcObj.IDArray || new Array();
  //если таймер уже запущен, то надо очистить timeout:
  if (funcObj.IDArray[currId])
  {
    clearTimeout(funcObj.IDArray[currId]);
    funcObj.IDArray[currId] = null;
  }
  if (uFadeOut.IDArray)
    if (uFadeOut.IDArray[currId])
    {
      clearTimeout(uFadeOut.IDArray[currId]);
      uFadeOut.IDArray[currId] = null;
    }
  //теперь понизим opasity:
  var allMax=true;
  for (var i = 0; i < fadeOutArray[currId].length; i++)
  {
    setOpacity(getNewOpasity(targetElems[i], -fadeDelta), targetElems[i]);
    if (targetElems[i].style.opacity!=0) allMax=false;
  }
  if (!allMax)
  {
    a=targetElems;
    funcObj.IDArray[currId]=setTimeout("uFadeIn(a)", fadeFrequency);
  }
}

function uFadeOut(targetElem)
{
  var funcObj = arguments.callee;
  funcObj.IDArray = funcObj.IDArray || new Array();
  //если таймер уже запущен, то надо очистить timeout:
  if (funcObj.IDArray[targetElem.id])
  {
    clearTimeout(funcObj.IDArray[targetElem.id]);
    funcObj.IDArray[targetElem.id] = null;
  }
  if (uFadeIn.IDArray)
    if (uFadeIn.IDArray[targetElem.id])
    {
      clearTimeout(uFadeIn.IDArray[targetElem.id]);
      uFadeIn.IDArray[targetElem.id] = null;
    }
  //теперь понизим opasity:
  var allMax=false;
  for (var key in fadeOutArray)
  {
    currId = currId || -1;
    if ((fadeOutArray[key]) && (key != currId))
    {
      for (var i = 0; i < fadeOutArray[key].length; i++)
      {
        if (fadeOutArray[key][i])
        {
          setOpacity(getNewOpasity(fadeOutArray[key][i], fadeDelta), fadeOutArray[key][i]);
          if (fadeOutArray[key][i].style.opacity==1) fadeOutArray[key][i]=null;
          else allMax=true;
        }
      }
    }
  }
  if (allMax)
  {
    b=targetElem;
    funcObj.IDArray[targetElem.id]=setTimeout("uFadeOut(b)", fadeFrequency);
  }
}

function setOpacity(value, targetObj)
{
 targetObj.style.opacity = value/10;
 targetObj.style.filter = 'alpha(opacity=' + value*10 + ')';
}

function getNewOpasity(targetObj, delta)
{
  var n=targetObj.style.opacity*10+delta;
  if (n<0) n=0;
  if (n>10) n=10;
  return n;
}
