diff -r 902822492a68 -r fe660c52c48f includes/clientside/tinymce/utils/mclayer.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/clientside/tinymce/utils/mclayer.js Wed Jun 13 16:07:17 2007 -0400 @@ -0,0 +1,210 @@ +/** + * $Id: mclayer.js 162 2007-01-03 16:16:52Z spocke $ + * + * Moxiecode floating layer script. + * + * @author Moxiecode + * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved. + */ + +function MCLayer(id) { + this.id = id; + this.settings = new Array(); + this.blockerElement = null; + this.isMSIE = navigator.appName == "Microsoft Internet Explorer"; + this.events = false; + this.autoHideCallback = null; +} + +MCLayer.prototype = { + moveRelativeTo : function(re, p, a) { + var rep = this.getAbsPosition(re); + var w = parseInt(re.offsetWidth); + var h = parseInt(re.offsetHeight); + var x, y; + + switch (p) { + case "tl": + break; + + case "tr": + x = rep.absLeft + w; + y = rep.absTop; + break; + + case "bl": + break; + + case "br": + break; + } + + this.moveTo(x, y); + }, + + moveBy : function(dx, dy) { + var e = this.getElement(); + var x = parseInt(e.style.left); + var y = parseInt(e.style.top); + + e.style.left = (x + dx) + "px"; + e.style.top = (y + dy) + "px"; + + this.updateBlocker(); + }, + + moveTo : function(x, y) { + var e = this.getElement(); + + e.style.left = x + "px"; + e.style.top = y + "px"; + + this.updateBlocker(); + }, + + show : function() { + MCLayer.visibleLayer = this; + + this.getElement().style.display = 'block'; + this.updateBlocker(); + }, + + hide : function() { + this.getElement().style.display = 'none'; + this.updateBlocker(); + }, + + setAutoHide : function(s, cb) { + this.autoHideCallback = cb; + this.registerEventHandlers(); + }, + + getElement : function() { + return document.getElementById(this.id); + }, + + updateBlocker : function() { + if (!this.isMSIE) + return; + + var e = this.getElement(); + var b = this.getBlocker(); + var x = this.parseInt(e.style.left); + var y = this.parseInt(e.style.top); + var w = this.parseInt(e.offsetWidth); + var h = this.parseInt(e.offsetHeight); + + b.style.left = x + 'px'; + b.style.top = y + 'px'; + b.style.width = w + 'px'; + b.style.height = h + 'px'; + b.style.display = e.style.display; + }, + + getBlocker : function() { + if (!this.blockerElement) { + var d = document, b = d.createElement("iframe"); + + b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0'; + b.src = 'javascript:false;'; + b.frameBorder = '0'; + b.scrolling = 'no'; + + d.body.appendChild(b); + this.blockerElement = b; + } + + return this.blockerElement; + }, + + getAbsPosition : function(n) { + var p = {absLeft : 0, absTop : 0}; + + while (n) { + p.absLeft += n.offsetLeft; + p.absTop += n.offsetTop; + n = n.offsetParent; + } + + return p; + }, + + registerEventHandlers : function() { + if (!this.events) { + var d = document; + + this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown); + + this.events = true; + } + }, + + addEvent : function(o, n, h) { + if (o.attachEvent) + o.attachEvent("on" + n, h); + else + o.addEventListener(n, h, false); + }, + + onMouseDown : function(e) { + e = typeof(e) == "undefined" ? window.event : e; + var b = document.body; + var l = MCLayer.visibleLayer; + + if (l) { + var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX; + var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY; + var el = l.getElement(); + var x = parseInt(el.style.left); + var y = parseInt(el.style.top); + var w = parseInt(el.offsetWidth); + var h = parseInt(el.offsetHeight); + + if (!(mx > x && mx < x + w && my > y && my < y + h)) { + MCLayer.visibleLayer = null; + + if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my)) + return true; + + l.hide(); + } + } + }, + + addCSSClass : function(e, c) { + this.removeCSSClass(e, c); + var a = this.explode(' ', e.className); + a[a.length] = c; + e.className = a.join(' '); + }, + + removeCSSClass : function(e, c) { + var a = this.explode(' ', e.className), i; + + for (i=0; i