// JavaScript Document
hpmaisMultibox = new Class({
	Implements: [Events,Options],
	options: {
		'loading':'loader_p_white.gif'
	},
	initialize: function(options) {
		this.setOptions(options);
	},
	overlay:null,
	galerias:[],
	slider:null,
	opened:false,
	galeria:false,
	interno:{'addwidth':0,'minheight':0},
	attach: function(el) {
		el = $(el);
		var rel = el.get('rel');
		if (rel.contains('[')) {
			pattern = /\[(.*?)\]/;
			matches = rel.match(pattern);
			var name = matches[0];
			this.addgallery(name,el);
			el.addEvent('click',function(e){ e = new Event(e); e.stop(); this.opengallery(name,el);  }.bind(this));
		} else {
			el.addEvent('click',function(e){ e = new Event(e); e.stop(); this.opensingle(el); }.bind(this));
		}
	},
	opengallery: function(name,el) {
		var index = this.findgallery(name);
		if (this.galerias[index].itens.length>1) {
			if (!this.opened) {
				this.multiboxcreate('galeria');
				this.carregar_thumbs(this.galerias[index]);
			}
			this.show(el);
		} else
			this.opensingle(el);
	},
	carregar_thumbs: function(gallery) {
		var slide = $$('div[class=galeria_slide]')[0];
		gallery.itens.each(function(el,i){
			var thumb = new Element('div',{'id':gallery.name+'_'+i,'class':'galeria_thumb'})
				.addEvent('click',function(){ this.show(el); }.bind(this))
				.setStyle('background-image','url('+el.getElement('img').get('src')+')').inject(slide);
		},this);
	},
	addLoading: function() {
		$$('div[class=imagecontainer]').setStyle('background','no-repeat center url('+PATH_IMG+this.options.loading+')');
	},
	removeLoading: function() {
		$$('div[class=imagecontainer]').setStyle('background','');
	},
	multiboxcreate: function(tipo) {
		this.overlay = new Spinner();
		this.overlay.addEvent('click',this.fechar.bind(this));
		this.overlay.show();
		var box = new Element('div',{'class':'hpmaisMultibox'}).inject(document.body);
		var container = new Element('div',{'class':'container'}).inject(box);
		var imagecontainer = new Element('div',{'class':'imagecontainer'}).inject(container);
		if (tipo=='galeria') {
			var galeria_thumbs = new Element('div',{'class':'galeria_thumbs'}).inject(container);
			var bt_acima = new Element('div',{'class':'galeria_bt_acima'}).inject(galeria_thumbs);
			var galeria_wrapper = new Element('div',{'class':'galeria_wrapper'}).inject(galeria_thumbs);
			var bt_abaixo = new Element('div',{'class':'galeria_bt_abaixo'}).inject(galeria_thumbs);
			var galeria_slide = new Element('div',{'class':'galeria_slide'}).inject(galeria_wrapper);
			var coords = galeria_thumbs.getCoordinates();
			this.interno.addwidth=coords.width;
			this.interno.minheight=coords.height;
			this.galeria=true;
			this.slider = new hpmaisSlider({'slider':galeria_slide,'wrapper':galeria_wrapper,'bt_desce':bt_acima,'bt_sobe':bt_abaixo});
		} else
			this.galeria=false;
		var close_bt = new Element('div',{'class':'bt_fechar'}).inject(container).addEvent('click',this.fechar.bind(this));
		this.opened=true;
	
		box.position({'position':'center'});
	},
	fechar: function() {
		var container = $$('.hpmaisMultibox')[0];
		this.overlay.hide();
		var eff = new Fx.Morph(container,{'onComplete':function(){
			container.dispose();
			this.opened=false;
		}.bind(this)}).start({'opacity':0});
		
	},
	show: function(el) {
		var imagecontainer = $$('div[class=imagecontainer]')[0];
		imagecontainer.empty();
		$$('.bt_fechar')[0].setStyle('display','none');
		if (this.galeria) {
			this.slider.scrollTo(el.retrieve('thumb'));
			this.slider.options.slider.getElements('.galeria_thumb_sel').set('class','galeria_thumb');
			$(el.retrieve('thumb')).set('class','galeria_thumb_sel');
		}
		this.addLoading();
		this.imagem_atual = Asset.image(el.get('href'),{
			'onLoad': function(){ this.show_image(); }.bind(this)
		});
		if (el.get('title')!='') {
			this.imagem_atual.store('legenda',el.get('title'));
		}
	},
	show_image: function() {
		var container = $$('.hpmaisMultibox')[0];
		var imagecontainer = $$('div[class=imagecontainer]')[0];
		var container_coords = container.getCoordinates();
		var imagecontainer_coords = imagecontainer.getCoordinates();
		var eff_image = new Fx.Morph(imagecontainer,{ transition: Fx.Transitions.linear.easeInOut,'onComplete':function(){
			this.removeLoading();
			imagecontainer.adopt(this.imagem_atual);
			this.imagem_atual.position({'relativeTo':imagecontainer,'position':'center'});
			$$('.bt_fechar')[0].position({'relativeTo':container,'position':'upperRight','edge':'upperRight','offset':{x:10,y:-10}}).setStyle('display','block');
			var legenda = this.imagem_atual.retrieve('legenda');
			if (legenda!=null) {
				var div = new Element('div',{'class':'legendacontainer'})
					.inject(imagecontainer)
					.position({'relativeTo':this.imagem_atual,'position':'bottom','edge':'bottom'});
				var divlegenda = new Element('div',{'html':legenda,'class':'legenda'}).inject(div);
				
				this.imagem_atual.addEvents({
					'mouseover':this.legenda_show.bind(this),
					'mouseout':this.legenda_close.bind(this)
				})
				
			}
			this.legenda_close.delay(3000);
		}.bind(this)});
		if (this.imagem_atual.height<this.interno.minheight) var height = this.interno.minheight; else var height = this.imagem_atual.height;
		eff_image.start({'width':this.imagem_atual.width+'px','height':height+'px'});
		var diff_left=Math.ceil((imagecontainer_coords.width-this.imagem_atual.width)/2);
		var left = container_coords.left + (diff_left);
		left=(left<0?0:left);
		var eff_container = new Fx.Morph(container,{transition: Fx.Transitions.linear.easeInOut});
		eff_container.start({'left':left});
	},
	legenda_show: function() {
		$$('.legendacontainer > .legenda').setStyle('display','block');
	},
	legenda_close: function() {
		$$('.legendacontainer > .legenda').setStyle('display','none');
	},
	opensingle: function(el) {
		if (!this.opened) {
			this.multiboxcreate('single');
		}
		this.show(el);		
	},
	findgallery: function(name) {
		var c = this.galerias.length;
		for (var i=0;i<c;i++) {
			if (this.galerias[i].name==name) {
				return i;
			}
		}
		return false;
	},	
	addgallery: function(name,el) {
		var index = this.findgallery(name);
		if (index===false) {
			this.galerias.include({'name':name,'itens':[el]});
			el.store('thumb',name+'_0');
		} else {
			el.store('thumb',name+'_'+this.galerias[index].itens.length);
			this.galerias[index].itens.include(el);
		}
	},
	openurl: function(url,legenda) {
		var a = new Element('a',{'href':url,'title':legenda});
		this.opensingle(a);		
	}
});

var multibox;
window.addEvent('domready',function(){
	multibox = new hpmaisMultibox();
	$$('a[rel^=lightbox]').multiboxAttach();
});

Element.implement({
	multiboxAttach: function() {
		multibox.attach(this);
	}
});

