(function($) {
	$.dialog = {
			verticalOffset: -75,                // vertical offset of the dialog from center screen, in pixels
			horizontalOffset: 0,                // horizontal offset of the dialog from center screen, in pixels/
			removeBindings: false,
			
			loader: function(status, message) {
					if (status == 'show')
					{
						if (message == null) message = geaLocale.updating; // Default
						$.dialog.__show(message, 'dlg_loader');
						$.dialog.__display();
					}
					else
					{
						$.dialog.__hide();
					}
			},
			alert: function(message, style, callback) {
				if (callback == null) callback = function(){}; // Default
				
				$.dialog.removeBindings = true;
				$.dialog.__show(message, style);
				$('#dlg_container .dlg_content').append('<p class="dlg_action"><button id="dlg_ok" class="btn btn-alert">' + geaLocale.ok_button + '</button></p>');
				$("#dlg_ok").click( function() {
					$.dialog.__hide();
				});
				$(document).bind('keydown', function(event) {
					if (event.keyCode &&
							event.keyCode == 27) {
							callback();
							$.dialog.__hide();
							event.preventDefault();
						}
				});
				$("#dlg_ok").click( function() {
					$.dialog.__hide();
					callback();
				});
				$.dialog.__display();
			},
			confirm: function(message, callback)
			{
				$.dialog.removeBindings = true;
				$.dialog.__show(message, 'dlg_confirm');
				$('#dlg_container .dlg_content').append('<p class="dlg_action"><button id="dlg_ok" class="btn btn-alert">' + geaLocale.ok_button + '</button> <button id="dlg_esc" class="btn btn-alert">' + geaLocale.abort_button + '</button></p>');
				$("#dlg_ok").click( function() {
					$.dialog.__hide();
					callback();
				});
				$("#dlg_esc").click( function() {
					$.dialog.__hide();
				});
				$(document).bind('keydown', function(event) {
					if (event.keyCode &&
							event.keyCode == 27) {
							
							$.dialog.__hide();
							event.preventDefault();
						}
				});
				$.dialog.__display();
			},
			__show: function(message, style)
			{
				$.dialog.__overlay();
				$.dialog.__baseDialog();
				$('#dlg_container').addClass(style)
				$('#dlg_container .dlg_content').html(message);
			},
			__hide: function() {
				$("#dlg_container").remove();
				$('#dlg_overlay').remove();
				if ($.dialog.removeBindings)
				{
					$(document).unbind('keydown');
					$.dialog.removeBindings = false;
				}
			},
			__baseDialog: function()
			{	
				$('#dlg_container').remove();
				$('body').append('<div id="dlg_container" class="dlg_container ui-corner-all"><div class="dlg_content ui-corner-all"><p class="dlg_message"></p></div></div>');
			},
			
			__overlay: function() {
				$('body').append('<div id="dlg_overlay" class="dlg_overlay"></div>');
				$('#dlg_overlay').css({
					position: 	'absolute',
					zIndex: 	99998,
					top: 		'0px',
					left: 		'0px',
					width: 		'100%',
					height: 	$(document).height()
				});
			},
			__display: function() {
				// IE6 Fix
				var pos = ($.browser.msie && parseInt($.browser.version) <= 6 ) ? 'absolute' : 'fixed'; 
				
				$("#dlg_container").css({
					position: pos,
					zIndex: 99999,
					margin: 0
				});
				$("#dlg_container").css({
					minWidth: $("#dlg_container").outerWidth(),
					maxWidth: $("#dlg_container").outerWidth()
				});	
				
				var top = (($(window).height() / 2) - ($("#dlg_container").outerHeight() / 2)) + $.dialog.verticalOffset;
				var left = (($(window).width() / 2) - ($("#dlg_container").outerWidth() / 2)) + $.dialog.horizontalOffset;
				if( top < 0 ) top = 0;
				if( left < 0 ) left = 0;
				
				// IE6 fix
				if( $.browser.msie && parseInt($.browser.version) <= 6 ) top = top + $(window).scrollTop();
				
				$("#dlg_container").css({
					top: top + 'px',
					left: left + 'px'
				});
				
				$("#dlg_overlay").height( $(document).height() );
			}
	};
	
	jLoader = function(status, message) {
		$.dialog.loader(status, message);
	};
	jAlert = function(message, style, callback) {
		$.dialog.alert(message, style, callback);
	};
	jConfirm = function(message, callback) {
		$.dialog.confirm(message, callback);
	};
})(jQuery);
