/* 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 $("body").prepend('
'); 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); if (currentPos) reposition(); $("#jDialogProgressBar").fadeOut(900); } }); //only IE6 needs this function if($.browser.msie && parseInt($.browser.version) < 7) { $(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(); }); $(window).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 = $(window).height(); if ($.browser.msie && parseInt($.browser.version) < 7) { //if IE6 $("#jDialogOverlay").css({ top: 0, left: 0, width: overlayWidth, height: overlayHeight, position: "absolute", display: "block", color: opts.bg, zIndex: opts.index }); } else { //other browsers $("#jDialogOverlay").css({ top: 0, left: 0, width: overlayWidth, height: winHeight, position: "fixed", display: "block", background: opts.bg, zIndex: opts.index }).show(); } if (init==1) { $("#jDialogOverlay").css("opacity", 0); $("#jDialogOverlay").fadeTo(200, 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(); 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 //IE 6 fix $("select").hide(); //IE 6 fix $("#jDialogContainer select").show(); //IE6 doesn't support fixed position $("#jDialogContainer").children().css({ top: topOff, left: leftOff, position: "absolute", zIndex: (opts.index+1) }).show(); } else{ // firefox and IE7 $("#jDialogContainer").children().css({ top: topFixed, left: leftFixed, position: "fixed", zIndex: (opts.index+1) }).show(); } } }; $.fn.createDialog.defaults = { progress: true, center: true, method: 'GET', data: '', opacity: 0.85, bg: '#FFFFFF', index: 2000 }; $.closeDialog = function(){ dialogDisplayed=false; if($.browser.msie && parseInt($.browser.version) < 7) //IE6 bug $("select").show(); //fade out and remove DOM nodes $("#jDialogOverlay").fadeTo(200, 0, function(){ $("#jDialogContainer, #jDialogOverlay, #jDialogProgressBar").remove(); }); }; })(jQuery);