// JavaScript Document
Scroll = {
	 sL:function(o){return o!=window?o.scrollLeft:document.body.scrollLeft||document.documentElement.scrollLeft},
	 sT:function(o){return o!=window?o.scrollTop:document.body.scrollTop||document.documentElement.scrollTop}, 
	 anim:function(p){function d(p){return Math.pow(p,3)};if(p<0.5){return d(2*p)/2;}else{return (2-d(2*(1-p)))/2;}}, // рассчет анимации
	 animator:[], /* массив с анимируемыми объектами */
	 anielems:0, /* счетчик анимируемых объектов */
	 to: function(obj,values,time,callback){
	 // перебираем параметры и значения 
	 for(key in values){anima(key,values[key])}
	 function anima(param,to){
	 // проверяем и останавливаем предыдущие анимации 
	 for(key in Scroll.animator){if(Scroll.animator[key].o==obj&&Scroll.animator[key].p==param){clearInterval(Scroll.animator[key].timer)}}
	 var aID=Scroll.anielems,
	 result,
	 now,
	 progress,
	 w=obj==window?1:0,
	 param=param=='x'?1:0,
	 from=param?Scroll.sL(obj):Scroll.sT(obj);
	 Scroll.animator[aID] = {
	 start: new Date().getTime(),
	 timer: setInterval(function(){
	 now=(new Date().getTime())-Scroll.animator[aID].start;
	 progress=now/time;
	 result=(to-from)*Scroll.anim(progress)+from;
	 if(param){
	 if(w){window.scrollTo(result,Scroll.sT(obj))}
	 else{obj.scrollLeft=result}
	 }else{
	 if(w){window.scrollTo(Scroll.sL(obj),result)}
	 else{obj.scrollTop=result}
	 }
	 if(progress>=1){
	 clearInterval(Scroll.animator[aID].timer);
	 if(param){
	 if(w){window.scrollTo(to,Scroll.sT(obj))}
	 else{obj.scrollLeft=to}
	 }else{
	 if(w){window.scrollTo(Scroll.sL(obj),to)}
	 else{obj.scrollTop=to}
	 }
	 if(callback){callback()}
	 }
	 },10)
	 }
	 Scroll.anielems++;
	 }
	 }
	 };
