function zoom(sElemId, nZoomPercent, nDelay, bBackward)
{
var i=0;
var nSteps=20;

if (!document.getElementById(sElemId)) return;//если нет элемента с заданным id выходим

//если к элементу с заданным id ещё не применялся зумминг, то готовим список процессов к добавлению нового элемента
if (!zoom.aProc[sElemId]) 
{
nwidth  = document.getElementById(sElemId).width;
nheight = document.getElementById(sElemId).height;

zoom.aProc[sElemId] = {};	
}
else 
	//если к элементу уже применялось правило sRule, то запоминаем состояние предыдущего процесса и останавливаем его
	if (zoom.aProc[sElemId]) 
		{
		 i = zoom.aProc[sElemId].i;
		 nSteps = zoom.aProc[sElemId].nSteps;
		 nwidth  = zoom.aProc[sElemId].current_width;
		 nheight = zoom.aProc[sElemId].current_height;
//		 bBackward = zoom.aProc[sElemId].bBackward;
		 nDelay = zoom.aProc[sElemId].nDelay;
		 nZoomPercent = zoom.aProc[sElemId].nZoomPercent;

		 clearInterval(zoom.aProc[sElemId].tId);
		}

//Если размер элемента равен начальному и запрашивается возврат к начальному размеру
//или размер элемента равен конечному и запрашивается запуск зумминга то выходим, делать ничего не нужно


//alert("Отладка i=" + String(i) + "; nSteps=" + String(nSteps) + "; bBackward=" + String(bBackward));


if ( i==0 && bBackward==-1 ) return;
if ( i==nSteps && bBackward==1 ) return;

//инициализируем процесс запуска и помещаем текущий процесс зумминга в список процессов

nw0 = document.getElementById(sElemId).width;
nh0 = document.getElementById(sElemId).height;

nw_step = 0.7;
nh_step = 0.7;

	zoom.aProc[sElemId] = 	
	{
	'i':i, 
	'tId':setInterval('zoom.run("'+sElemId+'")', nDelay / nSteps),
	'bBackward':bBackward, 
	'current_width':nwidth, 
	'current_height':nheight, 
	'w_step':nw_step, 
	'h_step':nh_step,
	'nSteps':nSteps,
	'nDelay':nDelay,
	'nZoomPercent':nZoomPercent,
	'nw0':nw0,
	'nh0':nh0
	};

}

zoom.aProc = {};//массив выполняемых процессов

//Данный метод выполняет смену размера, запускается функцией zoom
zoom.run = function(sElemId)
{
//alert("Отладка i=" + String(zoom.aProc[sElemId].i) + "; nSteps=" + String(zoom.aProc[sElemId].nSteps) + "; bBackward=" + String(zoom.aProc[sElemId].bBackward));


if ( (zoom.aProc[sElemId].i==zoom.aProc[sElemId].nSteps && zoom.aProc[sElemId].bBackward==1) ) 
   {
//    alert("Отладка i=" + String(zoom.aProc[sElemId].i) );
    clearInterval(zoom.aProc[sElemId].tId);
    return;
   }

if ( (zoom.aProc[sElemId].i==0 && zoom.aProc[sElemId].bBackward==-1) ) 
   {
//    alert("Отладка i=" + String(zoom.aProc[sElemId].i) );
    clearInterval(zoom.aProc[sElemId].tId);
    return;
   }

//аварийная остановка
if( (zoom.aProc[sElemId].i > 50) || (zoom.aProc[sElemId].i < 0) )
  {
//   alert("Аварийная остановка i=" + String(zoom.aProc[sElemId].i) );
   clearInterval(zoom.aProc[sElemId].tId);
   return;
  }

//изменяем индекс промежуточного размера
zoom.aProc[sElemId].i += zoom.aProc[sElemId].bBackward;

zoom.aProc[sElemId].current_width  += zoom.aProc[sElemId].w_step * zoom.aProc[sElemId].bBackward;
zoom.aProc[sElemId].current_height += zoom.aProc[sElemId].h_step * zoom.aProc[sElemId].bBackward;

document.getElementById(sElemId).width  = zoom.aProc[sElemId].current_width;
document.getElementById(sElemId).height = zoom.aProc[sElemId].current_height;
	
}

zoom.back = function (sElemId){zoom(sElemId, 20, 300, -1);};


