--- /dev/null
+\r
+var Popup = function() {\r
+\r
+ var $id = Number.random(100, 1000);\r
+ \r
+ var overlay = new Element('div', {\r
+ 'id': 'popup_overlay_' + $id,\r
+ 'class': 'popup_overlay'\r
+ });\r
+ \r
+ var box = new Element('div', {\r
+ 'id': 'popup_box_' + $id,\r
+ 'class': 'popup_box',\r
+ 'styles': {\r
+ 'opacity': 0\r
+ }\r
+ });\r
+ \r
+ var position = function() {\r
+ var body = $$('body').pop(), \r
+ offset = body.getScroll(), \r
+ screen = body.getScrollSize(), \r
+ size = box.getSize();\r
+ \r
+ return {\r
+ 'left': (screen.x / 2) - (size.x / 2),\r
+ 'top': offset.y + 50\r
+ };\r
+ };\r
+ \r
+ var open = function() {\r
+ var body = $$('body'), options = arguments[0] || {};\r
+ \r
+ // default options\r
+ var defaults = {\r
+ 'content': new Element('p'),\r
+ 'handle': false,\r
+ 'width': 600\r
+ }\r
+ \r
+ for(var key in defaults) {\r
+ options[key] = (options[key] === undefined) ? defaults[key] : options[key];\r
+ }\r
+ \r
+ // append overlay\r
+ body.grab(overlay);\r
+ \r
+ // apply box styles\r
+ box.setStyles({\r
+ 'width': options.width\r
+ });\r
+ \r
+ // append box\r
+ body.grab(box);\r
+ \r
+ // add content\r
+ box.empty();\r
+ box.grab(options.content);\r
+\r
+ // position box and show\r
+ var pos = position();\r
+\r
+ box.setStyles({\r
+ 'top': pos.top,\r
+ 'left': pos.left\r
+ });\r
+ \r
+ box.fade('in');\r
+ \r
+ // bind events\r
+ overlay.addEvent('click', close);\r
+ \r
+ if(options.handle.addEvent) {\r
+ options.handle.addEvent('click', close);\r
+ }\r
+ };\r
+ \r
+ var close = function() {\r
+ overlay.dispose();\r
+ box.dispose();\r
+ return false;\r
+ };\r
+ \r
+ return {\r
+ 'open': open,\r
+ 'close': close\r
+ };\r
+ \r
+};\r
+\r