/*
    AUTHOR: Rafael Fernandes
    LAST MODIFIED: 11-08-2009

	REQUIREMENTS: JQUERY 1.3.2+
	
	EXAMPLE:
	$('dom element/s').bubuConfirm({
		opacity: 0, # Default 0.8
		onOk: function(e){}, # e = this element
		onCancel: function(e){}, # e = this element
		content: "append a content",
		contentAttr: "href", # this overwrite's the (content option) and adds the content inside the element atribute "href"
		ok: "ok button label",
		cancel: "cancel button label"
	});

	NOTE: 
*/	

jQuery.fn.extend({
	
		dgBox: function(options) {
			
			var mainEl = $(this);
			// OPTION DEFAULT
			if(options==undefined)
				options = {};
			var allowscroll = true;
			if(options.allowscroll!=undefined && options.allowscroll!=true)
				allowscroll = false;
			// OPACITY DEFAULT
			var opacity = 0.8;
			if(options.opacity>0 && options.opacity<1 && options.opacity!=undefined)
				opacity = options.opacity;
			options.opacity = opacity;
			options.allowscroll = allowscroll;
			// CONTENT DEFAULT
			var mainContent = "";
			if(options.content!=undefined && options.content!="")
				mainContent = options.content;
			if(options.contentAttr!=undefined && options.contentAttr!="")
			{
				var newContent = mainEl.attr(options.contentAttr);
				if(newContent!="" && newContent!=undefined)
					mainContent = newContent;
			}
			
			var overlayer = $('<div>');
			var box = $('<div>');
			
			mainEl.data("dgBox",{
				options: options,
				overlayer: overlayer,
				box: box,
				mainContent: mainContent,
				close: true,
				overLayerPos: function(){
					mainEl.data("dgBox").overlayer.height($(document).height());
				},
				createOverLayer: function(){
					var ol = mainEl.data("dgBox").overlayer;
					ol.hide();
					ol.css({
						position:"absolute",
						width:"100%",
						top:"0px",
						left:"0px",
						backgroundColor:"#000000",
						zIndex:"10000"
					});
					ol.animate({opacity:opacity},0);
					var box = mainEl.data("dgBox").box;
					box.hide();
					box.css({
						position:"absolute",
						top:"0px",
						left:"0px",
						zIndex:"10010"
					});
					$('body').append(ol).append(box);
				},
				closeConfirm: function(){
					mainEl.data("dgBox").box.hide().empty();
					var ol = mainEl.data("dgBox").overlayer;
					$("object").show();
					ol.animate({opacity: mainEl.data("dgBox").options.opacity}, 0).hide();
				},
				showOverlayer: function()
				{
					$("object").hide();
					var ol = mainEl.data("dgBox").overlayer;
					mainEl.data("dgBox").overLayerPos();
	 				ol.show();
					if (mainEl.data("dgBox").close) {
						ol.click(mainEl.data("dgBox").closeConfirm);
					}
					mainEl.data("dgBox").box.show();
					
					mainEl.data("dgBox").createBox();
				},
				reposition: function()
				{
					var box = mainEl.data("dgBox").box;
					var calcOverlay = $(document).scrollLeft();
					var calL = $(window).width()/2+calcOverlay;
					var calT = ($(document).scrollTop()+$(window).height()/2);		
					box.css({left:calL,top:calT});	
					mainEl.data("dgBox").overlayer.css({left:calcOverlay})
				},
				staticreposition: function()
				{
					var box = mainEl.data("dgBox").box;
					var calcOverlay = $(document).scrollLeft();
					var calL = $(window).width()/2+calcOverlay;	
					box.css({left:calL,top:40});	
					mainEl.data("dgBox").overlayer.css({left:calcOverlay})
				},
				createBox: function()
				{
					mainEl.data("dgBox").box.empty();
					var confirmBox = $('<div>');
					var closeBtn = $('<div>')
					var closeBtnTrigg = $('<div>');
					
					confirmBox.empty();
					confirmBox.addClass("BUBU_OVERLAY_DG_BOX");
					confirmBox.append(mainEl.data("dgBox").mainContent);
					
					if (mainEl.data("dgBox").close) {
						closeBtn.addClass("BUBU_CLOSE_BTN");
						confirmBox.append(closeBtn);
						closeBtnTrigg.click(mainEl.data("dgBox").closeConfirm);
						closeBtn.append(closeBtnTrigg);
					}
					
					mainEl.data("dgBox").box.append(confirmBox);
					if(mainEl.data("dgBox").options.allowscroll)
					{
						confirmBox.css({
							left:-(confirmBox.outerWidth()/2),
							top:-(confirmBox.outerHeight()/2)
						});
					} else {
						confirmBox.css({
							left:-(confirmBox.outerWidth()/2)
						});
					}
					var fixer = $("<div>").css("clear","both");
					mainEl.data("dgBox").box.append(fixer);
					if(mainEl.data("dgBox").options.allowscroll)
					{
						mainEl.data("dgBox").reposition();
					} else {
						mainEl.data("dgBox").staticreposition();
					}
				}
			});
			if(mainEl.data("dgBox")!=undefined)
			{
				if(mainEl.data("dgBox").options.allowscroll)
				{
					$(window).scroll(mainEl.data("dgBox").reposition);
					$(window).resize(mainEl.data("dgBox").reposition);
				}
				mainEl.data("dgBox").createOverLayer();
				mainEl.live("click",function(){
					mainEl.data("dgBox").showOverlayer();
					return false;
				});
			}
		},
		dgOpen: function(){
			$(this).data("dgBox").showOverlayer();
       	},
		dgClose: function(){
			$(this).data("dgBox").closeConfirm();
       	}
});
