var Popup = new Class( { Implements: [Options, Events], options: { bgcolor: '#000000', opacity: 0.5, windowId: false, backWindowId: 'backWindowId', backWindowIdRandom: true, fadeTime: 500, closeBut: false, contentId: false, closeTime: 500, backTime: 500, isCentre: false }, initialize: function(element, options) { this.setOptions(options); this.fade = null; this.open(); $$(this.options.closeBut).addEvent('click', function(){this.close();}.bind(this)); if (this.options.isCentre) window.addEvent('scroll', function(){if ($(this.options.windowId).getCoordinates().top >= 0) $(this.options.windowId).centre();}.bind(this)); }, open: function() { $(this.options.windowId).setOpacity(0); $(this.options.windowId).centre(); new Fx.Morph(this.options.windowId, {duration: this.options.fadeTime}).start({'opacity': [0, 1]}); this.fadeOn(); }, close: function() { if ($(this.options.windowId).style.top == '-1000000px') return; new Fx.Morph(this.options.windowId, {duration: this.options.closeTime}).start({'opacity': [1, 0]}, function(){$(this.options.windowId).style.top = '-1000000px';}); $(this.options.windowId).style.top = '-1000000px'; this.fadeOff(); }, fadeOn: function() { this.setupFadeElement(); this.fade.style.position = 'absolute'; this.fade.style.backgroundColor = this.options.bgcolor; this.fade.style.top = 0; this.fade.style.left = 0; this.fade.style.width = window.getScrollSize()['x'] + 'px'; this.fade.style.height = window.getScrollSize()['y'] + 'px'; this.fade.style.zIndex = $(this.options.windowId).getStyle('z-index').toInt() - 1; new Fx.Morph(this.fade.id, {duration: this.options.backTime}).start({'opacity': [0, this.options.opacity]}); }, fadeOff: function() { this.setupFadeElement(); new Fx.Morph(this.fade.id, {duration: this.options.backTime}).start({'opacity': [this.options.opacity, 0]}).addEvent('complete', function(){this.fade.dispose();}.bind(this)); }, setupFadeElement: function() { if (this.fade) return; if (!$(this.options.backWindowId)) { if (this.options.backWindowIdRandom) this.fade = new Element('div', {id: this.options.backWindowId + parseInt(Math.random() * 1000000)}); else this.fade = new Element('div', {id: this.options.backWindowId}); this.fade.setOpacity(0); this.fade.inject(document.body, 'top'); } else this.fade = $(this.options.backWindowId); } }); Element.implement({makePopup: function(options){return new Popup(this, options);}});