/*
* jQuery sureOverlay Plugin v1.0.0
* http://www.visure.com.br
* 
* Copyright 2010, Visure - Author: Leandro Nunes
*
* Description:
* Param:
* Note: Requires jquery v1.4.2
*/

(function($){
	$.fn.extend({
		overlay: function(opts,statusOpen){
			var statusOpen=(statusOpen!=undefined)?statusOpen:false;
			var ajaxOpen=false;
			var id = 'overlay';

			var optDefault = {
				buttonOpen: '.openOverlay',
				buttonClose: '.closeOverlay',
				cor: "black",
				opacity: 70,
				nivel: 10,
				speed: 'fast',
				center: true,
				ajaxUrl: undefined,
				ajaxData:'',
				ajaxDataType:'html',
				ajaxSendType: 'POST',
				ajaxImgLoad: 'img/load.gif',
				callbackOpen: undefined,
				callbackClose:undefined
			};
			var options = jQuery.extend({},optDefault,opts);

			var creatOverlay = function(self,callBack){
				var target = (ajaxOpen)? $('body') : $(self).parent();
				if($('#overlay').get(0) != undefined){
					id = 'overlayUp';
					options.cor = 'transparent';
					options.nivel=20;
				}
				$('<div id="'+id+'"></div>').appendTo(target);
				$('#'+id).css({
					'display': 'none',
					'height': $(document).height(),
					'width' : $(document).width(),
					'position': 'fixed',
					'left': '0',
					'top':'0',
					'background': options.cor,
					'z-index': options.nivel,
					'-moz-opacity': (options.opacity/100),
					'opacity': (options.opacity/100),
					'filter':'alpha(opacity='+options.opacity+')'
				});
				$('#'+id).fadeIn(options.speed,function(){ callBack(); });
			}
			
			var creatContent = function(){
				$("<div id='overlayContent'><img src='"+options.ajaxImgLoad+"' alt='load' /></div>").appendTo($('body'));
				$("#overlayContent").css({'width':$('#overlayContent img').innerWidth()});
				positionContent($("#overlayContent"));
				return $('#overlayContent');
			}
			
			var getContent = function(_url,self){
				$.ajax({
					url:_url,
					data: options.ajaxData,
					type: options.ajaxSendType,
					dataType: options.ajaxDataType,
					success: function(msg){
						self.removeAttr('style');
						self.html(msg);
						self.css({'width': self.children().outerWidth(),'height': self.children().outerHeight()});
						positionContent(self);
						startButton(self);
						if(options.callbackOpen!=undefined)
							options.callbackOpen();	
					},
					error: function(obj,error){ alert('error'); overClose(self); }
				});
			}
			
			var positionContent = function(self){
				if(options.center){
					var boxPosition = {
						'z-index':options.nivel+1,
						'position': 'fixed',
						'top': ($(window).height()/2) - (self.innerHeight() / 2),
						'left': ($(window).width()/2) - (self.innerWidth() / 2)
					};
				}else{
					var boxPosition = {
						'z-index':options.nivel+1,
						'position':((self.css('position')=='static')?'relative':self.css('position'))					
					};
				}
				self.css(boxPosition);			
			}
			
			var overOpen = function(self,bt){
				if(bt.attr('href')!=undefined && bt.attr('href')!=='#' || options.ajaxUrl!=undefined){
					var _url = (options.ajaxUrl!=undefined)?options.ajaxUrl : bt.attr('href');
						ajaxOpen = true;
						creatOverlay(self,function(){ 
							self = creatContent();
							getContent(_url,$('#overlayContent'));
						});
						statusOpen = true;
				}else{
					creatOverlay(self,function(){ startButton(self); });
					positionContent(self);		
					statusOpen = true;	
					if(options.callbackOpen!=undefined)
						options.callbackOpen();					
				}
			};
			
			var startButton = function(self){
				$('#'+id).click(function(){
					overClose(self);
					return false;
				});				
				$(options.buttonClose).click(function(){
					overClose(self);
					return false;
				});				
			}

			var overClose = function(self){
				statusOpen = false;
				if(ajaxOpen){
					self.remove();
					ajaxOpen = false;
				}else{
					self.removeAttr('style');
				}
				$('#'+id).fadeOut(options.speed,function(){ $(this).remove();});
				if(options.callbackClose!=undefined)options.callbackClose();
			};
			
			var self = this;
			return this.each(function(){
				$(options.buttonOpen).each(function(n){
					$(this).unbind('click');
					$(this).click(function(e){
						if(!statusOpen)
							overOpen(self,$(this));
						return false;
					});
				});
				
				if(statusOpen)
					overOpen(self,$(this));
			});
		}
	});
})(jQuery);

