var Dialog = {
	_done			: false,
	animation		: true,
	// current params (from info, url or confirm)
	params			: {},
	paramsDefault	: {
		// close dialog by clicking on background
		closeOnBg		: true,
		// close button in right-top corner
		showCloseBtn	: true,
		// other dialog can overwire one which is currently opened
		overwrite		: true
	},
	visible			: false,
	
	confirm: function (msg, req, ajax) {
		var content = msg+'<div id="dialog_confirm_btns"><input type="button" value="No" onclick="Dialog.hide()"/> <input type="button" value="Yes" onclick="this.disabled=true; '+(ajax ? 'Dialog.confirm_request(\''+req.url+'\', '+req.cb+')' : 'location.href=\''+req+'\'')+'"/></div>';
		this.info ('Confirm', content);
	},
	
	error: function (msg) {
		var content = msg+'<div id="dialog_confirm_btns"><input type="button" value="Close" onclick="Dialog.hide()"/></div>';
		this.info ('Error', content, {showCloseBtn:false});
	},

	confirm_request: function (url, cb) {
		$.get (url, cb);
	},
	
	url: function (caption, url, params) {
		this._init (caption, params);
		var t = this;
		var p = this.params;
		$('#dialog_content').load (url, function () {
			t.resize (p.width, p.height);
			t._display ();
			if (p.cb && typeof p.cb == 'function') p.cb();
		});
	},
	
	info: function (caption, content, params) {
		this._init (caption, params);
		$('#dialog_content').html (content);
		this.resize (this.params.width, this.params.height);
		this._display ();
	},
	
	hide: function () {
		$('#dialog_window').stop (true, true);
		$('#dialog_window,#dialog_overlay').hide ();
		Dialog.visible = false;
	},
	
	resize: function (width, height) {
		$('#dialog_content').width ((width ? width : 'auto'));
		$('#dialog_content').height ((height ? height : 'auto'));
		this._position ();
	},
	
	_init: function (caption, params) {
		params = params || {};
		// clone object this.paramsDefault
		this.params = $.extend ({}, this.paramsDefault);
		// ...and overwite with new vals
		for (var key in params) {
			this.params[key] = params[key];
		}
		// build
		if (!this._done) {
			$(document.body).append ('<div id="dialog_overlay"></div><div id="dialog_window">'
					+'<div id="dialog_caption"></div><img src="images/dialog_close.gif" id="dialog_close" alt="Close window"/><div id="dialog_content"></div></div>');
			$('#dialog_close').click (this.hide);
			$('#dialog_overlay').click (this._closeOnBg);
			$(window).resize (this._position);
			this._done = true;
		}
		// caption
		$('#dialog_caption').html (caption);
		// close btn
		if (this.params.showCloseBtn) {
			$('#dialog_close').show ();
		} else {
			$('#dialog_close').hide ();
		}
	},
	
	_closeOnBg: function () {
		if (!Dialog.params.closeOnBg) return;
		Dialog.hide();
	},
	
	_display: function () {
		$('#dialog_overlay').show ();
		if (this.animation) {
			$('#dialog_window').slideDown ('normal');
		} else {
			$('#dialog_window').show ();
		}
		this.visible = true;
	},
	
	_position: function () {
		$('#dialog_overlay').css ({
			width:	$(document).width()+'px', 
			height:	$(document).height()+'px'
		});
		Dialog.position (false);
	},
	
	position: function (animate) {
		if (typeof(animate) == 'undefined') animate = true;
		var pos = {
			left	: (typeof Dialog.params.left != 'undefined' ? Dialog.params.left : ($(window).width()/2 - $('#dialog_window').width()/2))+'px',
			top		: (typeof Dialog.params.top != 'undefined' ? Dialog.params.top : ($(window).height()/2 + $(document).scrollTop() - $('#dialog_window').height()/2))
						+(Dialog.params.shiftBottom ? Dialog.params.shiftBottom*-1 : 0)
						+(Dialog.params.shiftTop ? Dialog.params.shiftBottom : 0)
						+'px'
		};
		
		if (animate) {
			$('#dialog_window').animate (pos);
		} else {
			$('#dialog_window').css (pos);
		}
	}
};