(function($){

	$.fn.modalWindow = function(settings){
		
		var element = $(this);
		
		var defaultSettings = {
			
			position	:	"fixed",
			width		:	500,
			height		:	300,
			opacity		:	0.5

		};
		
		var settings = $.extend(defaultSettings, settings);
		
		var overlay = $('<div>', {
				className: 'modalWindow-overlay'					
		});
		
		var box = $('<div>', {
				className: 'modalWindow-box'					
		});
		
		var loader = $('<div>', {
				className: 'modalWindow-loader',
				html: 'Loading, please wait...'
		});
		
		$("body").append(overlay).append(box);
		
		$(element).click(function(e){
			e.preventDefault();
			
			var href = $(this).attr("href");
			
			$(box).css({width: settings.width+"px", height: settings.height+"px"});
			
			$(box).css({
				position: settings.position,
				left: ($(window).width() - box.outerWidth())/2,
			});
			
			if (href.indexOf("#") != -1)
			{
				if($(href).length == 0)
				{
					box.html('<div class="modalWindow-error">Information is not found!</div>');
				}
				else
				{
					var data = $(href).html();
					box.html(data);
				}
			}
			else
			{
				box.prepend(loader);

				$.ajax({
    				url: href,
    				type: "HEAD",
					error: function()
					{
						loader.remove();
						box.html('<div class="modalWindow-error">File is not found!</div>');
			        },
					success: function()
					{
						loader.remove();
						box.load(href);
					}
				});
			}

			overlay.fadeTo("normal", settings.opacity).fadeIn(600);
			
			setTimeout(function(){
				box.fadeIn(600);
			}, 500);
		
			box.find("#modalWindow-close").click(function(e){
				e.preventDefault();
				closeWindow();
			});
		
		});

		overlay.click(function(){
			closeWindow();
		});
		
		$(document).keypress(function(e){
			if(e.keyCode == 27){
				closeWindow();
			}
		});
		
		function closeWindow(){
			if(overlay.is(":animated") || box.is(":animated")){return false;}
			box.hide().html("");
			overlay.fadeOut(600);
		}

	}
	
})(jQuery);
