/**
 * @author pmedina
 */
jQuery.fn.extend({
	ultraLightBox: function(o) {		
		o = jQuery.extend({ // definicoes default
			width : 1000, // largura do iframe
			height : 400, // altura do iframe
			border : 10, // border a volta do iframe
			borderColor : "#000",
			overlayOpacity : 0.70, // opacidade do layer sobre a pagina, de 0 a 1
			overlayColor : "#000", // cor do overlay
			backgroundColor : "#000" // cor de fundo da box
		}, jQuery.fn.ultraLightBox.defaults, o);

		jQuery(this).click(function () {
			oTemp = o;
			oTemp.linkClass = jQuery(this).attr("class");
			oTemp.url = o.src || jQuery(this).attr("href"); 
			oTemp.state = true;
			openBox(oTemp);
			return false;
		})
		
		centerLayers = function(o){
				var de = document.documentElement;
				var windowWidth = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
				var windowHeight = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
				
				var xScroll = self.pageXOffset || (de&&de.scrollLeft)/*Explorer 6 Strict*/ || document.body.scrollLeft/*all other Explorers*/;
				var yScroll = self.pageYOffset || (de&&de.scrollTop) || document.body.scrollTop;
				
				var documentWidth, documentHeight;
				if (window.innerHeight && window.scrollMaxY) {	
					//documentWidth = window.innerWidth + window.scrollMaxX;
					documentHeight = window.innerHeight + window.scrollMaxY;
				} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
					//documentWidth = document.body.scrollWidth;
					documentHeight = document.body.scrollHeight;
				} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
					//documentWidth = document.body.offsetWidth;
					documentHeight = document.body.offsetHeight;
				}
				
				var top = (windowHeight > o.height ? (windowHeight/2-(o.height+o.border)/2)/*+15*/ : 0) + yScroll;
                                var left = (windowWidth > o.width ? (windowWidth/2-(o.width+o.border+30)/2) : 0) + xScroll;
				// se a largura ou altura da janela do browser for inferior ao tamanho da box, nao centra mas mete alinhada ao canto, a 0 + as coordenadas do scroll
				
				jQuery("#ulbxOverlay").css({
					//"width" : documentWidth > windowWidth ? documentWidth+30 : windowWidth + 'px',
					"height" : documentHeight > windowHeight ? documentHeight+30 : windowHeight + 'px'// para conseguir ter a altura correcta da janela no FF
				})

				jQuery("#ulbxLayer").css({
					"top" : top + jQuery("#ulbxLayerClose").height() + "px",
					"left" : left + "px"
				})

				jQuery("#ulbxLayerClose").css({
					"top" : top + "px",
					"left" : left + "px"
					//"left" : (left + o.width + o.border*2) - jQuery("#ulbxLayerClose").width() + "px"
				})

		}
		
		
		function openBox(o){
			if(o.state == true) {
				
				
				if (typeof(jQuery().reloadStop) == "function")  {jQuery().reloadStop();};				
				
				jQuery("#ulbxLayer").css({
					"position" : "absolute",
					"width" : o.width+"px",
					"height" : o.height+"px",
					"border" : o.border+"px solid "+o.borderColor,
					"background-color" : o.backgroundColor,
					"overflow" : "hidden",
					"z-index" : "20001"
				})
				
				jQuery("#ulbxLayerClose").css("width", (o.width + o.border*2) + "px"); // atribui a largura do layer ao div dos botoes

				centerLayers(o); // centra os layers e da as dimensoes correctas ao overlay
				
				jQuery(window).resize(function() {
					centerLayers(o); // centra os layers e da as dimensoes correctas ao overlay
				})

				jQuery("SELECT,OBJECT,EMBED,.iframePub").css("visibility","hidden"); // esconde todos os elementos que se sobrepoem ao layer
				jQuery("#ulbxOverlay").show().fadeTo("normal", o.overlayOpacity, function(){
					jQuery("#ulbxLayer").slideDown(500, function(){
						jQuery(this).addClass("loading");
						jQuery("#ulbxLayerClose").fadeTo(500, 1);
						jQuery(this).html(jQuery('<iframe src='+o.url+' id="boxIframe" scrolling="no" frameborder="0" framespacing="0" width="'+o.width+'" height="'+o.height+'" border="0"/>')
							/*
							.fadeOut(1) // esconde o iframe
							.load(function () { // mostra o iframe depois de carregado o conteudo
								jQuery(this).fadeIn(500);
								jQuery("#ulbxLayer").removeClass("loading");
							})*/	
						)
						jQuery("#ulbxLayer").removeClass("loading");
					});
				});				

			} else { // fecha
												
				jQuery("#ulbxLayerClose").fadeTo(500, 0, function(){					
					jQuery(this).css("top", "-100px"); // hack para o #ulbxLayerClose nao ficar sobre o conteudo da pagina
					jQuery("#boxIframe").fadeOut(500, function(){
						jQuery("#ulbxLayer").removeClass("loading").slideUp(500, function(){
							jQuery("#ulbxOverlay").fadeTo("normal", 0, function(){
								jQuery(this).hide(); // esconde o layer depois do fade, para nao se sobrepor ao conteudo
								jQuery("SELECT,OBJECT,EMBED,.iframePub").css("visibility","visible");
								jQuery("#ulbxLayer").empty();								
								// if (typeof(jQuery().reloadStart) == "function") {jQuery().reloadStart();}; // remover refresh de página - dbeja 12/2010
							});
						})
					})
				})
			}
		}
		
		document.onkeydown = function(e){ 
			if (e == null) { // ie
				var keycode = event.keyCode;
			} else { // mozilla
				var keycode = e.which;
			}
			if (keycode == 27) { // Esc
				openBox(0);
			}
		};
		
		
		jQuery("<div id='ulbxOverlay'></div>")
			.click(function(){openBox(0)})
			.appendTo("body").fadeTo("fast", 0)
			.hide();
		jQuery("<div id='ulbxLayer'></div>")
			.appendTo("body")
			.slideUp();
		jQuery("<div id='ulbxLayerClose'></div>")
			.append(jQuery("<div class='fechar' title='fechar'>fechar</div>"))
			.click(function(){openBox(0)})
			.appendTo("body")
			.fadeTo("fast", 0);			

		
		jQuery("body").css({
			"margin" : 0,
			"padding" : 0
		})

		jQuery("SELECT,OBJECT,EMBED,.iframePub").css("visibility","visible"); // para depois esconder elementos que por default ficam sobre o layer

 		jQuery("#ulbxOverlay").css({
			"width" : "100%",
			"height" : "100%",
			"left" : "0",
			"top" : "0",
			"background-color" : o.overlayColor,
			"z-index" : "20000",
			"position" : "absolute"
		})
		if(document.all){		
			jQuery("#ulbxOverlay").css({
				"height" : document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'
			});
		}
		
		jQuery("#ulbxLayerClose").css({
			"position" : "absolute",
			"top" : "-100px", // hack para o layer nao ficar sobre o conteudo
			"left" : "0",
			"color" : "white",
			"z-index" : "20002"
		})
		
		jQuery("#ulbxLayerClose div").css({
			"float" : "right",
			"background-color" : o.borderColor,
			"margin-left" : "3px",
			"padding" : "2px 10px",
			"fontSize" : "110%",
			"fontWeight" : "bold",
			"cursor" : "pointer"
		})
		
		//callback.apply(jQuery(self));
	}
	
})
