(function($){
	$.fn.aqFloater = function(options) {
		var opts = $.extend({
			offsetX: 0, offsetY: 0, attach: '', duration: 50
		}, options);

		var $obj = this;
		$obj.css({ position: 'absolute' });

		$(window).scroll(function () { 
			var de = document.documentElement;

			var y = (opts.attach.match(/n/) ? 0 
				: (opts.attach.match(/s/) 
					? (de.clientHeight - $obj.height())
					: Math.round((de.clientHeight-$obj.height())/2)));

			var x = (opts.attach.match(/w/) ? 0
				: (opts.attach.match(/e/)
					? (de.clientWidth - $obj.width())
					: Math.round((de.clientWidth-$obj.width())/2)));

			$obj.animate({
				top:  y + $(document).scrollTop() + opts.offsetY + 'px',
				left: x + $(document).scrollLeft() + opts.offsetX + 'px'
			},{queue:false, duration:opts.duration});
		});

		$(window).trigger('scroll');
	};

	$.nvzDialog = function(options) {
		var opts = $.extend({closeBtn: true, noFlash: true}, $.nvzDialog.defaults, options);

		var $obj = init();
		$obj.fadeIn().aqFloater({ offsetY: opts.yOffset });

		$.nvzDialog.close = function() {
			$('#nvzDlgContainer, #nvzDlgBackground')
				.fadeTo(500, 0, function(){
				$('#nvzDlgContainer, #nvzDlgBackground').remove();
				if (opts.noFlash)
					$('object').each(function(){
						$(this)
							.width($(this).data('w'))
							.height($(this).data('h'));
					});
			})
		};
		$.nvzDialog.reposition = function() {
			$(window).trigger('scroll');
		};

		function dress() {
			if (opts.noFlash)
				$('object').each(function(){
					$(this)
						.data('w',$(this).width()).width(0)
						.data('h',$(this).height()).height(0);
				});
			$('#nvzDlgContainer').css({
				zIndex:1001,
				position: 'absolute',
				padding: opts.padding,
				background: opts.background,
				border: opts.border })

			if(typeof jQuery.fn.draggable != 'undefined') {
				$('#nvzDlgContainer').draggable({handle: '#nvzDlgBot'});
				$('#nvzDlgBot').css('cursor','move');
			}

			if (opts.closeBtn)
				$('#nvzDlgTop').html('<img src="/=i_close.gif" title="close">')
					.css({ backgroundColor: opts.bgcolor, position: 'absolute', right: '0px', top: '0px', height: '13px' })
					.click(function(){ $.nvzDialog.close() });

			for (var i=0; i<opts.buttons.length; i++)
				$('#nvzDlgBot').append(
					'&nbsp;<button onclick="'+opts.buttons[i][1]+'">'+opts.buttons[i][0]+'<\/button>'
				);

			$('#nvzDlg').css({
				width: opts.width, 
				height: opts.height,
				color: opts.dlgColor,
				backgroundColor: opts.dlgBgColor, 
				padding: opts.dlgPadding,
				border: opts.dlgBorder,
				margin: opts.dlgMargin,
				font: opts.dlgFont
			});

			$('#nvzDlgBot').css({textAlign: 'right'});
		};

		function init() {
			if ($('#nvzDlgContainer').length)
				$('#nvzDlgContainer, #nvzDlgBackground').remove();

			$('<div id="nvzDlgContainer"><\/div>')
				.appendTo(document.body).hide();

			var $o = $('#nvzDlgContainer');
			$o.append('<div id="nvzDlgTop"><\/div><div id="nvzDlg"><\/div><div id="nvzDlgBot"><\/div>');

			if (opts.fade) {
				var _h = $(document.body).height() < $(window).height() ? $(window).height() : $(document.body).height();
				$o.after('<div id="nvzDlgBackground"><\/div>');
				$('#nvzDlgBackground').css({
					zIndex: 1000,
					position: 'absolute', top: '0px', left: '0px',
					backgroundColor: '#000', opacity: .1,
					width: $(document.body).width(),
					height: _h }).fadeTo(500,.9);
				if (opts.closeBtn)
					$('#nvzDlgBackground').click(function(){ $.nvzDialog.close() });
			}

			if (opts.include)
				$('#nvzDlg').load(opts.include, function() {
					dress();
					$(window).trigger('scroll');
				});
			else if (opts.image) {
				var _im = new Image;
				_im.src = opts.image;
                
				_im.onload = function() {
					$('#nvzDlg').fadeTo(500,1,function(){
						dress();
						$('#nvzDlg').html('<img src="'+_im.src+'">');
						$(window).trigger('scroll');
					});
				}
			} else {
				dress();
				$('#nvzDlg').html(opts.text);
			}

			return $o;
		};
	}

	$.nvzDialog.defaults = {
		fade: true, yOffset: -200,

		dlgColor: '#444',
		dlgPadding: '5px',
		dlgMargin: '5px 0px 2px 0px',
		dlgBorder: '1px solid #999',
		dlgBgColor: '#fff',
		dlgFont: '10pt segoe ui, tahoma, verdana, sans-serif',

		padding: '10px',
		background: '#aaa url(/=bgstriped.gif)',
		bgcolor: '#ddd',
		border: '2px solid #ddd',
		loadingImg: '/gfx/loading_tiny.gif',

		include: '', text: '',
		buttons: [ ['Close',"$.nvzDialog.close()"] ]
	};
})(jQuery);
