var LightBoxI = new Class({
	
	documentBody: $(document.body),													// ESCOPO DO DOCUMENTO / PÁGINA
	groupImages: [],																// GRUPO DE IMAGENS DA GALERIA
	selectImage: null,																// IMAGEM NO LIGHTBOX
	currentPage: 1,																	// PÁGINA DA IMAGEM NO LIGHTBOX
	inFirstPage: true,																// FLAG QUE SÓ ESTÁ DISPONÍVEL QUANDO É PRIMEIRA IMAGEM (DA GALERIA)
	container: null,																// DIV QUE CONTERÁ TODOS OS ELEMENTOS DO LIGHTBOX
	darkLight: null,																// LUZ NEGRA DE FUNDO COM ALPHA
	whitelight: null,																// LUZ BRANCA DE FUNDO QUE CONTORNA AS IMAGENS E SUAS INFORMAÇÕES
	elementsContainer: null,														// DIV QUE CONTERÁ TODOS OS ELEMENTOS RESPECTIVOS A IMAGEM (EXCETO IMAGEM LOADER)
	loaderContainer: null,															// DIV QUE CONTERÁ TODOS OS ELEMENTOS NECESSÁRIOS PARA O LOADER
	imageCloser: null,																// IMAGEM QUE FECHA O LIGHTBOX
	imageContainer: null,															// IMG QUE RECEBRÁ A IMAGEM À SER VISTA
	infoContainer: null,															// DIV QUE CONTERÁ AS INFORMAÇÕES DA IMAGEM ATUAL (LEGENDA E PAGINAÇÃO)
	legend: null,																	// DIV QUE CONTERÁ A LEGENDA (SE HOUVER)
	legendBgColor: '#F0F0F0',														// COR DE FUNDO DA LEGENDA
	pageContainer: null,															// DIV QUE CONTERÁ A PAGINAÇÃO (SE HOUVER)
	arrowBack: null,																// IMG QUE RECEBRÁ A SETA DE VOLTAR
	pageoftotal: null,																// SPAN QUE CONTERÁ AS INFORMAÇÕES DA PAGINAÇÃO
	arrowAhead: null,																// IMG QUE RECEBRÁ A SETA DE AVANÇAR
	ofPage: '&nbsp;[cp]&nbsp;de&nbsp;[tp]&nbsp;',									// TEXTO DE PAGINAÇÃO: [cp] = PÁGINA ATUAL; [tp] = TOTAL DE PÁGINAS; OBS.: NÃO É NECESSÁRIO A INCLUSÃO DOS PARÂMETROS DISPONÍVEIS
	imageBorder: 5,																	// BORDA RELATIVA ENTRE AS EXTREMIDADE DO LIGHTBOX E O CONTEÚDO, E ESPAÇAMENTO ENTRE OS ELEMENTOS
	loader: 'img/ajax_loader3.gif',													// IMAGEM QUE APARECERÁ QUANDO ESTIVER CARREGANDO A IMAGEM NO LIGHTBOX
	page_back: 'img/light_box_i_back.gif',											// IMAGEM QUE APARECERÁ QUANDO HOUVER A POSSIBILIDADE DE VOLTAR NA GALERIA (SE HOUVER GALERIA)
	page_ahead: 'img/light_box_i_ahead.gif',										// IMAGEM QUE APARECERÁ QUANDO HOUVER A POSSIBILIDADE DE AVANÇAR NA GALERIA (SE HOUVER GALERIA)
	closer: 'img/light_box_i_close.gif',											// IMAGEM QUE APARECERÁ PARA FECHAR O LIGHTBOX
	legendBack: '[back]',															// LEGENDA DA IMAGEM DE VOLTAR
	legendAhead: '[ahead]',															// LEGENDA DA IMAGEM DE AVANÇAR
	legendClose: '[close]',															// LEGENDA DA IMAGEM DE FECHAR
	imgLoad: null,																	// VARIÁVEL USADA PARA CARREGAR IMAGENS
	fxElements: true,																// EFEITOS DE ANIMAÇÃO NOS ELEMENTOS
	fxTime: 100,																	// TEMPO DOS EFEITOS
	
	/*
	ADICIONA O EVENTO PARA QUE ESCUTE QUANDO O USUÁRIO CLICA EM QUALQUER LOCAL DA PÁGINA
	E PARA QUANDO DIGITAR 'ESC', FECHAR O LIGHBOX
	*/
	initialize: function(){
		$(document.body).addEvent('click',(this.callLightBox).bind(this));
	},
	
	/*
	VERIFICA SE ONDE FOI CLICADO, PERTENCE A UM OBJETO PARA SER ENVIADO AO LIGHTBOX
	*/
	callLightBox: function(event){
		var re = /^[lightbox_i]/;
		var t = $(event.target).getParent();
		if(t!=null){
			var rel = t.getProperty('rel');
			if(re.test(rel)){
				this.inFirstPage = true;
				event.stop();
				this.getGroup(event);
				$(document).addEvent('keydown',(function(event){
					if(event.key == 'esc'){
						event.stop();
						this.clearLight();
					}
				}).bind(this));
			}
		}
	},
	
	/*
	ENCONTRA O GRUPO DA IMAGEM CLICADA
	GUARDA A IMAGEM CLICADA
	INICIA A CRIAÇÃO DOS ELEMENTOS
	*/
	getGroup: function(event){
		var t = $(event.target).getParent();
		var rel = t.rel;
		this.groupImages = $(document.body).getElements('a[rel='+rel+']');
		this.selectImage = t;
		this.creatElements();
	},
	
	/*
	CRIA, SETA PROPRIEDADES E ESTILOS INICIAIS PARA TODOS OS ELEMENTOS USADO NO LIGHTBOX
	APOS O "INJECT" DE CADA ELEMENTO, SE HOUVER NECESSIDADE, EXITE SEU TWEEN INICIAL
	*/
	creatElements: function(){
		//	CONTAINER	//
		this.container = new Element('div', {'id': this.overshadowName('container')});
		this.container.inject($(document.body),'top');
		//	DARK LIGHT	//
		this.darkLight = new Element('div', {
			'id': this.overshadowName('darkLight'),
			'events': {
				'click': (this.clearLight).bind(this)
				}
		});
		this.darkLight.setStyles({
			'background-color': '#000',
			width: $(document.body).getScrollSize().x,
			height: $(document.body).getScrollSize().y,
			position: 'absolute',
			'z-index': 1,
			opacity: 0
		});
		this.darkLight.inject(this.container);
		//	WHITE LIGHT	//
		this.whitelight = new Element('div',{'id': this.overshadowName('whitelight')});
		this.whitelight.setStyles({
			'background-color': '#FFF',
			'position': 'absolute',
			'z-index': 2
		});
		this.whitelight.inject(this.container,'top');
		//	IMAGE LOADER	//
		this.loaderContainer = new Element('img',{
			'id': this.overshadowName('loaderContainer'),
			'style': 'display: none;'
		});
		this.loaderContainer.inject(this.whitelight);
		//	ELEMENTS CONTAINER	//
		this.elementsContainer = new Element('div',{
			'id': this.overshadowName('elementsContainer')
		});
		this.elementsContainer.setStyle('display','none');
		this.elementsContainer.inject(this.whitelight);
		//	IMAGE CLOSER	//
		this.imageCloser = new Element('img',{
			'id': this.overshadowName('imageCloser'),
			'src': this.closer,
			'alt': this.legendClose,
			'title': this.legendClose,
			'events': {
				'click': (this.clearLight).bind(this)
			}
		});
		this.imageCloser.setStyles({
			cursor: 'pointer'
		});
		this.imageCloser.inject(this.elementsContainer);
		//	IMAGE TAG	//
		this.imageContainer = new Element('img',{
			'id': this.overshadowName('imageContainer')
		});
		this.imageContainer.inject(this.elementsContainer);
		//	IMAGE INFO (LEGEND AND PAGE)	//
		this.infoContainer = new Element('div',{'id': this.overshadowName('infoContainer')})
		this.infoContainer.setStyles({
			'display': 'none',
			'margin': '0 '+this.imageBorder+' 0 0'
		});
		this.infoContainer.inject(this.elementsContainer);
		//	LEGEND	//
		this.legend = new Element('p',{
			'id': this.overshadowName('legend')
		});
		this.legend.setStyles({
			'display': 'none',
			'text-align': 'left',
			'padding': this.imageBorder,
			'background': this.legendBgColor
		});
		this.legend.inject(this.infoContainer);
		//	PAGE CONTAINER	//
		this.pageContainer = new Element('div',{
			'id': this.overshadowName('pageContainer')
		});
		this.pageContainer.setStyles({
			'display': 'none',
			'text-align': 'center',
			'margin': this.imageBorder+' 0 0 0'
		});
		this.pageContainer.inject(this.infoContainer);
		//	ARROW BACK	//
		this.arrowBack = new Element('img',{
			'id': this.overshadowName('arrowBack'),
			'src': this.page_back,
			'align': 'absmiddle',
			'alt': this.legendBack,
			'title': this.legendBack,
			'events': {
				'click': (this.changeImage).bind(this)
			}
		});
		this.arrowBack.setStyles({
			'cursor': 'pointer',
			'display': 'inline'
		});
		this.arrowBack.inject(this.pageContainer);
		//	PAGE OF TOTAL	//
		this.pageoftotal = new Element('span',{
			'id': this.overshadowName('pageoftotal'),
			'html': this.ofPage
		});
		this.pageoftotal.inject(this.pageContainer);
		//	ARROW AHEAD	//
		this.arrowAhead = new Element('img',{
			'id': this.overshadowName('arrowAhead'),
			'src': this.page_ahead,
			'align': 'absmiddle',
			'alt': this.legendAhead,
			'title': this.legendAhead,
			'events': {
				'click': (this.changeImage).bind(this)
			}
		});
		this.arrowAhead.setStyles({
			'cursor': 'pointer',
			'display': 'inline'
		});
		this.arrowAhead.inject(this.pageContainer);
		//	START FIRST VIEW	//
		this.fxAlpha(this.darkLight,0,0.8,(this.firstView).bind(this));
	},
	
	/*
	MOSTRA A IMAGEM CLICADA NO LIGHBOX
	GUARDA A POSIÇÃO NA GALERIA (SE HOUVER)
	INICIA O CARREGAMENTO
	*/
	firstView: function(){
		this.groupImages.each((function(item, index){
			if(item.href == this.selectImage.href){
				this.currentPage = index+1;
				this.preLoader();
			}
		}).bind(this));
	},
	
	/*
	QUANDO MUDA A IMAGEM (QUANDO HÁ GALERIA), REESCREVE A PAGINAÇÃO
	*/
	rewritesPaging: function(){
		var nh = this.str_replace(this.ofPage,'[cp]',this.currentPage);
		nh = this.str_replace(nh,'[tp]',this.groupImages.length);
		this.pageoftotal.setProperty('html',nh);
	},
	
	/*
	AÇÃO DE IR E VOLTAR NA GALERIA (SE HOUVER)
	*/
	changeImage: function(event){
		var id = $(event.target).id;
		this.fxAlpha(this.elementsContainer,1,0,(function(){
			this.elementsContainer.setStyle('display','none');
			switch(id){
				case this.arrowBack.id:
					this.currentPage--;
					this.preLoader();
				break;
				case this.arrowAhead.id:
					this.currentPage++;
					this.preLoader();
				break;
			}
		}).bind(this));
	},
	
	/*
	PRELOADER PARA O CARREGAMENTO DA IMAGEM PRINCIPAL
	*/
	preLoader: function(){
		document.getElementById("cont_banner_lateral").style.visibility = "hidden";
		//	LOADER	//
		this.imgLoad = new Image();
		this.imgLoad.onload = (function(){
			this.imgLoad.onload = null;
			if(this.inFirstPage){
				this.inFirstPage = false;
				this.fxWhiteLight(this.imgLoad.width+this.imageBorder,this.imgLoad.height+this.imageBorder,(this.preLoaderComplete).bind(this));
			}else{
				this.preLoaderComplete();
			}
		}).bind(this);
		this.imgLoad.src = this.loader;
	},
	
	preLoaderComplete: function(){
		this.loaderContainer.setProperty('src', this.imgLoad.src);
		var m_t = (this.str_replace(this.whitelight.getStyle('height'),'px','')-this.imgLoad.height)/2;
		var m_l = (this.str_replace(this.whitelight.getStyle('width'),'px','')-this.imgLoad.width)/2;
		this.loaderContainer.setStyles({
			'display': 'block',
			'opacity': 0,
			'margin': m_t+' 0 0 '+m_l,
			'width': this.imgLoad.width,
			'height': this.imgLoad.height
		});
		this.elementsContainer.setStyle('display','none');
		this.fxAlpha(this.loaderContainer,0,1,(this.loaderImage).bind(this));
	},
	
	/*
	CARREGA A IMAGEM PRINCIPAL
	QUANDO CARREGADA, DÁ INICIO NO ALINHAMENTO DOS ELEMNTOS BASEADO NO TAMANHO DA IMAGEM
	*/
	loaderImage: function(){
		//	LOADER	//
		this.imgLoad = new Image();
		this.imgLoad.onload = (function(){
			this.imgLoad.onload = null;
			this.fxAlpha(this.loaderContainer,1,0,(this.loaderImageComplete).bind(this));
		}).bind(this);
		this.imgLoad.src = this.groupImages[this.currentPage-1];
	},
	
	loaderImageComplete: function(){
		this.loaderContainer.setStyle('display','none');
		this.elementsContainer.setStyles({
			'display': 'block',
			'opacity': 0
		});
		this.imageContainer.setProperty('src', this.imgLoad.src);
		this.imageContainer.setStyles({
			'width': this.imgLoad.width,
			'height': this.imgLoad.height
		});
		this.rewritesPaging();
		this.reorgElements();
	},
	
	/*
	REORGANIZA OS ELEMETOS NECESSÁRIOS DO LIGHTBOX
	PREVENDO LEGENDA E PAGINAÇÃO
	*/
	reorgElements: function(){
		//	NEW VALUES FOR WHITELIGHT	//
		var cont_dim = {};
		cont_dim.w = Number(this.str_replace(this.imageContainer.getStyle('width'),'px',''));
		cont_dim.h = Number(this.str_replace(this.imageContainer.getStyle('height'),'px',''))+Number(this.str_replace(this.imageCloser.getStyle('height'),'px',''))+this.imageBorder;
		//	WE NEED FOR INFO CONTAINER AND INCREMENT HEIGHT	//
		if(this.groupImages.length > 1 || this.groupImages[this.currentPage-1].title != ''){
			this.infoContainer.setStyles({
				'display': 'block',
				'width': Number(this.str_replace(this.imageContainer.getStyle('width'),'px',''))
			});
			if(this.groupImages.length > 1){
				this.pageContainer.setStyles({
					'display': 'block'
				});
				if(this.currentPage <= 1){
					this.arrowBack.setStyles({
						'display': 'none'
					});
					this.arrowAhead.setStyles({
						'display': 'inline'
					});
				}else if(this.currentPage >= this.groupImages.length){
					this.arrowBack.setStyles({
						'display': 'inline'
					});
					this.arrowAhead.setStyles({
						'display': 'none'
					});
				}else{
					this.arrowBack.setStyles({
						'display': 'inline'
					});
					this.arrowAhead.setStyles({
						'display': 'inline'
					});
				}
			}else{
				this.pageContainer.setStyles({
					'display': 'none'
				});
			}
			if(this.groupImages[this.currentPage-1].title != ''){
				this.legend.setProperties({
					'text': this.groupImages[this.currentPage-1].title
				});
				this.legend.setStyles({
					'display': 'block',
					'margin': this.imageBorder+' 0 0 0',
					'width': Number(this.str_replace(this.imageContainer.getStyle('width'),'px',''))-(this.imageBorder*2)
				});
				//	GAMBIS PRO IE	//
				if(Browser.Engine.trident){
					this.legend.setStyles({
						'width': Number(this.str_replace(this.imageContainer.getStyle('width'),'px',''))
					});
				}else{
					this.legend.setStyles({
						'width': Number(this.str_replace(this.imageContainer.getStyle('width'),'px',''))-(this.imageBorder*2)
					});
				}
			}else{
				this.legend.setStyles({
					'display': 'none'
				});
			}
			cont_dim.h += Number(this.str_replace(this.infoContainer.getStyle('height'),'px','')) + this.imageBorder;
		}else{
			this.infoContainer.setStyles({
				'display': 'none'
			});
		}
		//	NEW VALUES FOR WHITELIGHT	//
		cont_dim.w += this.imageBorder*2;
		cont_dim.h += this.imageBorder*2;
		//alert(cont_dim.h);
		this.elementsContainer.setStyles({
			'display': 'none'
		});
		this.fxWhiteLight(cont_dim.w,cont_dim.h,(this.reorgElementsComplete).bind(this));
	},
	
	reorgElementsComplete: function(){
		//alert(this.whitelight.getStyle('height'));
		//	NEW VALUES FOR ELEMENTS BE NEED CHANGE	//
		this.elementsContainer.setStyles({
			'margin': this.imageBorder+' 0 0 '+this.imageBorder,
			'display': 'block'
		});
		this.imageCloser.setStyle('margin','0 0 '+this.imageBorder+' '+(Number(this.str_replace(this.imageContainer.getStyle('width'),'px',''))-Number(this.str_replace(this.imageCloser.getStyle('width'),'px',''))));
		this.fxAlpha(this.elementsContainer,0,1,(function(){
			//
		}).bind(this));
	},
	
	/*
	FECHA E APAGA O LIGHBOX DO CÓDIGO
	*/
	clearLight: function(){
		$(document).removeEvent('keydown',arguments.callee);
		document.getElementById("cont_banner_lateral").style.visibility = "visible";
		this.container.destroy();
	},
	
	/*
	FUNÇÃO QUE RETIRA UMA STRING DE OUTRA STRING
	EXEMPLO:
	ABABA - B = AAA
	*/
	str_replace: function(str, find, replace) {
		return str.split(find).join(replace);
	},
	
	fxWhiteLight: function(w,h,f){
		var wi = Number(this.str_replace(this.whitelight.getStyle('width'),'px',''));
		var hi = Number(this.str_replace(this.whitelight.getStyle('height'),'px',''));;
		var ti = (($(document.body).getSize().y-hi)/2)+$(document.body).getScroll().y;
			if(ti<=0){ti=this.imageBorder*2;}
		var li = (($(document.body).getSize().x-wi)/2)+$(document.body).getScroll().x;
		var tf = (($(document.body).getSize().y-h)/2)+$(document.body).getScroll().y;
			if(tf<=0){tf=this.imageBorder*2;}
		var lf = (($(document.body).getSize().x-w)/2)+$(document.body).getScroll().x;
		if(this.fxElements){
			var fxCurrentElement = this.whitelight;
			fxCurrentElement = new Fx.Morph(fxCurrentElement,{
				link: 'cancel',
				duration: this.fxTime,
				onComplete: function(){
					f();
				}
			});
			fxCurrentElement.start({
				'top': [ti,tf],
				'left': [li,lf],
				'width': [wi,w],
				'height': [hi,h]
			});
		}else{
			this.whitelight.setStyles({
				'top': tf,
				'left': lf,
				'width': w,
				'height': h
			});
			f();
		}
	},
	
	fxAlpha: function(e,i,f,fn){
		var fxCurrentElement = e;
		if(this.fxElements){
			fxCurrentElement = new Fx.Morph(fxCurrentElement,{
				link: 'cancel',
				duration: this.fxTime,
				onComplete: function(){
					fn();
				}
			});
			fxCurrentElement.start({
				'opacity': [i,f]
			});
		}else{
			fxCurrentElement = new Fx.Morph(fxCurrentElement,{
				link: 'cancel',
				duration: 0,
				onComplete: function(){
					fn();
				}
			});
			fxCurrentElement.start({
				'opacity': [i,f]
			});
		}
	},
	
	overshadowName: function(s){
		return Math.round(Math.random()*29041988);
	}

});

window.addEvent('domready', function() {
    var light_box_i = new LightBoxI();
});