| | |
| | | /**
|
| | | * $RCSfile: mclayer.js,v $
|
| | | * $Revision: 1.2 $
|
| | | * $Date: 2006/02/06 20:11:09 $
|
| | | *
|
| | | * Moxiecode floating layer script.
|
| | | *
|
| | | * @author Moxiecode
|
| | | * @copyright Copyright © 2004-2006, 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<a.length; i++) {
|
| | | if (a[i] == c)
|
| | | a[i] = '';
|
| | | }
|
| | |
|
| | | e.className = a.join(' ');
|
| | | },
|
| | |
|
| | | explode : function(d, s) {
|
| | | var ar = s.split(d);
|
| | | var oar = new Array();
|
| | |
|
| | | for (var i = 0; i<ar.length; i++) {
|
| | | if (ar[i] != "")
|
| | | oar[oar.length] = ar[i];
|
| | | }
|
| | |
|
| | | return oar;
|
| | | },
|
| | |
|
| | | parseInt : function(s) {
|
| | | if (s == null || s == '')
|
| | | return 0;
|
| | |
|
| | | return parseInt(s);
|
| | | }
|
| | | } |
| | | /** |
| | | * $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<a.length; i++) { |
| | | if (a[i] == c) |
| | | a[i] = ''; |
| | | } |
| | | |
| | | e.className = a.join(' '); |
| | | }, |
| | | |
| | | explode : function(d, s) { |
| | | var ar = s.split(d); |
| | | var oar = new Array(); |
| | | |
| | | for (var i = 0; i<ar.length; i++) { |
| | | if (ar[i] != "") |
| | | oar[oar.length] = ar[i]; |
| | | } |
| | | |
| | | return oar; |
| | | }, |
| | | |
| | | parseInt : function(s) { |
| | | if (s == null || s == '') |
| | | return 0; |
| | | |
| | | return parseInt(s); |
| | | } |
| | | } |