/* Copyright (c) 2007 Kean Loong Tan http://www.gimiti.com/kltan

 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)

 * Version: 1.0 (March 12, 2008)

 * Requires: jQuery 1.2+

 */

var dialogDisplayed = 0;



jQuery.fn.createDialog = function(addr, progress, method, data) {

	if (method == undefined)

		method = 'GET';

	if (data == undefined)

		data = '';

	if (progress == undefined)

		progress = true;

		

	if($("#jDialogProgressBar").size()==0 &&  !($.browser.msie && parseInt($.browser.version) < 7)) //if ajax loader is not there or not IE6 

		$("body").prepend('<div id="jDialogProgressBar"><img src="images/ajax-loader.gif" /></div>');

		

	

	$(this).click(function(){ 

		if (dialogDisplayed != 1) { //display dialog if none is there

			$("#jDialogProgressBar").show();

			$.blockOverlay(1);

			dialogDisplayed=1;

			$.ajax({

				type: method,

				data: data,

				url: addr,

				success: function(msg){

					$("#jDialogContainer").html(msg);

					$.reposition();

					$("#jDialogProgressBar").fadeOut(1500);

				}

			});

		}

		

		else {

			if (progress)

				$("#jDialogProgressBar").show();

			$.ajax({

				type: "GET",

				url: addr,

				success: function(msg){

					$("#jDialogContainer").html(msg);

					$.reposition();

					$("#jDialogProgressBar").fadeOut(1500);

				}

			});

		}

		

		if($.browser.msie && parseInt($.browser.version) < 7) { //only IE6 needs this function

			$(window).scroll(function(){

				if(dialogDisplayed==1) {

					$.blockOverlay();

					$.reposition();

				}

			});

		}

		

		$(window).resize(function(){

			if (dialogDisplayed==1) {

				$.blockOverlay();

				$.reposition();

			}

		});

		

		$(window).unload( function () {

			if (dialogDisplayed==1)

				$.closeDialog();

		});

		

		$(window).keydown(function(event){

			if (event.keyCode == 27) 

				$.closeDialog();

		});

	});

};



jQuery.closeDialog = function(){

	dialogDisplayed=0;

	$("select").show(); //IE6 bug

	$("#jDialogContainer, #jDialogOverlay").remove();

};



jQuery.blockOverlay = function(init){

	if (init==1) 

		$("body").append('<div id="jDialogOverlay"></div><div id="jDialogContainer"></div>');

	

	var left = 0;

	var top = 0;

	var overlayWidth = $(window).width();

	var overlayHeight = $(document).height();

	var winWidth = $(window).width();

	var winHeight =  $(window).height();



	if ($.browser.msie && parseInt($.browser.version) < 7) { // IE6

		$("#jDialogOverlay").css({

						  top: 0, 

						  left: 0, 

						  width: overlayWidth, 

						  height: overlayHeight, 

						  position: "absolute",

						  display: "block"

						  });

	}

	else {

		$("#jDialogOverlay").css({

						  top: 0, 

						  left: 0, 

						  width: winWidth , 

						  height: winHeight, 

						  position: "fixed",

						  display: "block"

						  }).show();

	}

	

	if (init==1) {

		$("#jDialogOverlay").css("opacity", 0); //IE fix

		$("#jDialogOverlay").show().fadeTo(200, 0.85);

	}

}



jQuery.reposition = function(){ //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();



	if ($.browser.msie) {

		left = document.body.scrollLeft || document.documentElement.scrollLeft;

		top = document.body.scrollTop || document.documentElement.scrollTop;

	}

	else {

		left = window.pageXOffset;

		top = window.pageYOffset;

	}



	var topOff = top + winHeight/2 - dialogHeight/2; //offset for IE6

	var	leftOff = left + winWidth/2 - dialogWidth/2; //offset for IE6

	var topFixed = topOff - top;

	var	leftFixed = leftOff - left;

	

	if ($.browser.msie && parseInt($.browser.version) < 7) { // IE6

		$("select").hide(); //IE 6 fix

		$("#jDialogContainer select").show(); //IE 6 fix

		$("#jDialogContainer").children().css({top: topOff, left: leftOff, position: "absolute"}).show(); //IE6 doesn't support fixed position

	}

	else{	// firefox and IE7

		$("#jDialogContainer").children().css({top: topFixed, left: leftFixed, position: "fixed"}).show();

	}

}




