/**
 * 
 * @param settings
 * @return
 */
function fclm_photos(settings){
   this.settings=settings;
   this.items=[];
	this.active=null;
	var self=this;
	DOMReady(function(){
		var list=DOM(self.settings.ul_id).getElementsByTagName('a');
		for (var i=0; i<list.length; i++){
			self.addItem(DOM(list[i]));
		}
		if (self.settings.start_id){
			DOM(self.settings.start_id).listen('click', function(){
			   self.displayItem(self.items[0], 'left');
			})
		}
	});
}


/**
 * Добавить ссылку в список:
 * @param item
 * @return
 */
fclm_photos.prototype.addItem= function(item){
	item.order=this.items.length;
	eval('item.data={'+item.getAttribute('rev')+'}');
	
	var self=this;
	item.listen('click', function(){
		self.displayItem(item, 'left');
	});
	this.items[item.order]=item;
}
/**
 * Загрузить и показать изображение
 * @param item
 * @param mode
 * @return
 */
fclm_photos.prototype.displayItem= function(item, mode){
	if (!op.lock(this.ul_id)) return false;

	if (item.img){
		this.showPopup(item, mode);
	}
	else {
		item.img=DOM(new Image());

		var self=this;
		item.img.listen('load', function(){
			self.showPopup(item, mode);
		});
		var screen=op.position.screen();
		
		//if (item.data.width+this.settings.padding.x<screen.width && item.data.height+this.settings.padding.y<screen.height){
		//if (item.data.width+this.settings.padding.x<this.clientWidth && item.data.height+this.settings.padding.y<this.clientHeight){
		if (item.data.width+this.settings.padding.x<1000 && item.data.height+this.settings.padding.y<800){
			item.img.src=this.settings.urlPrefix+item.data.src;
		}
		else {
			item.img.src=item.data.preview;
		}
		
	}
}
/**
 * Показать попап:
 * @param объект для которого выводится попап item
 * @param направление (left|right) mode
 * @return
 */
fclm_photos.prototype.showPopup= function(item, mode){	
	var target=this.getTarget();
	
	if (this.active){
		target.complete=false;
		target.hide(item, mode);		
	}
	else {		
		target.show(item, mode);		
	}
	this.active=item;
	//load tags:
	var self=this;
	if (item.tagsHTML==undefined){
		href=item.href.split('?');
		op.query(
			'xml.php?'+href[1],
			function(xml){
				item.tagsHTML=xml.selectString('tags_html');				
				if (target.complete&&item.order==self.active.order){	
				   if (item.tagsHTML == undefined)			
				     item.tagsHTML = '';
					target.tags.innerHTML=item.tagsHTML;
				}
			}
		);
	}
}
/**
 * Получить попап:
 */
fclm_photos.prototype.getTarget= function(){
	if (this.target) return this.target;
	
	var self=this;
	this.target=DOM(this.settings.target_id);
	document.body.appendChild(this.target);
	/**
	 * Анимированное скрытие попапа:
	 */
	this.target.hide= function(item, mode){
		
		if (!mode){
			this.style.display='none';
			if (item) this.show(item, mode);
			return;
		}
		//animate hide:
		var screen=op.position.screen();
		var srcLeft=parseInt(this.style.left);
		if (mode=='left'){
			//уезжает за левый край:
			var dstLeft=screen.left-this.clientWidth;
		}
		else {
			//уезжает за правый край:
			var dstLeft=screen.left+screen.width;
		}
		
		//вычисляем шаг:
		var step=Math.round(Math.abs(srcLeft-dstLeft)/self.settings.animate.iterations);
		document.body.style.overflowX='hidden';
		op.animateRange(				
			function(left){
				self.target.style.left=left+'px';
			},
			function(){
				self.target.style.display='';
				document.body.style.overflowX='';
				if (item){	
					
					self.target.show(item, mode);
				}
			},
			srcLeft, dstLeft, step, self.settings.animate.timeout
		);
	};
	
	/**
	 * Анимированный показ:
	 */
	this.target.show= function(item, mode){		
		this.complete=true;
		if (item.tagsHTML) this.tags.innerHTML=item.tagsHTML;
		else this.tags.innerHTML='';
		this.style.visibility='hidden';		
		this.style.display='block';		
		//this.img.style.backgroundImage='url('+item.img.src+')';
		
		this.img.width=item.img.width;
		this.img.height=item.img.height;
		this.img.src=item.img.src;
		this.h1.innerHTML=item.title;
		var screen=op.position.screen();
      //var rect=op.position.rectangle({width:this.clientWidth, height:this.clientHeight, left:'center', top:'center'});		
      var rect=op.position.rectangle({width:this.img.width+120, height:this.clientHeight, left:'center', top:'center'});		

		//конечная точка:
		var dstLeft=rect.left;
		if (mode=='left'){
			//Выезжает справа:				
			var srcLeft=screen.left+screen.width;
		}
		else {
			//Выезжает слева:
			var srcLeft=screen.left-this.clientWidth;
		}
		//позиционируем по высоте:
		this.style.top=rect.top+'px';
		this.style.left=srcLeft+'px';		
		this.style.visibility='visible';
		
		//вычисляем шаг:
		var step=Math.round(Math.abs(srcLeft-dstLeft)/self.settings.animate.iterations);
		
		//анимируем:
		document.body.style.overflowX='hidden';
		op.animateRange(				
			function(left){
				self.target.style.left=left+'px';
			},
			function(){
				document.body.style.overflowX='';
				op.free(self.ul_id);
			},
			srcLeft, dstLeft, step, self.settings.animate.timeout
		);
	};
	/**
	 * Закрыть попап:
	 */
	this.target.close=DOM(this.settings.target_id+'_close');
	this.target.close.listen('click', function(){
		self.target.hide();		
		self.active=null;
	});
	/**
	 * Получаем placeholders:
	 */
	this.target.h1=DOM(this.settings.target_id+'_h1');
	this.target.img=DOM(this.settings.target_id+'_img');
	this.target.tags=DOM(this.settings.target_id+'_tags');
	
	/**
	 * Навигация:
	 */
	this.target.prev=DOM(this.settings.target_id+'_prev');
	this.target.prev.listen('click', function(){
		uid=self.active.order-1;
		if (uid<0) uid=self.items.length-1;
		self.displayItem(self.items[uid], 'right');
	});
	
	this.target.next=DOM(this.settings.target_id+'_next');
	var next=function(){		
		uid=self.active.order+1;
		if (uid>=self.items.length) uid=0;
		self.displayItem(self.items[uid], 'left');
	};
	this.target.next.listen('click', next);
	this.target.img.listen('click', next);
	
	return this.target; 
}
/**
 * Включить режим загрузки:
 * @return
 */
fclm_photos.prototype.loading= function(){
	if (this.active) this.target.attachClass('loading');
	else DOM(this.loading_id).attachClass('loading');
}
/**
 * Выключить режим загрузки:
 * @return
 */
fclm_photos.prototype.loaded= function(){
	if (this.active) this.target.detachClass('loading');
	else DOM(this.loading_id).detachClass('loading');	
}
