Array.prototype.search=function(_needle){	
	for( var i=0; i!=this.length ;i++){
		if(this[i]==_needle) return i;
	}
	return false;
}

function BannersAnimator(_frontiers,_numGrp,_autoStr,_wSt){

	this.numGrp=_numGrp;								// номер группы
	this.frontiers=_frontiers;						// границы действия объекта
	this.number=parseInt(this.frontiers[0]);	// положение анимации
	this.interval=null;								// скорость анимации
	this.trgt=null;									// целевой банер
	this.strategy=null								// стратегия «лента» или «последовательность»
	this.stage=0;										// фаза анимации
	this.targets=null;								// цели для удаления
	
	this.config={
		timeInterval_wt:1000,
		timeInterval_ml:1000,
		timeInterval_re:125,
		timeInterval_se:25
	}
	/*
		где:
		timeInterval_wt - время ожидпания для мультимедиа баннеров, если стратегия не "лента" 
		timeInterval_ml - время ожидания по умолчанию для мультимедийных баннеров, если стратегия "лента" 
		timeInterval_re - скорость анимации для стратегии "лента"
		timeInterval_se - скорость анимации для стратегии "последовательно"
	*/
		
	if(_autoStr){
		try{
			wSt=_wSt;
		}catch(ex){
			wSt=0;
		}
		var main=this;
		this.trgt=document.getElementById('banner_'+this.number);
		this.setStrategy();
		var func=function(){ main.animStart(); }		
		setTimeout(func,wSt);
	}

}
BannersAnimator.prototype.templats=new Array('0px','166px','332px','165px','220px');
BannersAnimator.prototype.appendableBanner=new Array();				// добавляемый банер
BannersAnimator.prototype.cahceIMG=new Object();
BannersAnimator.prototype.baner_reverse=0;
BannersAnimator.prototype.sepTrgt=null;
BannersAnimator.prototype.sepFlg=false;
BannersAnimator.prototype.banerIdPattern=/^banner_[0-9]+/;
BannersAnimator.prototype.NullPos=0;										// Начальное положение верэнего банера ( изначально 0 )
BannersAnimator.prototype.timer=null;


BannersAnimator.prototype.setNewTrgt=function(_m){
	var pattern=this.banerIdPattern;
	for(var m=_m.firstChild,i=0;m!=null;m=m.nextSibling){
		if(m.nodeType==1 && pattern.test(m.id)){
			this.trgt=m;
			return -1
		}
	}
	return 0;
}
// private
BannersAnimator.prototype.animStart=function(){
	this.makeStep();
}
BannersAnimator.prototype.animStop=function(){
	var id_p=this.trgt.id.split('_');
	
	clearTimeout( this.timer );
	
	this.baner_reverse=0;
	this.stage=0;	
	try{
		if(oInit.Browser!='ie'){
			document.getElementById('bl_banner_'+id_p[1]).style.opacity=1;
			document.getElementById('b_subbanner_'+id_p[1]).style.opacity=0;
		}else{
			document.getElementById('bl_banner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
			document.getElementById('b_subbanner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=1)";
		}
	}catch(ex){}
	this.makeStep();
}

// public
BannersAnimator.prototype.setStrategy=function(_numGrp){
	// выбираем стратегию
	this.strategy=(this.checkMyStorage(this.numGrp) && this.chekQB()) ? false : true ;
	
	if( !this.strategy ){
		try{
			var topPos = document.getElementById( 'banner_'+this.frontiers[0] ).style["top"];
			this.NullPos=this.templats.search(topPos);		
		}catch(ex){
			this.NullPos=0;
		}
	}
}
BannersAnimator.prototype.setSeparationAnimation=function(k,j){
	// alert( oInit.objBanners[0].trgt);
	return false;
	var sId=oInit.objBanners[j].trgt.id;
	var main=this;
	// alert( sId!='banner_'+k );
	if(sId!='banner_'+k && !this.trgt){
		this.trgt=document.getElementById('banner_'+k);
		var func=function(){main.animatorBanner(100,false,true);}
		this.sepFlg=true;
		this.timer=setTimeout(func,250);
		oInit.bannerCur=this.trgt;
	}
}
BannersAnimator.prototype.clearSeparrationAnimation=function(){
	
  try{
      clearTimeout(this.timer);
	    var id_p=this.trgt.id.split('_');
	}catch(ex){
      return false;
  }
	try{
		if(oInit.Browser!='ie'){
			document.getElementById('b_subbanner_'+id_p[1]).style.opacity=0;
			document.getElementById('bl_banner_'+id_p[1]).style.opacity=1;
		}
		else{
			document.getElementById('b_subbanner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=0)";
			document.getElementById('b_banner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
			document.getElementById('bl_banner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
		}
		this.trgt=null;
	this.sepFlg=false;
	oInit.bannerCur=new Object();
	}catch(ex){
		
	}
	
}
BannersAnimator.prototype.getOneBannerFromStorage=function( _t ){
	//alert( _t );
	var st=document.getElementById("storage_"+this.numGrp);
	var pattern=this.banerIdPattern;
	for(var m=st.firstChild,i=0;m!=null;m=m.nextSibling){
		if(m.nodeType==1 && pattern.test(m.id)){
			if( _t>=0 ){
				n=st.removeChild(m);
				this.appendableBanner.push(n);
				return n;
			}else if(m.getAttribute('cc')==1){
				//alert('as');
				n=st.removeChild(m);
				this.appendableBanner.push(n);
				return n;
			}
		}
	}
	return 0;
}
BannersAnimator.prototype.getFirstNumber=function(){
	var prnt=this.trgt.parentNode;
	var pattern=this.banerIdPattern;
	var arr=new Array();
	var f=this.frontiers[0];
	for(var m=prnt.firstChild,i=0;m!=null;m=m.nextSibling){
		if(m.nodeType==1 && pattern.test(m.id)){
			return m;
		}
	}
}
BannersAnimator.prototype.checkMyStorage=function(){
	// проверяет количество банеров в хранилище
	var strg=document.getElementById('storage_'+this.numGrp); 
	try{
		i=chekIsBanner(strg);	
		return i>0;
	}catch(ex){ return false }
}
BannersAnimator.prototype.chekQB=function(){
	// проверяет количество банеров в группе
	try{
		var prnt=this.trgt.parentNode;
		i=chekIsBanner(prnt,false);	
	}catch(ex){}
	return i>0;
}
BannersAnimator.prototype.makeStep=function(){
	this.stage++; 
	if(this.strategy && !this.sepFlg)this.animBA_se();
	else if(!this.sepFlg) this.animBA_re();
}
BannersAnimator.prototype.appendBanerToStrg=function(_o){
	var st=document.getElementById("storage_"+this.numGrp);
	st.appendChild(_o);	
}
BannersAnimator.prototype.animBA_re=function(){
	// анимирует «лента»
	var main=this;
	if(this.stage==1){
		// санимировать первый банер
		var func=function(){main.animatorBanner(100,false,true);}
		setTimeout(func,250);
	}else if(this.stage==2){
		var tmp=null;
		// взять банер из хранилища
		var t=this.trgt.getAttribute('cc');
		var r=0;
		var i=0;
		var intNumber=this.frontiers[0];
		var pattern=/^banner_[0-9]+/;
		this.appendableBanner=new Array();
		
		var l=1000;
		// alert( this.trgt.id );
		this.targets=new Array(this.trgt);
		// 1. Сколько места занимает убираемый банер
		while(t>0 && l!=0){
			tmp=this.getOneBannerFromStorage( t - i );
			if(tmp==0){
				this.strategy=true;
				this.stage=0;
				this.makeStep();
				this.appendableBanner=new Array();
				return false;		
			}
			t-=parseInt(tmp.getAttribute('cc'));
			l--; i++;
		}
		//alert( this.appendableBanner );
		// 2. Сколько банеров нужно удалить чтобы поместить этот банер
		l=1000;
		try{
			for(var m=this.trgt.parentNode.firstChild,t;t!=0 && m!=null;m=m.nextSibling){
				if(m.nodeType==1 && pattern.test(m.id) && this.trgt.id!=m.id){
					this.targets.push(m);
					t+=parseInt(m.getAttribute('cc'));
				}
				l--;
			}
		}catch(ex){
			
		}
		
		// санимировать удаление банера/банеров
		var func=function(){main.animatorBanner(100,false,false);}
		setTimeout(func,250);
		
	}else{
		// санимировать поднятие группы вверх
		var main=this;
		var p=document.getElementById("gruop"+this.numGrp);
		var o=true;
		var r= document.getElementById("real_groupinfo_here").innerHTML.split('_')
		var a=r[this.numGrp];
		var t=0;
		var err = false;
		var imgTmp;
		var id_p= this.trgt.id.split('_');
		//alert( this.targets.length );
		for(i=0;i!=this.targets.length;i++){
			
			// добавить банер в хранилище
			try{
				if( document.getElementById(this.targets[i].id+'_layer_0') ){
					// если shop-SPBT банер
					// Changer.removeAct( new Array( id_p[1] ) );
					Changer.removeAct( new Array( id_p[1] ) );
				}
			}catch(ex){
			}
				p.removeChild(this.targets[i]);
				if(this.trgt.getAttribute('type')=='img'){
					imgTmp=this.trgt.getElementsByTagName('img')[0];
					if( !this.cahceIMG['b'+id_p[1]] ) this.cahceIMG['b'+id_p[1]] = imgTmp.src ;
					imgTmp.src="";
				}
				
			
			this.appendBanerToStrg(this.targets[i]);
		}

		this.setNewTrgt(p);
		

		// добавить первый банер из хранилища 
		for(var i=0;i!=this.targets.length;i++){
			t+=parseInt(this.targets[i].getAttribute('cc'))
		}

		this.stage=0;

		var func=function(){ main.animatorGroup();}
		setTimeout(func,250);
		
	}
}
BannersAnimator.prototype.animBA_se=function(){
	// анимирует «последовательность»
	try{
		var main=this;
		if(this.stage==1 && oInit.bannerCur.id!=this.trgt.id){
		// санимировать текущий банер
		var func=function(){main.animatorBanner(100,false,true);}
		setTimeout(func,250);
		}else if(this.stage==2){
			// переключиться на следующий
			if(this.number<(this.frontiers[1]-1))this.number++;
			else this.number=this.frontiers[0];
			this.trgt=document.getElementById('banner_'+this.number);
			this.stage=0;
			var main=this;
			var func=function(){ main.makeStep(); }
			if(oInit.objBanners.length==2) setTimeout(func,this.config.timeInterval_wt*4);	
			else setTimeout(func,this.config.timeInterval_wt);
		}else{
			this.makeStep();
		}
		//alert('asd');
	}catch(ex){
	}
}
BannersAnimator.prototype.animatorBanner=function(_val,_d,_s){
	var main=this;
	var val=(_d)? _val+10 : _val-10;
	var s=_s;
	var id_p=this.trgt.id.split('_'); 
	
	try{
		if(!s){
			if(_d){
				for(i=0;i!=this.appendableBanner.length;i++){
					if(oInit.Browser!='ie') this.appendableBanner[i].style.opacity=Math.abs(val/100);
					else{ this.appendableBanner[i].style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")"; }
				}
			}else{
				for(i=0;i!=this.targets.length;i++){
					if(oInit.Browser!='ie') this.targets[i].style.opacity=Math.abs(val/100);
					else this.targets[i].style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")";
				}
			}
			if(_d && val>=100){				
				this.makeStep();
				return true;
			}else if(_d){
				var func=function(){main.animatorBanner(val,true,false);}
				this.timer=setTimeout(func,this.config.timeInterval_re);
				return true;
			}
		}else if(this.baner_reverse){
			if(_d){
				if(oInit.Browser!='ie') document.getElementById('bl_banner_'+id_p[1]).style.opacity=Math.abs(val/100);
				else{
					document.getElementById('b_banner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")";
					document.getElementById('bl_banner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")";
				}
				
			}else{
				if(oInit.Browser!='ie') document.getElementById('b_subbanner_'+id_p[1]).style.opacity=Math.abs(val/100);
				else document.getElementById('b_subbanner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")";
			}
		}else{
			if(_d){
				if(oInit.Browser!='ie') document.getElementById('b_subbanner_'+id_p[1]).style.opacity=Math.abs(val/100);
				else  document.getElementById('b_subbanner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")";
			}else{
				try{
				if(oInit.Browser!='ie') document.getElementById('bl_banner_'+id_p[1]).style.opacity=Math.abs(val/100);
				else{
					document.getElementById('b_banner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")";
					document.getElementById('bl_banner_'+id_p[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+val+")";
				}
				}catch(ex){}
			}
		}
	}catch(ex){
		this.baner_reverse=0;
		var func=function(){ main.makeStep(); }
		var timeW=(JSOut_BannerTimeOut['elem'+id_p[1]])? JSOut_BannerTimeOut['elem'+id_p[1]] : this.config.timeInterval_ml ;
		// alert( timeW );
		this.timer=(!this.staregy) ? setTimeout(func,timeW) :  setTimeout(func,this.config.timeInterval_re);
		// alert( ex.message );
		return false;
	}
		
	if(val>0 && !_d){
		var func=function(){main.animatorBanner(val,false,s);}
		this.timer=setTimeout(func,this.config.timeInterval_re);
	}
	else if(val<100 && s ){
		var func=function(){main.animatorBanner(val,true,s);}
		this.timer=setTimeout(func,this.config.timeInterval_re);
	}else{
		if(s && this.baner_reverse && !this.sepFlg){
			this.baner_reverse=0;
			this.makeStep();
		}else if(s && !this.sepFlg){
			this.baner_reverse=1;
			var func=function(){main.animatorBanner(100,false,true);}
			var pattern=/pvid|pnew|pnewik|pcrit/;
      var wt=( pattern.test(this.trgt.getAttribute('type')) ) ? this.config.timeInterval_wt*2  : this.config.timeInterval_wt  ;
      // alert( wt );
			this.timer=setTimeout(func,wt);
		}else if(!s && !_d){
			this.makeStep();
		}
	}
}
BannersAnimator.prototype.animatorGroup=function(){
	var pattern=this.banerIdPattern;
	var frst=this.getFirstNumber();
	var main=this;
	var _m=document.getElementById("gruop"+this.numGrp);
	
	for(var m=_m.firstChild,i=0;m!=null;m=m.nextSibling){
		if(m.nodeType==1 && pattern.test(m.id)){
			intTopValue=parseInt(m.style.left)-1;
			m.style.left=intTopValue+'px';
			i++;
		}
	}
	if( parseInt(frst.style.left)!=0 && i>0 ){
		var func=function(){main.animatorGroup();}
		setTimeout(func,this.config.timeInterval_se);
	}else{
		var p=document.getElementById("gruop"+this.numGrp);
		var a=null;
		for(i=0;i!=this.appendableBanner.length;i++){
			if(oInit.Browser!='ie') this.appendableBanner[i].style.opacity=0;
			else{
				this.appendableBanner[i].style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=0)";
				try{
					var a=this.appendableBanner[i].id.split('_');
					document.getElementById('bl_banner_'+a[1]).style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
				}catch(ex){
					this.appendableBanner[i].children[0].style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
					// alert( this.appendableBanner[i].children[0].children[0].id);
					for( var w=0; w!=this.appendableBanner[i].children[0].children.length; w++){
						this.appendableBanner[i].children[0].children[w].style.filter="progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
					}
				}
			}
			
			this.appendableBanner[i].style.left=this.templats[ chekPos( p , this.appendableBanner[i].id ) + this.NullPos ];
			p.appendChild(this.appendableBanner[i]);
			//alert( this.appendableBanner[i].id ); 
			if( document.getElementById(this.appendableBanner[i].id+'_layer_0') ){
				tt=this.appendableBanner[i].id.split('_');
				Changer.strat( tt[1] );
			}
		} //return false;
		var func=function(){main.animatorBanner(0,true,false);}
		setTimeout(func,250);
		
		if(this.trgt.getAttribute('type')=='img'){
			var id_p=this.trgt.id.split('_');
			imgTmp=this.trgt.getElementsByTagName('img')[0];
			imgTmp.src=this.cahceIMG['b'+id_p[1]];
		}
		
		this.setNewTrgt( document.getElementById("gruop"+this.numGrp) );

	}
	//
}

// test
BannersAnimator.prototype.tst=function(str){
	if(this.strategy){ document.getElementById("tstA").innerHTML=str;}
	else{ document.getElementById("tstB").innerHTML=str; }
}

window.BANNERS_INFO_R='0';
window.BANNERS_INFO_I='0';
window.BANNERS_INFO_S='';


function chekIsBanner(_m,_f){
	var pattern=/^banner_[0-9]+/;
	var flag=false;
	
	if(_f!=undefined) flag=_f;
	for(var m=_m.firstChild,i=0;m!=null;m=m.nextSibling){
		if(m.nodeType==1 && pattern.test(m.id)){
			if(_f) i+=parseInt(m.getAttribute("cc"));
			else i++;
		}
	}
	return (_f) ? i-1 : i;
}

function chekPos(_m,_id){
	var pattern=/^banner_[0-9]+/;
	for(var m=_m.firstChild,i=0;m!=null;m=m.nextSibling){
		if(m.nodeType==1 && pattern.test(m.id) && m.id!=_id){
			i+=parseInt(m.getAttribute("cc"));
		}
	}
	return i;
}

function
AddStor( _str , _n ){ 
	BANNERS_INFO_S+='<div class="stor" id="storage_'+_n+'" >'+_str+'</div>';
	// alert( BANNERS_INFO_S );
}
function
AddGrpInfo( _v , _w ){
	
	/*var di=document.getElementById('groupinfo_here');
	var dr=document.getElementById('real_groupinfo_here');
	*/	
	var dia=BANNERS_INFO_R.split('_');
	var dra=BANNERS_INFO_I.split('_');
	
	/*
	di.innerHTML+='_'+( parseInt( dia[dia.length-1] )+parseInt( _v ) );
	dr.innerHTML+='_'+( parseInt( dra[dra.length-1] )+parseInt( _w ) );
	
	// alert( di.innerHTML + ' ' + dr.innerHTML );	
	*/
	BANNERS_INFO_R+='_'+ ( parseInt( dia[dia.length-1] )+parseInt( _v ) );
	BANNERS_INFO_I+='_'+( parseInt( dra[dra.length-1] )+parseInt( _w ) );
}
function
addTimeOut( _arrA , _arrB ){
	try{
		var test=window.JSOut_BannerTimeOut['elem0'];
	}catch(ex){
		window.JSOut_BannerTimeOut=new Object();
	}
	
	for( var i=0;i!=_arrA.length;i++){
		//alert( "window.JSOut_BannerTimeOut[ 'elem'+"+_arrA[i]+" ] = "+_arrB[i] );
		window.JSOut_BannerTimeOut[ 'elem'+_arrA[i] ] = _arrB[i];
	}
}

function 
setBannerAnim(){
	//alert(BANNERS_INFO_R+' t:'+BANNERS_INFO_I);
	document.getElementById('storages').innerHTML=BANNERS_INFO_S;
	document.getElementById('groupinfo_here').innerHTML=BANNERS_INFO_R;
	document.getElementById('real_groupinfo_here').innerHTML=BANNERS_INFO_I;
		
	var a=document.getElementById('groupinfo_here').innerHTML.split('_');
	oInit.objBanners=new Array();
	oInit.bannerCur=new Object();
	window.ObjB_a=new BannersAnimator(a.slice(0,2),1,true,0);
	oInit.objBanners.push(ObjB_a);
	if(a.length>2){
		window.ObjB_b=new BannersAnimator(a.slice(1),2,true,8500);
		oInit.objBanners.push(ObjB_b);
	}
	window.ObjB_c=new BannersAnimator(false,false,false);
}
function
setLinksSt( _id ){
	var o = document.getElementById(_id);
	var co = o.getElementsByTagName('a');
	for( var i=0; i != co.length ;i++ ){
		if( co[i].className!="stop" ){
			co[i].onmouseover=function(){ this.style.textDecoration="underline" }
			co[i].onmouseout=function(){ this.style.textDecoration="none" }
		}else{
			co[i].onmouseover=function(){ this.style.color="#303030"; this.style.textDecoration="underline" }
			co[i].onmouseout=function(){ this.style.color="#000"; this.style.textDecoration="underline" }
		}
	}
}
function
__main( _br ){
	window.oInit= new Object();
	oInit.Browser=_br;
	
	setBannerAnim(); 
	
	setLinksSt('gruop1'); setLinksSt('storages');
	
	Changer.init(); 
}