/* * Facebox (for jQuery) * version: 1.1 (01/20/2007) * @requires jQuery v1.2 or later * * Examples at http://famspam.com/facebox/ * * Licensed under the MIT: * http://www.opensource.org/licenses/mit-license.php * * Copyright 2007 Chris Wanstrath { chris@ozmm.org } * * Usage: * * $j(document).ready(function(){ * $j('a[rel*=facebox]').facebox() * }) * * Terms * Loads the #terms div in the box * * Terms * Loads the terms.html page in the box * * Terms * Loads the terms.png image in the box * * * You can also use it programmatically: * * jQuery.facebox('some html') * * This will open a facebox with "some html" as the content. * * jQuery.facebox(function($) { $j.ajaxes() }) * * This will show a loading screen before the passed function is called, * allowing for a better ajax experience. * */ (function($j) { /** * The static facebox() function, can be passed a string or * function. * * You can also use it programmatically: * * jQuery.facebox('some html') * * This will open a facebox with "some html" as the content. * * jQuery.facebox(function($) { $j.ajaxes() }) * * This will show a loading screen before the passed function is called, * allowing for a better ajax experience. */ $j.facebox = function(data) { facebox_init() facebox_loading() $j.isFunction(data) ? data.call(this, $j) : facebox_reveal(data) return $j; } /** * Facebox settings, which can be modified through the facebox() method * or directly. * * jQuery('a[rel*=facebox]').facebox({ loading_image: '//cscommerce/images/spinner.gif' }) * * jQuery.facebox.settings.loading_image = '//cscommerce/images/spinner.gif' */ $j.facebox.settings = { title: null, // where to look for the gallery title, ie: jQuery('a[rel*=facebox]').facebox({ title:'div.pictures ul' }) loading_image : 'images/decorations/facebox_loading.gif', close_image : 'images/decorations/facebox_close.png', image_types : [ 'png', 'jpg', 'jpeg', 'gif' ], play_image : '/facebox/play.gif', pause_image : '/facebox/pause.gif', slide_duration: 6, facebox_html : '\
' } var $s = $j.facebox.settings $j.fn.facebox = function(settings) { facebox_init(settings) // save the gallery title var list_title = null; // if there is a title to look for, save it if(settings) if(settings.title != null) list_title = $j(settings.title).attr('title'); var image_types = $s.image_types.join('|') image_types = new RegExp('\.' + image_types + '$', 'i') // suck out the images and titles of them var images = [] var titles = [] $j(this).each(function() { if (this.href.match(image_types) && $j.inArray(this.href, images) == -1) images.push(this.href) titles.push(this.title) }) if (images.length == 1) { images = null titles = null } function click_handler() { if ($j('#facebox .loading').length == 1) return false facebox_loading() // support for rel="facebox[.inline_popup]" syntax, to add a class var klass = this.rel.match(/facebox\[\.(\w+)\]/) if (klass) klass = klass[1] // remove all facebox classes from the body $j('body').removeClass('facebox_noinfo').removeClass('facebox_image').removeClass('facebox_network'); // div if (this.href.match(/#/)) { var url = window.location.href.split('#')[0]; var target = this.href.replace(url,''); // add facebox_noinfo class to the body, this class removes the caption div from facebox $j('body').addClass('facebox_noinfo'); facebox_reveal($j(target).clone(true).show(), klass); // image } else if (this.href.match(image_types)) { // add facebox_image class to the body, this class sets a gray background to the facebox $j('body').addClass('facebox_image'); if(!images) { // if it is not a gallery, removes the caption div from the facebox, and add a title to show above the image $j('body').addClass('facebox_noinfo'); list_title = this.title; } facebox_reveal_image(this.href, images, klass, list_title, titles, this.title) // ajax } else { // if it is the calling area facebox, add class facebox_network to the body if($j(this).hasClass("network_area")){ $j('body').addClass('facebox_network'); } //$j.get(this.href + "?random=" + (new Date().getTime()), function(data) { $j('body').addClass('facebox_noinfo'); facebox_reveal(data, klass); } ) $j.get(this.href, function(data) { $j('body').addClass('facebox_noinfo'); facebox_reveal(data, klass); } ) } // if it is genie facebox if($j(this).hasClass("genie")){ // removes previous facebox overlay $j('#facebox_overlay').remove(); // add facebox overlay $j('#wrapper').after(''); $j('body').addClass('genie'); var pageSize = getPageSize(); $j('#facebox_overlay').width(pageSize[0]).height(pageSize[1]).css("opacity",0.6); } // if outsideClickClose, close facebox if user clicks outside of the facebox if ($j(this).hasClass('outsideClickClose')) { $j('#facebox_overlay, .popup').click(facebox_close); $j('.popup table').bind("click", function(event){ event.stopPropagation(); }); } // if hideCloseButton, hide the default close if ($j(this).hasClass('hideCloseButton')) { $j('div.popup div.top a.close').hide(); // if any elements in the popup have the close class, make it work like the default close $j('#facebox .close').click(facebox_close); } return false; } return this.click(click_handler); } /** * The init function is a one-time setup which preloads vital images * and other niceities. */ function facebox_init(settings) { if ($s.inited && typeof settings == 'undefined') return true else $s.inited = true if (settings) $j.extend($s, settings) $j('body').append($s.facebox_html) var preload = [ new Image(), new Image() ] preload[0].src = $s.close_image preload[1].src = $s.loading_image $j('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() { preload.push(new Image()) preload.slice(-1).src = $j(this).css('background-image').replace(/url\((.+)\)/, '$1') }) $j('#facebox .close').click(facebox_close) $j('#facebox .close_image').attr('src', $s.close_image) } /** * The loading function prepares the facebox by displaying it * in the proper spot, cleaning its contents, attaching keybindings * and showing the loading image. */ function facebox_loading() { if ($j('#facebox .loading').length == 1) return true $j(document).unbind('.facebox') $j('#facebox .content, #facebox .info, #facebox .navigation').empty() $j('#facebox .body').children().hide().end(). append('' + list_title.split(' / ')[0] + ' ' + list_title.split(' / ')[1] + '
'; } else { t = '' + list_title + ' '; } } facebox_reveal(t+'