blob: 0a41dd14c7078466b2d580d5f080cd8d33dcdd17 [file] [log] [blame]
// Dialog v3.0 - Copyright (c) 2003-2004 interactivetools.com, inc.
// This copyright notice MUST stay intact for use (see license.txt).
//
// Portions (c) dynarch.com, 2003-2004
//
// A free WYSIWYG editor replacement for <textarea> fields.
// For full source code and docs, visit http://www.interactivetools.com/
//
// Version 3.0 developed by Mihai Bazon.
// http://dynarch.com/mishoo
//
// $Id:dialog.js 929 2008-01-09 21:10:59Z ray $
// Though "Dialog" looks like an object, it isn't really an object. Instead
// it's just namespace for protecting global symbols.
function Dialog(url, action, init) {
if (typeof init == "undefined") {
init = window; // pass this window object by default
}
if (typeof window.showModalDialog == 'function')
{
Dialog._return = action;
var r = window.showModalDialog(url, init, "dialogheight=10;dialogwidth=10;resizable=yes");
}
else
{
Dialog._geckoOpenModal(url, action, init);
}
}
Dialog._parentEvent = function(ev) {
setTimeout( function() { if (Dialog._modal && !Dialog._modal.closed) { Dialog._modal.focus() } }, 50);
if (Dialog._modal && !Dialog._modal.closed) {
Dialog._stopEvent(ev);
}
};
// should be a function, the return handler of the currently opened dialog.
Dialog._return = null;
// constant, the currently opened dialog
Dialog._modal = null;
// the dialog will read it's args from this variable
Dialog._arguments = null;
Dialog._geckoOpenModal = function(url, action, init) {
//var urlLink = "hadialog"+url.toString();
var myURL = "hadialog"+url;
var regObj = /\W/g;
myURL = myURL.replace(regObj,'_');
var dlg = window.open(url, myURL,
"toolbar=no,menubar=no,personalbar=no,width=10,height=10," +
"scrollbars=no,resizable=yes,modal=yes,dependable=yes");
Dialog._modal = dlg;
Dialog._arguments = init;
// capture some window's events
function capwin(w) {
Dialog._addEvent(w, "click", Dialog._parentEvent);
Dialog._addEvent(w, "mousedown", Dialog._parentEvent);
Dialog._addEvent(w, "focus", Dialog._parentEvent);
}
// release the captured events
function relwin(w) {
Dialog._removeEvent(w, "click", Dialog._parentEvent);
Dialog._removeEvent(w, "mousedown", Dialog._parentEvent);
Dialog._removeEvent(w, "focus", Dialog._parentEvent);
}
capwin(window);
// capture other frames
for (var i = 0; i < window.frames.length; capwin(window.frames[i++]));
// make up a function to be called when the Dialog ends.
Dialog._return = function (val) {
if (val && action) {
action(val);
}
relwin(window);
// capture other frames
for (var i = 0; i < window.frames.length; relwin(window.frames[i++]));
Dialog._modal = null;
};
};
// event handling
Dialog._addEvent = function(el, evname, func) {
if (Dialog.is_ie) {
el.attachEvent("on" + evname, func);
} else {
el.addEventListener(evname, func, true);
}
};
Dialog._removeEvent = function(el, evname, func) {
if (Dialog.is_ie) {
el.detachEvent("on" + evname, func);
} else {
el.removeEventListener(evname, func, true);
}
};
Dialog._stopEvent = function(ev) {
if (Dialog.is_ie) {
ev.cancelBubble = true;
ev.returnValue = false;
} else {
ev.preventDefault();
ev.stopPropagation();
}
};
Dialog.agt = navigator.userAgent.toLowerCase();
Dialog.is_ie = ((Dialog.agt.indexOf("msie") != -1) && (Dialog.agt.indexOf("opera") == -1));