Первым делом изменим левый и правый край области обреза:

 eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.left += -(xinc/2)'); eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.right += (xinc/2)'); 

Если мы перестарались, то подправим ширину обреза:

 if (eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.width < 0')){lyr.clip.width = 0} 

Теперь проверим, не достигли ли мы конечного условия:

 if (((xinc < 0) && (eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.width > stopwidth'))) ||      ((xinc > 0) && (eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.width < stopwidth')))) 

Если нет, то рекурсивно вызовем функцию:

 setTimeout('curtainWidth("'+layerName+'",'+xinc+','+inctime+','+stopwidth+')',inctime); 

Вот, что у нас получилось:

 function curtainWidth(layerName,xinc,inctime,stopwidth) { eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.left += -(xinc/2)'); eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.right += (xinc/2)'); if (eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.width < 0')){lyr.clip.width = 0} if (((xinc < 0) && (eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.width > stopwidth'))) ||      ((xinc > 0) && (eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.clip.width < stopwidth')))) {   setTimeout('curtainWidth("'+layerName+'",'+xinc+','+inctime+','+stopwidth+')',inctime);  } }