// JavaScript Document
GLB.namespace("GLB.util");
GLB.namespace("GLB.common");
GLB.util.popIn = function(){
	/*
		.version: 1.0
		
		.date:
		20/09/2007
		
		.usage:
		<a href="teste.htm" onclick="GLB.util.popIn.showContent({src: "", method: "POST || GET"});return false;">teste</a>	
		
		.requeried
		GLB.util.httpRequest
		GLB.util.css
	*/
	var _animate	 = {shadow:false, window:true, content:true}
	
	var _elOculta	 = "box-popin-oculta";
	var _elOverlay	 = "box-popin-sombra";
	var _elLoad	 	 = "box-popin-load";
	var _elWindow	 = "box-popin";
	var _elCtClose	 = "box-popin-fechar";
	var _elClose	 = "link-fechar-popin";
	var _elTitle	 = "titulo-popin";
	var _elContent	 = "conteudo-popin";
	var _elCaption	 = "legenda-popin";
	var _elCtCredito = "credito-popin";
	var _elImage	 = "imagem-popin";
	var _zindex		 = 99999;
	
	
	var _position = function() {
		
		var Css	 	= GLB.util.css;
		
		var TB_PDLEFT	= Number(Css.getStyle(GLB.$(_elWindow), "paddingLeft").replace("px", ""));
		var TB_PDRIGHT	= Number(Css.getStyle(GLB.$(_elWindow), "paddingRight").replace("px", ""));
		var TB_WIDTH 	= Css.getWidth(GLB.$(_elImage)? GLB.$(_elImage): GLB.$(_elWindow)) + TB_PDLEFT + TB_PDRIGHT;
		var TB_HEIGHT 	= Css.getHeight(GLB.$(_elWindow));	
		
		if(_animate.window && GLB.common.animation){
			var Tween 	= GLB.common.animation.Tween;
			
			var fl = parseInt(Css.getStyle(GLB.$(_elWindow), "padding-left").replace("px" ,""), 10) || 0;
			var fr = parseInt(Css.getStyle(GLB.$(_elWindow), "padding-right").replace("px" ,""), 10) || 0;
			var ft = parseInt(Css.getStyle(GLB.$(_elWindow), "padding-top").replace("px" ,""), 10) || 0;
			var fb = parseInt(Css.getStyle(GLB.$(_elWindow), "padding-bottom").replace("px" ,""), 10) || 0;
			
			var l = parseInt(((_page().w - TB_WIDTH) / 2),10);
			var t = parseInt(_scroll().yScroll + ((_page().h - TB_HEIGHT) / 2),10);
			var w = TB_WIDTH  - (fl+fr);
			var h = TB_HEIGHT - (ft+fb);
			
			GLB.$(_elWindow).style.overflow = "hidden";
			
			GLB.util.css.setStyle((GLB.$(_elImage)? GLB.$(_elImage): GLB.$(_elContent)), "visibility: hidden");
			if(GLB.$(_elCaption))GLB.util.css.setStyle(GLB.$(_elCaption), "visibility: hidden");
			
			var anim = new Tween([0, 0, _page().w/2, _scroll().yScroll + _page().h/2], [w, h, l, t], 500, {element: GLB.$(_elWindow)});
			//anim.easingEquation = GLB.common.animation.elasticEquation; 
			anim.onAnimation 	= _adjustSize;
			anim.onEndAnimation =_endAdjustSize;
			anim.init();			
		}else{
			GLB.$(_elWindow).style.left = parseInt(((_page().w - TB_WIDTH) / 2),10) + 'px';
			GLB.$(_elWindow).style.top  = parseInt(_scroll().yScroll + ((_page().h - TB_HEIGHT) / 2),10) + 'px';
		}
	}
	var _t = "";
	var _adjustSize = function(values, args){	
		if(!args.element)return;
		
		args.element.style.width 	= Math.round(values[0])+"px";
		args.element.style.height 	= Math.round(values[1])+"px";		
		args.element.style.left 	= Math.round(values[2])+'px';
		args.element.style.top  	= Math.round(values[3])+'px';	
		
		_t += args.element.id+" -> "+Math.round(values[0])+"px"+" - "+Math.round(values[1])+"px";
	}
	var _endAdjustSize = function(values, args){		
		_adjustSize(values, args);
		
		if(_animate.content && GLB.common.animation){
			var anim = new GLB.common.animation.Tween(0, 100, 500, {element: (GLB.$(_elImage)? GLB.$(_elImage): GLB.$(_elContent))});
			anim.onAnimation 	= anim.onEndAnimation = _adjustAlpha;
			anim.init();
			
			/* -- */
			if(GLB.$(_elCaption)){
				var anim2 = new GLB.common.animation.Tween(0, 100, 500, {element: GLB.$(_elCaption)});
				anim2.onAnimation 	= anim2.onEndAnimation = _adjustAlpha;
				anim2.init();
				//GLB.util.css.setStyle(GLB.$(_elCaption), "visibility: visible");			
			}
		}else{
			GLB.$(_elWindow).style.overflow = "";
			GLB.util.css.setStyle(GLB.$(_elContent), "visibility: visible");
			if(GLB.$(_elCaption))GLB.util.css.setStyle(GLB.$(_elCaption), "visibility: visible");
		}
		
		
	}

	var _adjustAlpha = function(values, args){	
		if(!args.element)return;
		GLB.util.css.setStyle(args.element, "opacity: "+(Math.round(values)/100));
		args.element.style.visibility = "";
	}
	
	var _page = function() {
		var _body = GLB.$("body");
		var _html = GLB.$("html");
		
		var de = document.documentElement;
		var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || _body.clientWidth;
		var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || _body.clientHeight;

		return {w: w,h: h};
	}
	
	var _scroll = function(){
		var yScroll;
		if (self.pageYOffset) yScroll = self.pageYOffset;
		else if (document.documentElement && document.documentElement.scrollTop) yScroll = document.documentElement.scrollTop;
		else if (document.body) yScroll = document.body.scrollTop;

		return {yScroll:yScroll};
	}
	
	var _hide = function() {
		var _body = GLB.$("body");
		var _html = GLB.$("html");
		
		GLB.$(_elOverlay).onclick = "";
		GLB.$(_elWindow).onclick = "";
		GLB.$(_elClose).onclick = "";
		
		GLB.$(_elWindow) 	&& 	_body.removeChild(GLB.$(_elWindow));
		GLB.$(_elLoad)	 	&& 	_body.removeChild(GLB.$(_elLoad));
		GLB.$(_elOculta) 	&& 	_body.removeChild(GLB.$(_elOculta));
		GLB.$(_elOverlay) 	&& 	_body.removeChild(GLB.$(_elOverlay));
		
		if (typeof _body.style.maxHeight == "undefined") {
			_body.style.height = _body.style.width = "auto";
			_html.style.height = _html.style.width = "auto";
			_html.style.overflow = "";
		}
		return false;
	}
	
	var _onLoadContent = function(arguments){
		var args = arguments.result;
		
		GLB.$(_elWindow).appendChild(GLB.create("div", {id: _elCtClose}));
		if(arguments.title!=undefined)GLB.$(_elCtClose).appendChild(GLB.create("h3", {id: _elTitle, innerHTML: arguments.title}));
		GLB.$(_elCtClose).appendChild(GLB.create("a", {href: "#fechar", id: _elClose, innerHTML: "x fechar"}));
		GLB.$(_elWindow).appendChild(GLB.create("div", {id: _elContent, innerHTML: args.responseText}));
				
		GLB.$(_elClose).onclick = _hide;
		GLB.$(_elOverlay).onclick = _hide;
				
		GLB.$("body").removeChild(GLB.$(_elLoad));
		
		setTimeout(_position, 50);
	}
	
	var _onLoadImage = function(){
		var Css	 	= GLB.util.css;
		
		this.onload = null;
		
		var x = _page().w - 150;
		var y = _page().h - 150;
		
		GLB.$(_elWindow).appendChild(GLB.create("div", {id: _elCtClose}));
		GLB.$(_elCtClose).appendChild(GLB.create("a", {href: "#fechar", id: _elClose, innerHTML: "x fechar"}));
		GLB.$(_elCtClose).appendChild(GLB.create("div", {id: _elCtCredito, innerHTML: this.alt}));
		GLB.$(_elWindow).appendChild(GLB.create("div", {id: _elContent, align:"center"}));
		GLB.$(_elWindow).appendChild(GLB.create("div", {id: _elCaption, innerHTML: this.caption}));
		GLB.$(_elContent).appendChild(GLB.create("img", {src: this.src, id: _elImage, alt: this.caption}));
		
		var imageWidth = this.width>0? this.width : Css.getWidth(GLB.$(_elImage));
		var imageHeight = this.height>0? this.height: Css.getHeight(GLB.$(_elImage));
		
		if (imageWidth/x > imageHeight/y) {
			imageHeight = imageHeight * (Math.min(x, imageWidth)/ imageWidth); 
			imageWidth = Math.min(x, imageWidth); 
		}else{
			imageWidth = imageWidth * (Math.min(y, imageHeight) / imageHeight); 
			imageHeight = Math.min(y, imageHeight); 
		}
		
		GLB.$(_elImage).width = imageWidth;
		GLB.$(_elImage).height = imageHeight;

				
		GLB.$(_elClose).onclick = _hide;
		GLB.$(_elOverlay).onclick = _hide;
		
		GLB.$("body").removeChild(GLB.$(_elLoad));
		
		setTimeout(_position, 50);
	}
	
	var _show = function(args, type) {		
		
		var _body 		= GLB.$("body");
		var _html 		= GLB.$("html");
		//var _classElWindow = args.class || "";
		
		var Css	  = GLB.util.css;
		
		if (typeof GLB.$("body").style.maxHeight === "undefined") { //if IE 6	
			
			_body.style.height = _body.style.width = "100%";
			_html.style.height = _html.style.width = "100%";
			//_html.style.overflow = "hidden";
			if (GLB.$(_elOculta) === null)_body.appendChild(GLB.util.css.setStyle(GLB.create("iframe", {id: _elOculta}), "opacity:0;position:absolute;top:0;left:0;width:100%;"));
		
		}
			
		_body.appendChild(GLB.util.css.setStyle(GLB.create("div", {id: _elOverlay}), "z-index:"+(_zindex+1)+"; visibility:"+(_animate.shadow? "hidde": "")));
		//_body.appendChild(GLB.util.css.setStyle(GLB.create("div", {id: _elWindow, className: _classElWindow}), "z-index:"+(_zindex+2)));									 
		_body.appendChild(GLB.util.css.setStyle(GLB.create("div", {id: _elWindow}), "z-index:"+(_zindex+2)));									 
		_body.appendChild(GLB.util.css.setStyle(GLB.create("div", {id: _elLoad}), "z-index:"+(_zindex+3)));
		
		var h = (_body.scrollHeight > _body.offsetHeight) ? _body.scrollHeight :_body.offsetHeight + 'px';
		if(GLB.$(_elOculta))GLB.$(_elOculta).style.height = h;
		GLB.$(_elOverlay).style.height = h;	
		GLB.$(_elWindow).style.position = "absolute";
		GLB.$(_elWindow).style.minWidth = "10px";
		GLB.$(_elWindow).style.minHeight = "10px";
		GLB.$(_elLoad).style.visible = "visible";
		
		//--Centralizando o load
		var loadW 	= Css.getWidth(GLB.$(_elLoad));
		var loadH 	= Css.getHeight(GLB.$(_elLoad));	
		var fl = parseInt(Css.getStyle(GLB.$(_elLoad), "padding-left").replace("px" ,""), 10) || 0;
		var fr = parseInt(Css.getStyle(GLB.$(_elLoad), "padding-right").replace("px" ,""), 10) || 0;
		var ft = parseInt(Css.getStyle(GLB.$(_elLoad), "padding-top").replace("px" ,""), 10) || 0;
		var fb = parseInt(Css.getStyle(GLB.$(_elLoad), "padding-bottom").replace("px" ,""), 10) || 0;
			
		var w = loadW - (fl+fr);
		var h = loadH - (ft+fb);
		
		var l = parseInt(((_page().w - loadW) / 2),10);
		var t = parseInt(_scroll().yScroll + ((_page().h - loadH) / 2),10);
		
		GLB.$(_elLoad).style.left = parseInt(((_page().w - loadW) / 2),10) + 'px';
		GLB.$(_elLoad).style.top  = parseInt(_scroll().yScroll + ((_page().h - loadH) / 2),10) + 'px';
		
		if(_animate.shadow && GLB.common.animation){
			var anim = new GLB.common.animation.Tween(0, 80, 500, {element: GLB.$(_elOverlay)});
			anim.onAnimation = anim.onEndAnimation = _adjustAlpha;
			anim.init();
		}
		if(type=="content"){
			//Carregando dados;
			if(args.method && args.method.toLowerCase() == "post")
				GLB.util.httpRequest.post(args.src, args.params || "", {onComplete: _onLoadContent, arguments: args}, true);
			else
				GLB.util.httpRequest.get(args.src, args.params || "", {onComplete: _onLoadContent, arguments: args}, true);
				
		}else if(type=="image"){
			//Carregando Imagem
			var imgPreloader = GLB.create("img");
			imgPreloader.caption = args.caption || "";
			imgPreloader.alt = args.alt || "";
			imgPreloader.onload = _onLoadImage;
			imgPreloader.src = args.src;
		}
	}
	return {
		showContent: function(args){_show(args, "content");},
		showImage: function(args){_show(args, "image");},
		hide: _hide
	}

}();
