raw
mp-wp_genesis           1 /**
mp-wp_genesis 2 * $Id: mclayer.js 520 2008-01-07 16:30:32Z spocke $
mp-wp_genesis 3 *
mp-wp_genesis 4 * Moxiecode floating layer script.
mp-wp_genesis 5 *
mp-wp_genesis 6 * @author Moxiecode
mp-wp_genesis 7 */
mp-wp_genesis 8
mp-wp_genesis 9 function MCLayer(id) {
mp-wp_genesis 10 this.id = id;
mp-wp_genesis 11 this.settings = new Array();
mp-wp_genesis 12 this.blockerElement = null;
mp-wp_genesis 13 this.isMSIE = navigator.appName == "Microsoft Internet Explorer";
mp-wp_genesis 14 this.events = false;
mp-wp_genesis 15 this.autoHideCallback = null;
mp-wp_genesis 16 }
mp-wp_genesis 17
mp-wp_genesis 18 MCLayer.prototype = {
mp-wp_genesis 19 moveRelativeTo : function(re, p, a) {
mp-wp_genesis 20 var rep = this.getAbsPosition(re);
mp-wp_genesis 21 var w = parseInt(re.offsetWidth);
mp-wp_genesis 22 var h = parseInt(re.offsetHeight);
mp-wp_genesis 23 var x, y;
mp-wp_genesis 24
mp-wp_genesis 25 switch (p) {
mp-wp_genesis 26 case "tl":
mp-wp_genesis 27 break;
mp-wp_genesis 28
mp-wp_genesis 29 case "tr":
mp-wp_genesis 30 x = rep.absLeft + w;
mp-wp_genesis 31 y = rep.absTop;
mp-wp_genesis 32 break;
mp-wp_genesis 33
mp-wp_genesis 34 case "bl":
mp-wp_genesis 35 break;
mp-wp_genesis 36
mp-wp_genesis 37 case "br":
mp-wp_genesis 38 break;
mp-wp_genesis 39 }
mp-wp_genesis 40
mp-wp_genesis 41 this.moveTo(x, y);
mp-wp_genesis 42 },
mp-wp_genesis 43
mp-wp_genesis 44 moveBy : function(dx, dy) {
mp-wp_genesis 45 var e = this.getElement();
mp-wp_genesis 46 var x = parseInt(e.style.left);
mp-wp_genesis 47 var y = parseInt(e.style.top);
mp-wp_genesis 48
mp-wp_genesis 49 e.style.left = (x + dx) + "px";
mp-wp_genesis 50 e.style.top = (y + dy) + "px";
mp-wp_genesis 51
mp-wp_genesis 52 this.updateBlocker();
mp-wp_genesis 53 },
mp-wp_genesis 54
mp-wp_genesis 55 moveTo : function(x, y) {
mp-wp_genesis 56 var e = this.getElement();
mp-wp_genesis 57
mp-wp_genesis 58 e.style.left = x + "px";
mp-wp_genesis 59 e.style.top = y + "px";
mp-wp_genesis 60
mp-wp_genesis 61 this.updateBlocker();
mp-wp_genesis 62 },
mp-wp_genesis 63
mp-wp_genesis 64 show : function() {
mp-wp_genesis 65 MCLayer.visibleLayer = this;
mp-wp_genesis 66
mp-wp_genesis 67 this.getElement().style.display = 'block';
mp-wp_genesis 68 this.updateBlocker();
mp-wp_genesis 69 },
mp-wp_genesis 70
mp-wp_genesis 71 hide : function() {
mp-wp_genesis 72 this.getElement().style.display = 'none';
mp-wp_genesis 73 this.updateBlocker();
mp-wp_genesis 74 },
mp-wp_genesis 75
mp-wp_genesis 76 setAutoHide : function(s, cb) {
mp-wp_genesis 77 this.autoHideCallback = cb;
mp-wp_genesis 78 this.registerEventHandlers();
mp-wp_genesis 79 },
mp-wp_genesis 80
mp-wp_genesis 81 getElement : function() {
mp-wp_genesis 82 return document.getElementById(this.id);
mp-wp_genesis 83 },
mp-wp_genesis 84
mp-wp_genesis 85 updateBlocker : function() {
mp-wp_genesis 86 if (!this.isMSIE)
mp-wp_genesis 87 return;
mp-wp_genesis 88
mp-wp_genesis 89 var e = this.getElement();
mp-wp_genesis 90 var b = this.getBlocker();
mp-wp_genesis 91 var x = this.parseInt(e.style.left);
mp-wp_genesis 92 var y = this.parseInt(e.style.top);
mp-wp_genesis 93 var w = this.parseInt(e.offsetWidth);
mp-wp_genesis 94 var h = this.parseInt(e.offsetHeight);
mp-wp_genesis 95
mp-wp_genesis 96 b.style.left = x + 'px';
mp-wp_genesis 97 b.style.top = y + 'px';
mp-wp_genesis 98 b.style.width = w + 'px';
mp-wp_genesis 99 b.style.height = h + 'px';
mp-wp_genesis 100 b.style.display = e.style.display;
mp-wp_genesis 101 },
mp-wp_genesis 102
mp-wp_genesis 103 getBlocker : function() {
mp-wp_genesis 104 if (!this.blockerElement) {
mp-wp_genesis 105 var d = document, b = d.createElement("iframe");
mp-wp_genesis 106
mp-wp_genesis 107 b.style.cssText = 'display: none; left: 0px; position: absolute; top: 0';
mp-wp_genesis 108 b.src = 'javascript:false;';
mp-wp_genesis 109 b.frameBorder = '0';
mp-wp_genesis 110 b.scrolling = 'no';
mp-wp_genesis 111
mp-wp_genesis 112 d.body.appendChild(b);
mp-wp_genesis 113 this.blockerElement = b;
mp-wp_genesis 114 }
mp-wp_genesis 115
mp-wp_genesis 116 return this.blockerElement;
mp-wp_genesis 117 },
mp-wp_genesis 118
mp-wp_genesis 119 getAbsPosition : function(n) {
mp-wp_genesis 120 var p = {absLeft : 0, absTop : 0};
mp-wp_genesis 121
mp-wp_genesis 122 while (n) {
mp-wp_genesis 123 p.absLeft += n.offsetLeft;
mp-wp_genesis 124 p.absTop += n.offsetTop;
mp-wp_genesis 125 n = n.offsetParent;
mp-wp_genesis 126 }
mp-wp_genesis 127
mp-wp_genesis 128 return p;
mp-wp_genesis 129 },
mp-wp_genesis 130
mp-wp_genesis 131 registerEventHandlers : function() {
mp-wp_genesis 132 if (!this.events) {
mp-wp_genesis 133 var d = document;
mp-wp_genesis 134
mp-wp_genesis 135 this.addEvent(d, 'mousedown', MCLayer.prototype.onMouseDown);
mp-wp_genesis 136
mp-wp_genesis 137 this.events = true;
mp-wp_genesis 138 }
mp-wp_genesis 139 },
mp-wp_genesis 140
mp-wp_genesis 141 addEvent : function(o, n, h) {
mp-wp_genesis 142 if (o.attachEvent)
mp-wp_genesis 143 o.attachEvent("on" + n, h);
mp-wp_genesis 144 else
mp-wp_genesis 145 o.addEventListener(n, h, false);
mp-wp_genesis 146 },
mp-wp_genesis 147
mp-wp_genesis 148 onMouseDown : function(e) {
mp-wp_genesis 149 e = typeof(e) == "undefined" ? window.event : e;
mp-wp_genesis 150 var b = document.body;
mp-wp_genesis 151 var l = MCLayer.visibleLayer;
mp-wp_genesis 152
mp-wp_genesis 153 if (l) {
mp-wp_genesis 154 var mx = l.isMSIE ? e.clientX + b.scrollLeft : e.pageX;
mp-wp_genesis 155 var my = l.isMSIE ? e.clientY + b.scrollTop : e.pageY;
mp-wp_genesis 156 var el = l.getElement();
mp-wp_genesis 157 var x = parseInt(el.style.left);
mp-wp_genesis 158 var y = parseInt(el.style.top);
mp-wp_genesis 159 var w = parseInt(el.offsetWidth);
mp-wp_genesis 160 var h = parseInt(el.offsetHeight);
mp-wp_genesis 161
mp-wp_genesis 162 if (!(mx > x && mx < x + w && my > y && my < y + h)) {
mp-wp_genesis 163 MCLayer.visibleLayer = null;
mp-wp_genesis 164
mp-wp_genesis 165 if (l.autoHideCallback && l.autoHideCallback(l, e, mx, my))
mp-wp_genesis 166 return true;
mp-wp_genesis 167
mp-wp_genesis 168 l.hide();
mp-wp_genesis 169 }
mp-wp_genesis 170 }
mp-wp_genesis 171 },
mp-wp_genesis 172
mp-wp_genesis 173 addCSSClass : function(e, c) {
mp-wp_genesis 174 this.removeCSSClass(e, c);
mp-wp_genesis 175 var a = this.explode(' ', e.className);
mp-wp_genesis 176 a[a.length] = c;
mp-wp_genesis 177 e.className = a.join(' ');
mp-wp_genesis 178 },
mp-wp_genesis 179
mp-wp_genesis 180 removeCSSClass : function(e, c) {
mp-wp_genesis 181 var a = this.explode(' ', e.className), i;
mp-wp_genesis 182
mp-wp_genesis 183 for (i=0; i<a.length; i++) {
mp-wp_genesis 184 if (a[i] == c)
mp-wp_genesis 185 a[i] = '';
mp-wp_genesis 186 }
mp-wp_genesis 187
mp-wp_genesis 188 e.className = a.join(' ');
mp-wp_genesis 189 },
mp-wp_genesis 190
mp-wp_genesis 191 explode : function(d, s) {
mp-wp_genesis 192 var ar = s.split(d);
mp-wp_genesis 193 var oar = new Array();
mp-wp_genesis 194
mp-wp_genesis 195 for (var i = 0; i<ar.length; i++) {
mp-wp_genesis 196 if (ar[i] != "")
mp-wp_genesis 197 oar[oar.length] = ar[i];
mp-wp_genesis 198 }
mp-wp_genesis 199
mp-wp_genesis 200 return oar;
mp-wp_genesis 201 },
mp-wp_genesis 202
mp-wp_genesis 203 parseInt : function(s) {
mp-wp_genesis 204 if (s == null || s == '')
mp-wp_genesis 205 return 0;
mp-wp_genesis 206
mp-wp_genesis 207 return parseInt(s);
mp-wp_genesis 208 }
mp-wp_genesis 209 }