// window JS version 3.120
// Relmax(c)

// ver. revision
// 201107 - CloseDIV with working paramIDX
// 201107 - ReDrawMyShadow(mainId)
// 201106 - ShowAImage(this);
// 201103 - ShowDiv();
// 201103 - ver.3; Show-Hide Slowly (SHS) additional; 
// 201102xx Show-Hide Slowly
// 201101xx MAGISTR REVISION
// 201012xx

/*
in ver 3.
- ShowAImage()
- SHSa
*/


/*
in ver 2.
- DIV.style.width fixed
- ShowImage here
----------
- fixed WHeight
- fixed scrollTop

*/



// ---------------------------------------------------------
// Проверка на заполнение всех обязательных полей формы
// Возвращает false, если проверка не прошла
// need - список названий полей: |fio|company|city|email|
function SubmitFormCheck(formObj,need)
{

  //Проверка на заполнение обязательных полей
  var idx;
  var selId = 0;
  var tname;
  var tempStr;
  var emailObj = '';
  for (idx = 0; idx < formObj.elements.length; idx++)
  {
    tempObj = formObj.elements.item(idx);
    tname = tempObj.name;

    tempStr = 'need.match(/\\|' + tname + '\\|/)';
    tempStr = eval(tempStr);

    if (tempStr != null) // Поле нужно проверить
    {
      if (tempObj.value == '') selId = selId + 1;
    }

    if ((tname == 'email')&&(tempStr !=null))
    {
      emailObj = tempObj;
    }
  }

  /// Если были незаполненные поля
  if (selId > 0)
  {
    alert('Please, fill all required fields');
    return false;
  }

  /// Проверка E-mail
  if (emailObj != '')
  {
    selId = 0;
        
    var re = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/
    tempStr = emailObj.value.match(re);
    if (tempStr == null)
    {
      selId = selId + 1;
    }
    
    if (selId > 0)
    {
      alert('Please, enter currect E-mail');
      return false;
    }
  }

  return true;
}



// ===================================================================
// Получение полного размера страницы
// Возвращает массив: ar[0]=height; ar[1]=width;
function GetPageSize()
{
  var HWidth = document.body.clientWidth;
  var HHeight = document.body.clientHeight;
  
  var SizeDIV = document.getElementById('mainDiv'); //Вычисление полного размера страницы
  if (SizeDIV)
  {
    if (HWidth < SizeDIV.offsetWidth) {HWidth = SizeDIV.offsetWidth;};
    if (HHeight < SizeDIV.offsetHeight) {HHeight = SizeDIV.offsetHeight};
  }

  //alert(HWidth + ' | ' + HHeight);
  
  var ar = new Array();
  ar[0] = HHeight;
  ar[1] = HWidth;

  return ar;
}

//==================================================================
// Получение абсолютных позиций объекта
// <- ar[0]=top; ar[1]=left; ar[2]=body
function GetBodyOffset(obj)
{
  var top = 0;
  var left = 0;
  var theObj=obj
  while (obj && (obj != document.body)) 
  {
    top += obj.offsetTop;
    left += obj.offsetLeft;
    obj = obj.offsetParent;
  }

  // Цикл для определения прокрутки внутри какого-либо DIV
  obj = theObj
  while (obj && (obj != document.body)) 
  {
    top = top - obj.scrollTop;
    obj = obj.parentNode;
  }

  var values = new Array();
  values[0] = top;
  values[1] = left;
  values[2] = obj;
  return values
}


// =====================================
// Проверка, что барузером является IE
function IsIE()
{
  // Проверка на браузер "Опера"
  var is_opera = /opera/i.test(navigator.userAgent);
  
  // Проверка на браузер "Опера" с учетом маскировки
  var is_ie = ( /msie/i.test(navigator.userAgent) && !is_opera );

  return is_ie;
}

// --------- WINDOW -----------  

// =======================================================================================
//DIV с IFRAME для скрытия <select> при наложении поверх него каких-либо окон в IE
function ShowWCH(w,h,t,l,DivId)
{
  if (!IsIE()) {return};
  if (typeof(DivId)=='object')
  {
    if (DivId.id != '') {DivId = DivId.id + 'WCH';}
    else (DivId = '');
  }
  if (!DivId) {DivId = 'wchDiv';};

  WCH = document.getElementById(DivId);
  if (!WCH) {return};

  WCH.style.width = w;
  WCH.style.height = h;
  WCH.style.top = t;
  WCH.style.left = l;

  WCH.style.display = 'inline';
  WCH.firstChild.style.height = h; //Изменение высоты вложенного IFRAME

}

// =======================================================================================
// Выключить WCH
function HideWCH(id)
{
  if (!IsIE()) {return};
  if (!id) {id = 'wchDiv';};

  WCH = document.getElementById(id);
  if (!WCH) {return};
  WCH.style.display = 'none';
}

// =======================================================================================
// Получение DIV WCH по ид. Если нет такого, то создается новый.
// zIndex - можно устанавливать величину
function Wndw_GetWCH(id,zIndex) 
{
  if (!id) id = 'wchDiv';
  var div = document.getElementById(id);

  //Нет такого DIV - создание
  if (!div)
  {
    div = document.createElement('DIV');
    document.body.appendChild(div);
    div.className = 'wchDiv';
    div.id = id;
    div.innerHTML = '<IFRAME style="width:100%; height:100%;"></IFRAME>';
  }

  if (zIndex) div.style.zIndex = zIndex;
  return div;
}

// =======================================================================================
// Получение скрывающего DIV'a.  Если нет такого, то создается новый.
// zIndex - можно устанавливать величину
function Wndw_GetHideDiv(id,zIndex)
{
  if (!id) id = 'WindowHider';
  var div = document.getElementById(id);

  //Нет такого DIV - создание
  if (!div)
  {
    div = document.createElement('DIV');
    document.body.appendChild(div);
    div.className = 'WindowHider';
    div.id = id;
  }

  if (zIndex) div.style.zIndex = zIndex;
  return div;
}


// ===================================================================
// Включение DIV, выключающего доступ к BODY сайта
function ShowHider(DivId)
{
  // Определение окна Hider
  if (typeof(DivId)=='object') // Если передан объект основного окна
  {
    var hDivId = 'WindowHider';
    if (DivId.id != '') hDivId = DivId.id + 'Hider';
    var HDIV = document.getElementById(hDivId);

    if (!HDIV) HDIV = Wndw_GetHideDiv(hDivId);
    HDIV.onclick = function() {CloseWindow(DivId.id);};
  }
  else if (DivId == undefined) 
  {
    var HDIV = document.getElementById('WindowHider');
  }
  else // id = <ид. объекта>
  {
    var HDIV = document.getElementById(DivId);
  }
   
  //var SizeDIV = document.getElementById('MainDiv'); //Вычисление полного размера страницы
  var ar = GetPageSize();
  HDIV.style.height = ar[0] + 'px';
  HDIV.style.width = ar[1] + 'px';
  HDIV.style.display = 'inline';
}

// =======================================================================================
// Показать окно
// -> DivId - ид. DIV с содержимым окна
// -> InputId - ид. элемента, в который необходимо вернуть значние (опционально)
// -> Resize - [0|1|2]: 1 - только пересчитать размер; 2 - сохранить позицию по вертикали
// -> Width - ширина окна (строка: 100px; 20em и т.п.)
// -> param - доп. параметры в виде массива [название]=значение
// --> 'top' - фикс. позиция сверху
// --> 'right' - фикс. позиция с права
// --> 'copyType' - 0: innerHTML, 1: cloneNode для первого вложенного элемента в копируемый DIV
// -----------
// Можно передать в DivId объект окна, но только в режиме resize > 0. Тогда будет использован этот объект
// При этом с ним автоматически будут связаны Shadow, Hider, Wch - по ид. объекта, переданного в DivId!!!
function ShowWindow(DivId, InputId, resize, width, param)
{
  if (resize == '') resize = 0;
  if (resize == undefined) resize = 0;
  if (param == undefined) param = new Array;


  //PARAM: Start
  if (param['copyType']== undefined) 
  {
    var copyType = 0;  
  }
  else
  {
    var copyType = param['copyType'];
  }
  
  if (param['top']== undefined) 
  {
    var topPARAM = undefined;
  }
  else
  {
    var topPARAM = param['top'];
  }

  if (param['right']== undefined) 
  {
    var rightPARAM = undefined;
  }
  else
  {
    var rightPARAM = param['right'];
  }
  //PARAM: End  


  if (!resize) CloseWindow('');
  
  if ((resize > 0)&&(typeof(DivId) == 'object')) // Если Resize и передан объект окна
  {
    var DIV = DivId;
  }
  else
  {
    var DIV=document.getElementById('WindowDiv'); // Рабочее окно
    if (!DIV)
    {
      DIV = document.createElement('DIV');
      document.body.appendChild(DIV);
      DIV.style.display = 'none';
      DIV.className = 'WindowDiv';
      DIV.id = 'WindowDiv';
    }
  }

  if (!resize) 
  {
    var CDIV=document.getElementById(DivId); // Содержание окна, которое скопировать
    if (!CDIV) {return};
  }

  // Перенос в окно содержания (из CDIV в DIV)
  if (!resize) 
  {
    if (copyType == 0)
    {
      DIV.innerHTML = CDIV.innerHTML;
    }
    else if (copyType == 1)
    {
      var fChild = CDIV.firstChild;
      if (fChild.nodeName == '#text') fChild = fChild.nextSibling;
      var newBlock = fChild.cloneNode(true);
      DIV.innerHTML = '';
      DIV.appendChild(newBlock);
      Wndw_CopyInputValues(DIV, CDIV);
    }
    else
    {
      return;
    }
  }

  // Вычисление позиции DIV
  //_Включение DIV, получение размеров, Выключение
  if (width) DIV.style.width = width + 'px';
  DIV.style.display = 'inline';
  var CWidth = DIV.offsetWidth;
  var CHeight = DIV.offsetHeight;
  
  if (!resize) DIV.style.display = 'none';

  //Получение свободного места
  var WHeight = document.documentElement.clientHeight; // Высота видимой области
  if (WHeight == 0) {WHeight = document.body.clientHeight;}
  var WWidth = document.body.clientWidth; // Ширина видимой области
  
  // Проверка на свободное место: Вертикаль
  if (resize < 2)
  {
    var TopPos = (WHeight - CHeight)/2;
    if (WHeight < CHeight) TopPos = 5;
  }
  else
  {
    TopPos = DIV.style.top;
    TopPos = TopPos.match(/\d*/)[0]; // Получение тольк числа, без "px"
  }
  
  // Проверка на свободное место: Горизонталь
  var LeftPos = (WWidth - CWidth)/2;
  if (WWidth < CWidth) LeftPos = 5;

  if (resize < 2) TopPos = TopPos + document.body.scrollTop + document.documentElement.scrollTop;
  
  //alert('wH = ' + WHeight + '; cH = ' + CHeight + ' -> TP = ' + TopPos);
  //alert(TopPos + ' / ' + LeftPos + ' / ' + document.body.scrollTop);
  
  //if (topPARAM !=undefined) TopPos = topPARAM;
  //if (rightPARAM !=undefined) LeftPos = WWidth - rightPARAM;

  DIV.style.top = TopPos+'px';
  DIV.style.left = LeftPos+'px';
  DIV.style.display = 'block';
 
  if (typeof(DivId) == 'object')
  {
    DrawMyShadow(TopPos,LeftPos,DivId);
  }
  else
  {
    DrawMyShadow(TopPos,LeftPos);
  }
  
  // Включение Hider и WCH
  if ((resize > 0)&&(typeof(DivId) == 'object'))
  {
    ShowHider(DivId);
    ShowWCH(CWidth, CHeight-10, TopPos+5, LeftPos, DivId);
  }
  else
  {
    ShowHider();
    ShowWCH(CWidth, CHeight-10, TopPos+5, LeftPos );
  }

}

// =======================================================================================
// Включение Тени окна
function DrawMyShadow( topPos, leftPos, mainId)
{
  var shDivId = 'WindowDivShadow';
  if (typeof(mainId) == 'object') // Если передали объект окна
  {
    var mainDIV = mainId;
    // Получение Body этого окна, чтобы найти окно тени
    var docObj = mainDIV.ownerDocument;
    
    // Ид. блока тени
    if (mainDIV.id != '') shDivId = mainDIV.id + 'Shadow';
    var DIV=docObj.getElementById(shDivId);
  }
  else if (mainId == undefined)
  {
    var mainDIV=document.getElementById('WindowDiv');
    var DIV=document.getElementById('WindowDivShadow');
  }
  else //mainId= <ид.окна>
  {
    var mainDIV=document.getElementById(mainId);
    var shDivId = mainId + 'SHADOW';
    var DIV=document.getElementById(shDivId);
  }

  // создание, если нет такого DIV
  if (!DIV)
  {
    DIV = document.createElement('DIV');
    document.body.appendChild(DIV);
    DIV.style.display = 'none';
    DIV.className = 'WindowDivShadow';
    DIV.id = shDivId;
  }

  topPos = +topPos; // Перевод в число
  DIV.style.top = topPos + 5 + 'px';
  DIV.style.left = leftPos + 5 + 'px';
  DIV.style.width = mainDIV.offsetWidth + 'px';
  DIV.style.height = mainDIV.offsetHeight + 'px';
  DIV.style.display = 'inline';
}


// =======================================================================================
// Перерисовка Тени окна
// + вычисляет позицию основного окна
// Использует DrawMyShadow
function ReDrawMyShadow(mainId)
{
  if (typeof(mainId) == 'object') // Если передали объект окна
  {
    var mainDIV = mainId;
  }
  else if (mainId == undefined)
  {
    var mainDIV=document.getElementById('WindowDiv');
  }
  else //mainId= <ид.окна>
  {
    var mainDIV=document.getElementById(mainId);
  }

	if (!mainDIV) return;
	
  var topPos = mainDIV.style.top;
  var leftPos = mainDIV.style.left;  
  DrawMyShadow(topPos, leftPos, mainId)
}

// ===================================================================
// Закрытие окна
function CloseWindow(winId)
{
  if (!winId) 
  {
    winId = 'WindowDiv';
    shId = 'WindowDivShadow';
    hId = 'WindowHider';
  }
  else
  {
    shId = winId + 'Shadow';
    hId = winId + 'Hider';
  }

  // Скрытие окна
  var DIVL1 = document.getElementById(winId);
  //alert('1 = ' + DIVL1);
  if (!DIVL1) return;

  var DIVL1S = document.getElementById(shId);
  //alert('2 = ' + DIVL1S);
  if (!DIVL1S) return;

  var HDIV = document.getElementById(hId);
  //alert('3 = ' + HDIV);
  if (!HDIV) return;

  DIVL1.style.display = 'none';
  DIVL1.style.width = '';
  DIVL1S.style.display = 'none';
  HDIV.style.display = 'none';
  HideWCH();
}

// ===================================================================
/*-------------- ShowDIV -------------*/
/* Based on ShowWindow code and uses Slo-Mo*/

// ---------------------------------------
function ShowDiv(DIV,width,speed,param)
{
  var paramIDX = -1;
  if (param == undefined) param = new Array;
  if (typeof(param) != 'Array') paramIDX = param;

  //PARAM: Start - пока не используется.
  if (param['top']== undefined) 
  {
    var topPARAM = undefined;
  }
  else
  {
    var topPARAM = param['top'];
  }

  if (param['right']== undefined) 
  {
    var rightPARAM = undefined;
  }
  else
  {
    var rightPARAM = param['right'];
  }
  
  if (param['reshow']== undefined) 
  {
    var reshowPARAM = 0;
  }
  else
  {
    var reshowPARAM = param['reshow'];
  }
  
  if (param['fidx'] != undefined) 
  {
    paramIDX = param['fidx'];
  }
  
  //PARAM: End  

  // Вычисление позиции DIV
  //_Включение DIV, получение размеров, Выключение
  if (width) DIV.style.width = width + 'px';
  DIV.style.display = 'inline';
  var CWidth = DIV.offsetWidth;
  var CHeight = DIV.offsetHeight;
  DIV.style.display = 'none';

  //Получение свободного места
  var WHeight = document.documentElement.clientHeight; // Высота видимой области
  if (WHeight == 0) {WHeight = document.body.clientHeight;}
  var WWidth = document.body.clientWidth; // Ширина видимой области
  
  // Проверка на свободное место: Вертикаль
  var TopPos = (WHeight - CHeight)/2;
  if (WHeight < CHeight) TopPos = 5;
  
  // Проверка на свободное место: Горизонталь
  var LeftPos = (WWidth - CWidth)/2;
  if (WWidth < CWidth) LeftPos = 5;

  TopPos = TopPos + document.body.scrollTop + document.documentElement.scrollTop;

  //if (topPARAM !=undefined) TopPos = topPARAM;
  //if (rightPARAM !=undefined) LeftPos = WWidth - rightPARAM;
  
  DIV.style.top = TopPos+'px';
  DIV.style.left = LeftPos+'px';
  //DIV.style.display = 'block';

  if (!reshowPARAM) {ShowWCH(CWidth, CHeight-10, TopPos+5, LeftPos, DIV);}
  if (!reshowPARAM) {ShowDivHider(DIV,'fast');}
  var idx = AddToExecAr(function(){DrawMyShadow(TopPos,LeftPos,DIV); ExecAfter(paramIDX);}); // with shadow
  //var idx = AddToExecAr(function(){ExecAfter(paramIDX);}); // no shadow
  ShowSlowly(DIV,speed,idx);
}

// -------------------------------------------------
// Включение DIV, выключающего доступ к BODY сайта
function ShowDivHider(DIV,speed)
{
  var hDivId = 'WindowHider';
  if (DIV.id != '') hDivId = DIV.id + 'Hider';
  var HDIV = document.getElementById(hDivId);

  if (!HDIV) HDIV = Wndw_GetHideDiv(hDivId);
  //HDIV.onclick = function() {CloseDiv(DIV.id,50);};
  var ar = GetPageSize();
  HDIV.style.height = ar[0] + 'px';
  HDIV.style.width = ar[1] + 'px';
  //HDIV.style.display = 'inline';
  
  HDIV.style.opacity = '0.50';
  HDIV.style.filter = 'alpha(opacity=50)';
  
  ShowSlowly(HDIV,speed,-1,1);
}

// -------------------------------------------------
function CloseDiv (divId,speed,param)
{
  if (param == undefined) param = new Array;
  
	var reshowPARAM = 0;
  if (param['reshow'] != undefined)  {reshowPARAM = param['reshow'];}
  
  var paramIDX = -1;
  if (param['fidx'] != undefined) {paramIDX = param['fidx'];}
  
  if (!divId) 
  {
    divId = 'WindowDiv';
    shId = 'WindowDivShadow';
    hId = 'WindowHider';
    wchId = 'wchDiv';
  }
  else
  {
    shId = divId + 'Shadow';
    hId = divId + 'Hider';
    wchId = divId + 'WCH';
  }

  var DIV = document.getElementById(divId);
  if (!DIV) return;
  DIV.onclick = '';

  var DIVshadow = document.getElementById(shId);
  //if (!DIVshadow) return;
  if (!!DIVshadow) DIVshadow.style.display = 'none';
  
  if (!reshowPARAM) // Обычный режим скрытия
  {
    var HDIV = document.getElementById(hId);
    if (!HDIV) return;
    var idx;
		if (paramIDX) {idx = AddToExecAr(function() {DIV.style.width = ''; ExecAfter(paramIDX)});}
		else {idx = AddToExecAr(function() {DIV.style.width = '';});}
    HideSlowly(DIV,speed,idx);
    HideSlowly(HDIV,speed,-1,1);
    HideWCH(wchId);
  }
  else
  {
    HideSlowly(DIV,speed,paramIDX);
  }
  
}


// ===================================================================
/*-------------- ShowImage -------------*/

function ShowAImage(objA)
{
  var src = objA.href;
  ShowImage(src,'');
  return false; // do not go to url!
}

// --------
function ShowImage(src,txt)
{
  if (!txt) {txt = '';}
  
  var img=new Image;
  img.src=src; // loading
  if (img.readyState == 'complete')
  {
    ShowImage2(img,src,txt);
  }
  else
  {
    img.onload = function() {ShowImage2(img,src,txt);};
  }
  
  return false;
}

// --------
function ShowImage2(img,src,txt)
{
  var w = img.width;
  var h = img.height;
  var ww = w + 21;
  var hh = h + 21;

  var DIV = document.getElementById('ShowPic');
  if (!DIV)
  {
    DIV = document.createElement('DIV');
    document.body.appendChild(DIV);
    DIV.style.display = 'none';
    DIV.className = 'ShowPic';
    DIV.id = 'ShowPic';
    DIV.title = '';
  }

  DIV.innerHTML = '';
  DIV.innerHTML += '<div class="X"><a href="#" onclick="CloseDiv(\'ShowPic\',50); return false;"><img src="/_img/x.png" alt="X" /></a></div>';
  DIV.innerHTML += '<div class="ShowPicWrap"><img src="'+src+'" width="'+w+'" height="'+h+'" alt="" /></div>'
  DIV.innerHTML += txt;
  
  //ShowWindow(DIV, '', 1, ww);
  SetOpacity100(DIV);
  var idx = AddToExecAr(function() {DIV.onclick =  function() {CloseDiv('ShowPic',300);};})
  ShowDiv(DIV,ww,300,idx);
}

/*-------------- /ShowImage -------------*/


// ===================================================================
/*-------------- SHS -------------*/

var objAr = new Array();
var execAr = new Array(); // буфер кода, для выполнения по idx после таймера. idx >=0;
var execTID = 0;
var execWaitAr = new Array(); // очередь на выполнение "SHS" 

// ---------------------------- 
// Плавное появление OBJ
// speed в мс. (0 = Сразу, по умолчанию)
// speed = [0,fast,normal,slow,value(ms)]
// doAfter = idx в массиве execAr на выполнение кода после завершения таймера. -1 = не использовать
// runSepar = [0] выполняться последовательно с другими процессами. 1 = запустить независимо
function ShowSlowly(obj,speed,doAfter, runSepar)
{
  if (!runSepar) runSepar = 0;
  if (runSepar == 20) {if (ObjIsRunning(obj)) return;} //run Once
  
  if (typeof(doAfter) == 'undefined') doAfter = -1;

  if ((execTID)&&(runSepar!=1))
  {
    //alert('show wait:'+execTID);
    AddExecWait(function() {ShowSlowly(obj,speed,doAfter,0)});
    return;
  }
  
  obj.style.display = 'block';
  
  if (!speed) 
  {
    obj.style.opacity = '1.00';
    obj.style.filter = 'alpha(opacity=100)';
    obj.style.filter = ''; //IE FIX
    ExecAfter(doAfter);
    return;
  }
  
  speed = GetSpeedValue(speed);
  
  var opTarget = (obj.style.opacity)?parseFloat(obj.style.opacity)*100:parseInt(obj.style.filter);
  if (!opTarget) opTarget = 100;
  
  obj.style.opacity = '0.00';
  obj.style.filter = 'alpha(opacity=0)';
  
  var opInc = 10;
  var timeInc = speed / (100/opInc);
    
  if ((IsIE())&&(speed < 400))
  {
    opInc = 20;
    timeInc = speed / 5;
  }
  
  objIdx = AddObjRunning(obj);
  
  //alert('show Start');
  
  execTID = window.setTimeout('ExecSlowlyInc('+objIdx+','+opInc+','+timeInc+','+opTarget+','+opTarget+','+doAfter+');',timeInc);
}

// Плавное скрытие OBJ
// speed в мс. (0 = Сразу, по умолчанию)
// doAfter = idx в массиве execAr на выполнение кода после завершения таймера. -1 = не использовать
// runSepar = [0] выполняться последовательно с другими процессами. 1 = запустить независимо. 20 = runOnce
function HideSlowly(obj,speed,doAfter,runSepar)
{
  if (!runSepar) runSepar = 0;
  
  if (runSepar == 20) //run Once
  {
    if (ObjIsRunning(obj)) 
    {
      //alert('running! ' + obj.id);
      return;
    }
  } 
  
  if (typeof(doAfter) == 'undefined') doAfter = -1;
  
  if ((execTID)&&(runSepar!=1))
  {
    AddExecWait(function() {HideSlowly(obj,speed,doAfter)});
    return;
  }
  
  if (!speed) 
  {
    obj.style.display = 'none';
    obj.style.opacity = '0.00';
    obj.style.filter = 'alpha(opacity=0)';
    ExecAfter(doAfter);
    return;
  }
 
  speed = GetSpeedValue(speed);
  
  obj.style.display = 'block';
  
  // remember def value
  var op = (obj.style.opacity)?parseFloat(obj.style.opacity)*100:parseInt(obj.style.filter);
  if (!op) op = '100';
  //alert(obj.id + ':' +op);
    
  obj.style.opacity = op/100;
  obj.style.filter='alpha(opacity='+op+')';
  
  var opInc = -10;
  var timeInc = speed / 10;
  var opTarget = 0;
  
  if ((IsIE())&&(speed < 400))
  {
    opInc = -20;
    timeInc = speed / 5;
  }
  
  objIdx = AddObjRunning(obj);
  
  execTID = window.setTimeout('ExecSlowlyInc('+objIdx+','+opInc+','+timeInc+','+opTarget+','+op+','+doAfter+');',timeInc);
  
  return;
}

// ---------------------------- 
function ExecSlowlyInc(objIdx, opInc, timeInc, opTarget, opDefault, doAfter)
{
  var obj = objAr[objIdx];
  var opCur = (obj.style.opacity)?parseFloat(obj.style.opacity)*100:parseInt(obj.style.filter);
    
  var op = +opCur + opInc;
  op = +op;
    
  if (op>100) op = 100;
  if (op<1) op = 0; //Chrome FIX
  
  obj.style.opacity = (op/100);
  obj.style.filter='alpha(opacity='+op+')';
  
  //if (opInc<0) alert(opCur + '/' + op + ' / ' + opTarget);
  
  // FINISH
  if ((op == opTarget)||((opInc > 0)&&(op>opTarget))||(op<0))
  {
  
    //alert('Finish!' + opCur + '/' + op + ' / ' + opTarget);
  
    if (op <= 0)  //back to default
    {
      obj.style.display = 'none';
      obj.style.opacity = opDefault/100;
      obj.style.filter='alpha(opacity='+opDefault+')';
    }
    
    if (op >= 100) //IE FIX
    {
      obj.style.filter = '';
    }
  
    execTID = 0;
    RemoveObjRunning(objIdx);
    ExecAfter(doAfter);
    DoExecWait();
  }
  else // CONTINUE
  {
    execTID = window.setTimeout('ExecSlowlyInc('+objIdx+','+opInc+','+timeInc+','+opTarget+','+opDefault+','+doAfter+');',timeInc);
  }
}


// ---------------------------- 
function AddObjRunning(obj)
{
  var objIdx = objAr.length;
  objAr[objAr.length] = obj;
  return objIdx;
}

// ---------------------------- 
function RemoveObjRunning(objIdx)
{
  if (objAr[objIdx]) objAr[objIdx] = '';
}

// ---------------------------- 
function ObjIsRunning(obj)
{
  var idx;
  var objIdx = 0;
  for (idx in objAr)
  {
    if (objAr[idx] === obj) {objIdx = idx; break;}
  }
  
  return objIdx;
}



// ----------------------------
// Добавление в список "Выполнить функцию после..." 
function AddToExecAr(fnc)
{
  var idx = execAr.length;
  execAr[idx] = fnc;
  return idx;
}

// ---------------------------- 
function ExecAfter(execId)
{
  if (execId < 0) return;
  if (execAr[execId] == undefined) return;
  
  execAr[execId]();
}

// ---------------------------- 
function AddExecWait(fnc)
{
  execWaitAr.push (fnc);
}

// ---------------------------- 
function DoExecWait()
{
  var fnc = execWaitAr.shift();
  if (fnc) fnc();
}

// ---------------------------- 
// speed = [0,fast,normal,slow,value(ms)]
function GetSpeedValue(speed)
{
  switch (speed)
  {
    case 'fast':
      speed = 260; break;
    case 'normal':
      speed = 500; break;
    case 'slow':
      speed = 1000; break;
    default:
      speed = speed;
  }
  
  if ((IsIE())&&(speed<400)) speed = speed / 5;
 
  return speed;
}

// ---------------------------- 
function SetOpacity100(obj)
{
  obj.style.opacity = '1';
  obj.style.filter='alpha(opacity=100)';
}
