(function(){
	$.fn.extend({
		mask: function(show){
			var mask = $(this).find('.mask');
			if (!mask.length){
				mask = $('<div class="mask"></div>').appendTo(this);
			}

			mask.css({
				visibility: 'inherit'						
			});
		},
		unmask: function(){
			var mask = $(this).find('.mask');
			mask.remove();
		}
	});

	$.popup = function(config){
		var callback = config.callback;
		if (!config.address && !config.src) return;
		if (!$('#popup').length){
			$('<div id="popup"><div class="popup"></div></div>').appendTo('body');
		}
		var popup = $('#popup').css({
			left: -5000,
			visibility: 'hidden'
		});

		$.mask(function(){
/*
			popup.css({
				visibility: 'inherit'
			});
			popup.find('.popup').mask();
*/
		});

		var close;
		if (config.address){
			popup.find('.popup').load(config.address, function(response){
				$(this).html(response);
				close = $('<div class="popup-close"><a href="#">' + config.close + '</a></div>').appendTo(popup.find('.popup'));
				popup.unmask();
				if (callback){
					callback.apply(this);
				}
			});
		} else if (config.src){
			var src = $(config.src).clone(true).appendTo(popup.find('.popup'));
			close = $('<div class="popup-close"><a href="#">' + config.close + '</a></div>').appendTo(popup.find('.popup'));
			if (callback){
				callback.apply(this);
			}
		}
	}

	$.mask = function(callback, arguments, show){
		function disableScroll(e){
			e.preventDefault();
			e.stopPropagaion();
			return false;
		}

		var _this = this;
		var opacity = 0.5;
		var speed = 100;
		if (!$('#mask').length){
			$('<div id="mask"></div>').css({
				opacity: 0,
				visibility: 'hidden'
			}).appendTo('body');
		}
		var mask = $('#mask');

		if (show !== false){
			$('.wrapper .grid').css('visibility', 'hidden');
			$('.wrapper .grid-scroll').css('overflow-x', 'hidden');
			if ($.ie6){
				$('.wrapper select').css('visibility', 'hidden');
			}
			mask
				.css({
					opacity: 0,
					visibility: 'inherit'
				})
				.stop()
				.animate({
					opacity: opacity
				}, speed || 'fast', function(){
					if (callback){
						callback.apply(_this, arguments);
					}
				});
		} else {
			$('.wrapper .grid').css('visibility', 'inherit');
			$('.wrapper .grid-scroll').css('overflow-x', 'auto');
			if ($.ie6){
				$('.wrapper select').css('visibility', 'inherit');
			}
			mask
				.stop()
				.animate({
					opacity: 0
				}, speed || 'fast', function(){
					$(this).remove();
					if (callback){
						callback.apply(_this, config.arguments);
					}
				});
		}
	}
})(jQuery);
