/* $Id: smoothbox.js 62 2009-02-18 02:59:27Z nico-izo $ */ // This file will no longer be included by default. A minified version is included as part of core-min.js /* * Smoothbox v20080623 by Boris Popoff (http://gueschla.com) * To be used with mootools 1.2 * * Based on Cody Lindley's Thickbox, MIT License * * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php */ TB_WIDTH = 0; TB_HEIGHT = 0; var TB_doneOnce = 0; var TB_ready = false; var TB_useReady = true; // add smoothbox to href elements that have a class of .smoothbox function TB_init() { TB_ready = true; $$("a.smoothbox").each(function(el){el.onclick=TB_bind}); } window.addEvent('domready', TB_init); //window.addEvent('load', TB_init); function TB_bind(event) { if( TB_useReady && !TB_ready ) return; var event = new Event(event); // stop default behaviour event.preventDefault(); // remove click border this.blur(); // get caption: either title or name attribute var caption = this.title || this.name || ""; // get rel attribute for image groups var group = this.rel || false; // display the box for the elements href TB_show(caption, this.href, group); this.onclick = TB_bind; return false; } // called when the user clicks on a smoothbox link function TB_show(caption, url, rel, loading, disable_close) { if( TB_useReady && !TB_ready ) return; // set default closing mechanism if(!disable_close) { disable_close = 0; } // create iframe, overlay and box if non-existent if (!$("TB_overlay")) { (new Element('div').setProperty('id', 'TB_overlay')).inject($('smoothbox_container') || document.body); $('TB_overlay').setOpacity(0.6); TB_overlaySize(); } if (!$("TB_window")) { (new Element('div').setProperty('id', 'TB_window')).inject($('smoothbox_container') || document.body); $('TB_window').setOpacity(0); } else { $('TB_window').destroy(); //$('TB_window').dispose(); (new Element('div').setProperty('id', 'TB_window')).inject($('smoothbox_container') || document.body); $('TB_window').setOpacity(0); } if(disable_close == 0) { $("TB_overlay").onclick=TB_remove; } else { $("TB_overlay").onclick = ''; } window.onscroll = TB_position; // check if a query string is involved var baseURL = url.match(/(.+)?/)[1] || url; // CODE TO SHOW IFRAME var queryString = url.match(/\?(.+)/)[1]; var params = TB_parseQuery(queryString); TB_WIDTH = (params['width'] * 1) + 30; TB_HEIGHT = (params['height'] * 1) + 40; var ajaxContentW = TB_WIDTH - 30, ajaxContentH = TB_HEIGHT - 45; if (url.indexOf('TB_iframe') != -1) { urlNoQuery = url.split('TB_'); $("TB_window").innerHTML += "
" + caption + "
X
"; } else { $("TB_window").innerHTML += "
" + caption + "
X
"; } $("TB_closeWindowButton").onclick = TB_remove; if (url.indexOf('TB_inline') != -1) { $("TB_ajaxContent").innerHTML = ($(params['inlineId']).innerHTML); TB_position(); TB_showWindow(); } else if (url.indexOf('TB_iframe') != -1) { //alert("UHOH1"); TB_position(); if (frames['TB_iframeContent'] == undefined) {//be nice to safari $(document).keyup(function(e){ var key = e.keyCode; if (key == 27) { TB_remove() } }); TB_showWindow(); } } else { //alert("UHOH2"); var handlerFunc = function(){ TB_position(); TB_showWindow(); }; new Request.HTML({ method: 'get', update: $("TB_ajaxContent"), onComplete: handlerFunc }).get(url); } window.onresize = function() { TB_position(); TB_overlaySize(); } document.onkeyup = function(event) { var event = new Event(event); if (event.code == 27) { // close TB_remove(); } } } //helper functions below function TB_showWindow() { if( TB_useReady && !TB_ready ) return; if (TB_doneOnce == 0) { TB_doneOnce = 1; $('TB_window').set('tween', { duration: 250 }); $('TB_window').tween('opacity', 0, 1); } else { $('TB_window').setStyle('opacity', 1); } // $('TB_window').setStyle('opacity', 1); } function TB_remove() { if( TB_useReady && !TB_ready ) return; $("TB_overlay").onclick = null; document.onkeyup = null; document.onkeydown = null; if ($('TB_closeWindowButton')) $("TB_closeWindowButton").onclick = null; $('TB_window').set('tween', { duration: 250, onComplete: function(){ $('TB_window').destroy(); //$('TB_window').dispose(); } }); $('TB_window').tween('opacity', 1, 0); $('TB_overlay').set('tween', { duration: 400, onComplete: function(){ $('TB_overlay').destroy(); //$('TB_overlay').dispose(); } }); $('TB_overlay').tween('opacity', 0.6, 0); window.onscroll = null; window.onresize = null; TB_init(); TB_doneOnce = 0; return false; } function TB_position() { if( TB_useReady && !TB_ready ) return; $('TB_window').set('morph', { duration: 75 }); $('TB_window').morph({ width: TB_WIDTH + 'px', left: (window.getScrollLeft() + (window.getWidth() - TB_WIDTH) / 2) + 'px', top: (window.getScrollTop() + (window.getHeight() - TB_HEIGHT) / 2) + 'px' }); } function TB_overlaySize() { if( TB_useReady && !TB_ready ) return; // we have to set this to 0px before so we can reduce the size / width of the overflow onresize $("TB_overlay").setStyles({ "height": '0px', "width": '0px' }); $("TB_overlay").setStyles({ "height": window.getScrollHeight() + 'px', "width": window.getScrollWidth() + 'px' }); } function TB_parseQuery(query) { if( TB_useReady && !TB_ready ) return; // return empty object if (!query) return {}; var params = {}; // parse query var pairs = query.split(/[;&]/); for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split('='); if (!pair || pair.length != 2) continue; // unescape both key and value, replace "+" with spaces in value params[unescape(pair[0])] = unescape(pair[1]).replace(/\+/g, ' '); } return params; }