(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="javascript:void(0)">CLOSE</a><div id="smfcontent"></div></div></div>',
		trigger: $(this),
		overlay: '#smfoverlay',
		wrapper: '#smfwrapper'

	},
	
	defaults = {
		afterRender: null,
		beforeLoad: null,
		beforeRender: null,
		boxClass: 'default',
		content: $(this).attr('href'),
		data: null,
		overlayOpacity: 0.5
	},
	
	settings = $.extend({}, defaults, options);
	
	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);
		
		$("select").show();
	
	}
	
	function boxLaunch() {
		
		$("select").hide();

		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(){
		if(settings.beforeLoad) {
			settings.beforeLoad();
		}
		
		boxLaunch();
		return false;
	});

}

})(jQuery);  
