(function($){  

$.fn.smfbox = function(options) {
	
	var constants = {
		box: '#smfbox',
		close: '#smfclose',
		content: '#smfcontent',
		html: '<div id="smfoverlay" style="display:none"></div><div id="smfwrapper"><div id="smfbox" style="display:none"><a id="smfclose" href="#">Close</a><div id="smfcontent"></div></div></div>',
		trigger: $(this),
		overlay: '#smfoverlay',
		wrapper: '#smfwrapper'

	},
	defaults = {
		afterRender: null,
		beforeLoad: null,
		beforeRender: null,
		boxClass: 'default',
		content: null,
		data: null,
		onClose: null,
		overlayOpacity: 0.75
	},
	defaultcontent = false;
	
	var settings = $.extend({}, defaults, options);

return this.each(function() { 	
						  
	function boxExistsCheck() {
		var overlay = $(constants.overlay, 'body'),
			wrapper = $(constants.wrapper, 'body');

		if (overlay.length > 0) {
			wrapper.remove();
			overlay.remove();
		}
	}
	
	function boxClose(overlay, wrapper) {
		overlay.fadeOut();
		wrapper.fadeOut('fast',boxExistsCheck);

		if (defaultcontent) {
			settings.content = null;
		}

		if(settings.onClose) {
			settings.onClose();
		}
	}
	
	function boxLaunch() {
			
		if (!settings.content) {
			alert('Missing parameter \'content\'');
			return this;
		}
		
		boxExistsCheck();
		$('body').append(constants.html);
		
		
		var smfoverlay = $(constants.overlay, 'body'),
			smfwrapper = $(constants.wrapper),
			smfbox = $(constants.box, smfwrapper),
			smfcontent = $(constants.content, smfbox),
			smfclose = $(constants.close, smfbox);
		
		smfcontent.load(settings.content,settings.data,function(){
		
			if(settings.beforeRender) {
				settings.beforeRender();
			}

			smfbox.addClass(settings.boxClass);	
			smfoverlay.css('opacity',settings.overlayOpacity);
			smfoverlay.fadeIn('fast',function(){
				smfbox.fadeIn('fast');

				if(settings.afterRender) {
					settings.afterRender();
				}
				
			});
		});
		
		smfclose.click(function(){
			boxClose(smfoverlay, smfwrapper);
			return false;
		});
		
		smfoverlay.click(function(){
			boxClose(smfoverlay, smfwrapper);
		});
	}//boxLaunch
	
	constants.trigger.click(function(){
		$this = $(this);
		
		if (!settings.content) {
			settings.content = $this.attr('href');
			defaultcontent = true;
		}
		
		if(settings.beforeLoad) {
			settings.beforeLoad();
		}
		
		boxLaunch();
		return false;
	});
});  
};

})(jQuery);  