/* Copyright (c) 2008 Kean Loong Tan http://www.gimiti.com/kltan
 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * Version: 1.1 (March 26, 2008)
 * Requires: jQuery 1.2+
 */
 
(function($) {

	var dialogDisplayed = false;
	var currentPos = true;

	$.fn.createDialog = function(options) {

		// Extend our default options with those provided.
		var opts = $.extend({}, $.fn.createDialog.defaults, options);
		
		$(this).click(function()
		{
	
			currentPos = opts.center;
			if (!dialogDisplayed) { //display dialog if none is there
				if ($('#jDialogOverlay').length == 0){
					$("body").prepend('<div id="jDialogProgressBar"><img src="img/ajax-loader.gif" /></div><div id="jDialogOverlay"></div><div id="jDialogContainer"></div>');
				}
				overlayPos(1);
				dialogDisplayed=true;
			}
			
			if(opts.progress)
				$("#jDialogProgressBar").show();
				
			$.ajax({
				type: opts.method,
				data: opts.data,
				url: opts.addr,
				success: function(msg){
					$("#jDialogContainer").html(msg).show();
					if (currentPos)
						reposition();
					$("#jDialogProgressBar").fadeOut(900);
				},
				error: function(msg)
				{
					$.closeDialog();
				}
				});
			//only IE6 needs this function
			if($.browser.msie || $.browser.opera) {
				$(window).scroll(function(){
					if(dialogDisplayed==1) {
						overlayPos();
						if (currentPos)
							reposition();
					}
				});
			}
			$(window).resize(function(){
				if (dialogDisplayed==1) {
					overlayPos();
					if (currentPos)
						reposition();
				}
			});
			
			$(window).unload( function () {
				if (dialogDisplayed==1)
					$.closeDialog();
			});
			
			$(document).keydown(function(event){
				if (event.keyCode == 27) 
					$.closeDialog();
			});

		});
		
		//private function
		function overlayPos(init){
			var left = 0;
			var top = 0;
			var overlayWidth = $(window).width();
			var overlayHeight = $(document).height();
			var winHeight =  $(document).height();
		

			var cssProps = {
				top : 0,
				left : 0,
				width : overlayWidth,
				height : winHeight,
				background : opts.bg,
				marginBottom : -winHeight
			};
			
			if (!($.browser.msie && $.browser.version == '7.0')){
				cssProps.zIndex = opts.index;
				cssProps.position = 'fixed';
				cssProps.display = 'block';
			}
			
			$("#jDialogOverlay").css(cssProps).show();
			
			if (init==1) {
				$("#jDialogOverlay").css("opacity", 0);
				$("#jDialogOverlay").fadeTo(200, opts.opacity);
			}
			$("#jDialogOverlay").css("opacity", opts.opacity);
		}
		
		//private function
		function reposition(){ //calculate the position
			var left = 0;
			var top = 0;
			var winWidth = $(window).width();
			var winHeight =  $(window).height();
			var dialogHeight = $("#jDialogContainer").children().height();
			var dialogWidth = $("#jDialogContainer").children().width();
		
			left = $(document).scrollLeft();
			top = $(document).scrollTop();
		
			var topOff = top + winHeight/2 - dialogHeight/2 - 100; //offset for IE6
			if ($.browser.msie && $.browser.version == '7.0'){
				topOff += 100;
			}
			var	leftOff = left + winWidth/2 - dialogWidth/2; //offset for IE6
			
			$("#jDialogContainer").children().css({
				  top: topOff + 'px',
				  left: leftOff + 'px',
				  position: "absolute",
				  zIndex: (opts.index+1)
			  }).show();
		}
	};
	
	$.fn.createDialog.defaults = {
		progress: true,
		center: true,
		method: 'GET',
		data: '',
		opacity: 0.7,
		bg: 'black',
		index: 9000
	};
	
	$.closeDialog = function(){
		dialogDisplayed=false;
		$("#jDialogContainer, #jDialogOverlay, #jDialogProgressBar").hide();
	};

})(jQuery);
