/*! * jQuery Lightbox Evolution - for jQuery 1.3+ * http://codecanyon.net/item/jquery-lightbox-evolution/115655?ref=aeroalquimia * * Copyright 2010, Eduardo Daniel Sada * You need to buy a license if you want use this script. * http://codecanyon.net/wiki/buying/howto-buying/licensing/ * * Version: 1.3.6 (Oct 30 2010) * * Includes jQuery Easing v1.1.2 * http://gsgd.co.uk/sandbox/jquery.easIng.php * Copyright (c) 2007 George Smith * Released under the MIT License. */ (function($) { var ie6 = ($.browser.msie && parseInt($.browser.version, 10) < 7 && parseInt($.browser.version, 10) > 4); if ($.proxy === undefined) { $.extend({ proxy: function( fn, thisObject ) { if ( fn ) { proxy = function() { return fn.apply( thisObject || this, arguments ); }; }; return proxy; } }); }; if ($.isEmptyObject === undefined) { $.extend({ isEmptyObject: function( obj ) { for ( var name in obj ) { return false; } return true; } }); }; $.extend( $.easing, { easeOutBack: function (x, t, b, c, d, s) { if (s == undefined) s = 1.70158; return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; } }); $.extend({ LightBoxObject: { defaults : { name : 'jquery-lightbox', zIndex : 7000, width : 470, height : 280, background : '#FFFFFF', modal : false, overlay : { 'opacity' : 0.6 }, showDuration : 400, closeDuration : 200, moveDuration : 1000, resizeDuration : 1000, shake : { 'distance' : 10, 'duration' : 100, 'transition' : 'easeOutBack', 'loops' : 2 }, flash : { 'width' : 640, 'height' : 360 }, emergefrom : 'top' }, options : {}, animations : {}, gallery : {}, image : {}, esqueleto : { lightbox : [], buttons : { close : [], prev : [], max : [], next : [] }, background : [], html : [] }, visible : false, maximized : false, mode : 'image', videoregs : { swf: { reg: /[^\.]\.(swf)\s*$/i }, youtube: { reg: /youtube\.com\/watch/i, split: '=', index: 1, url: "http://www.youtube.com/v/%id%&autoplay=1&fs=1" }, metacafe: { reg: /metacafe\.com\/watch/i, split: '/', index: 4, url: "http://www.metacafe.com/fplayer/%id%/.swf?playerVars=autoPlay=yes" }, dailymotion: { reg: /dailymotion\.com\/video/i, split: '/', index: 4, url: "http://www.dailymotion.com/swf/video/%id%?additionalInfos=0&autoStart=1" }, google: { reg: /google\.com\/videoplay/i, split: '=', index: 1, url: "http://video.google.com/googleplayer.swf?autoplay=1&hl=en&docId=%id%" }, vimeo: { reg: /vimeo\.com/i, split: '/', index: 3, url: "http://vimeo.com/moogaloop.swf?clip_id=%id%&server=vimeo.com&autoplay=1&show_title=1&show_byline=1&show_portrait=0&color=&fullscreen=1" }, megavideo: { reg: /megavideo.com/i, split: '=', index: 1, url: "http://www.megavideo.com/v/%id%" }, gametrailers: { reg: /gametrailers.com/i, split: '/', index: 5, url: "http://www.gametrailers.com/remote_wrap.php?mid=%id%" }, collegehumor: { reg: /collegehumor.com/i, split: 'video:', index: 1, url: "http://www.collegehumor.com/moogaloop/moogaloop.swf?autoplay=true&fullscreen=1&clip_id=%id%" }, ustream: { reg: /ustream.tv/i, split: '/', index: 4, url: "http://www.ustream.tv/flash/video/%id%?loc=%2F&autoplay=true&vid=%id%&disabledComment=true&beginPercent=0.5331&endPercent=0.6292&locale=en_US" }, twitvid: { reg: /twitvid.com/i, split: '/', index: 3, url: "http://www.twitvid.com/player/%id%" }, wordpress: { reg: /v.wordpress.com/i, split: '/', index: 3, url: "http://s0.videopress.com/player.swf?guid=%id%&v=1.01" } }, mapsreg: { bing: { reg: /bing.com\/maps/i, split: '?', index: 1, url: "http://www.bing.com/maps/embed/?emid=3ede2bc8-227d-8fec-d84a-00b6ff19b1cb&w=%width%&h=%height%&%id%" }, streetview: { reg: /maps.google.com(.*)layer=c/i, split: '?', index: 1, url: "http://maps.google.com/?output=svembed&%id%" }, google: { reg: /maps.google.com/i, split: '?', index: 1, url: "http://maps.google.com/?output=embed&%id%" } }, overlay : { create: function(options) { this.options = options; this.element = $('
'); this.element.css($.extend({}, { 'position' : 'fixed', 'top' : 0, 'left' : 0, 'opacity' : 0, 'display' : 'none', 'z-index' : this.options.zIndex }, this.options.style)); this.element.click( $.proxy(function(event) { if (this.options.hideOnClick) { if ($.isFunction(this.options.callback)) { this.options.callback(); } else { this.hide(); } } event.preventDefault(); }, this)); this.hidden = true; this.inject(); return this; }, inject: function() { this.target = $(document.body); this.target.append(this.element); if(ie6) { this.element.css({'position': 'absolute'}); var zIndex = parseInt(this.element.css('zIndex')); if (!zIndex) { zIndex = 1; var pos = this.element.css('position'); if (pos == 'static' || !pos) { this.element.css({'position': 'relative'}); } this.element.css({'zIndex': zIndex}); } zIndex = (!!(this.options.zIndex || this.options.zIndex === 0) && zIndex > this.options.zIndex) ? this.options.zIndex : zIndex - 1; if (zIndex < 0) { zIndex = 1; } this.shim = $(''); this.shim.css({ zIndex : zIndex, position : 'absolute', top : 0, left : 0, border : 'none', width : 0, height : 0, opacity : 0 }); this.shim.insertAfter(this.element); $('html, body').css({ 'height' : '100%', 'width' : '100%', 'margin-left' : 0, 'margin-right': 0 }); } }, resize: function(x, y) { this.element.css({ 'height': 0, 'width': 0 }); if (this.shim) { this.shim.css({ 'height': 0, 'width': 0 }); }; var win = { x: $(document).width(), y: $(document).height() }; this.element.css({ 'width' : '100%', 'height' : y ? y : win.y }); if (this.shim) { this.shim.css({ 'height': 0, 'width': 0 }); this.shim.css({ 'position': 'absolute', 'left' : 0, 'top' : 0, 'width' : this.element.width(), 'height' : y ? y : win.y }); } return this; }, show: function(callback) { if (!this.hidden) { return this; }; if (this.transition) { this.transition.stop(); }; if (this.shim) { this.shim.css({'display': 'block'}); }; this.element.css({'display':'block', 'opacity':0}); this.target.bind('resize', $.proxy(this.resize, this)); this.resize(); this.hidden = false; this.transition = this.element.fadeTo(this.options.showDuration, this.options.style.opacity, $.proxy(function(){ if (this.options.style.opacity) { this.element.css(this.options.style) }; this.element.trigger('show'); if ($.isFunction(callback)) { callback(); }; }, this)); return this; }, hide: function(callback) { if (this.hidden) { return this; }; if (this.transition) { this.transition.stop(); }; if (this.shim) { this.shim.css({'display': 'none'}); }; this.target.unbind('resize'); this.hidden = true; this.transition = this.element.fadeTo(this.options.closeDuration, 0, $.proxy(function(){ this.element.trigger('hide'); if ($.isFunction(callback)) { callback(); }; this.element.css({ 'height': 0, 'width': 0, 'display': 'none' }); }, this)); return this; } }, create: function(options) { this.options = $.extend(true, this.defaults, options); this.overlay.create({ name : this.options.name, style : this.options.overlay, hideOnClick : !this.options.modal, zIndex : this.options.zIndex-1, callback : $.proxy(this.close, this), showDuration : this.options.showDuration, closeDuration : this.options.closeDuration }); this.esqueleto.lightbox = $('
Close
PreviousMaximize
Next
'); this.esqueleto.buttons.div = $('.'+this.options.name+'-buttons', this.esqueleto.lightbox); this.esqueleto.buttons.close = $('.'+this.options.name+'-button-close', this.esqueleto.lightbox); this.esqueleto.buttons.prev = $('.'+this.options.name+'-button-left', this.esqueleto.lightbox); this.esqueleto.buttons.max = $('.'+this.options.name+'-button-max', this.esqueleto.lightbox); this.esqueleto.buttons.next = $('.'+this.options.name+'-button-right', this.esqueleto.lightbox); this.esqueleto.buttons.custom = $('.'+this.options.name+'-buttons-custom', this.esqueleto.lightbox); this.esqueleto.background = $('.'+this.options.name+'-background', this.esqueleto.lightbox); this.esqueleto.html = $('.'+this.options.name+'-html', this.esqueleto.lightbox); this.esqueleto.move = $('
').append(this.esqueleto.lightbox); this.esqueleto.move.css({ 'position' : 'absolute', 'z-index' : this.options.zIndex, 'top' : -999, 'left' : -999 }); $('body').append(this.esqueleto.move); this.addevents(); return this.esqueleto.lightbox; }, addevents: function() { this.esqueleto.buttons.close.bind('click', $.proxy(function(ev) { this.close(); ev.preventDefault(); }, this)); $(window).bind('resize', $.proxy(function() { if (this.visible) { this.overlay.resize(); if (!this.maximized) { this.movebox(); } } }, this)); $(window).bind('scroll', $.proxy(function() { if (this.visible && !this.maximized) { this.movebox(); } }, this)); $(document).bind('keydown', $.proxy(function(event) { if (this.visible) { if (event.keyCode == 27 && this.overlay.options.hideOnClick) { // esc this.close(); } } }, this)); this.esqueleto.buttons.max.bind('click', $.proxy(function(event) { this.maximinimize(); event.preventDefault(); }, this)); // heredamos los eventos, desde el overlay: this.overlay.element.bind('show', $.proxy(function() { $(this).triggerHandler('show'); }, this)); this.overlay.element.bind('hide', $.proxy(function() { $(this).triggerHandler('close'); }, this)); }, create_gallery: function(href) { if ($.isArray(href) && href.length > 1) { this.gallery.images = href; this.gallery.current = 0; this.gallery.total = href.length; href = href[0]; this.esqueleto.buttons.prev.unbind('click'); this.esqueleto.buttons.next.unbind('click'); this.esqueleto.buttons.prev.bind('click', $.proxy(function(event){ if (this.gallery.current - 1 < 0) { this.gallery.current = this.gallery.total - 1; } else { this.gallery.current = this.gallery.current - 1; } this.show(this.gallery.images[this.gallery.current]); event.preventDefault(); }, this)); this.esqueleto.buttons.next.bind('click', $.proxy(function(event){ if (this.gallery.current + 1 >= this.gallery.total) { this.gallery.current = 0; } else { this.gallery.current = this.gallery.current + 1; } this.show(this.gallery.images[this.gallery.current]); event.preventDefault(); }, this)); } if (this.gallery.total > 1) { this.esqueleto.buttons.div.show(); this.esqueleto.buttons.prev.show(); this.esqueleto.buttons.next.show(); } else { this.esqueleto.buttons.prev.hide(); this.esqueleto.buttons.next.hide(); } }, custombuttons: function(buttons, anchor) { $.each(buttons, $.proxy(function(i, button) { this.esqueleto.buttons.custom.append($(''+button.html+'').bind('click', $.proxy(function(e) { if ($.isFunction(button.callback)) { button.callback(this.image.src, this, anchor); } e.preventDefault(); }, this))); }, this)); this.esqueleto.buttons.div.show(); }, show: function(href, options, callback, anchor) { var imgRegExp = /\.(jpg|jpeg|gif|png|bmp|tiff)(.*)?$/i; var type = ''; var beforeopen = false; if (($.isArray(href) && href.length <= 1) || href=='') { return false; }; this.loading(); beforeopen = this.visible; this.open(); if (!beforeopen) { this.movebox(); }; this.create_gallery(href, options); if ($.isArray(href) && href.length > 1) { href = href[0]; } var temp = href.split("%LIGHTBOX%"); var href = temp[0]; var title = temp[1] || ''; options = $.extend(true, { 'width' : 0, 'height' : 0, 'modal' : 0, 'force' : '', 'title' : title, 'autoresize' : true, 'iframe' : false }, options || {}); urloptions = this.unserialize(href); if (!$.isEmptyObject(urloptions)) { options = $.extend({}, options, urloptions); } this.esqueleto.background.unbind('complete'); this.overlay.options.hideOnClick = !options.modal; this.esqueleto.buttons.max.removeClass(this.options.name+'-button-min'); this.esqueleto.buttons.max.addClass(this.options.name+'-button-max'); this.maximized = false; if ($.isArray(options.buttons)){ this.custombuttons(options.buttons, anchor); } if (options.force != '') { type = options.force; } else if (options.iframe) { type = 'iframe'; } else if (href.match(imgRegExp)) { type = 'image'; } else { $.each(this.videoregs, function(i, e) { if (href.split('?')[0].match(e.reg)) { type = 'flash'; if (e.split) { videoid = href.split(e.split)[e.index]; href = e.url.replace("%id%", videoid); } } }); $.each(this.mapsreg, function(i, e) { if (href.match(e.reg)) { type = 'iframe'; if (e.split) { id = href.split(e.split)[e.index]; href = e.url.replace("%id%", id).replace("%width%", options.width).replace("%height%", options.height); } } }); if (type=='') { if (href.match(/#/)) { obj = href.substr(href.indexOf("#")); if ($(obj).length > 0) { type = 'inline'; href = obj; } else { type = 'ajax'; } } else { type = 'ajax'; } } } if (type=='image') { this.esqueleto.buttons.max.hide(); var image = new Image(); image.onload = $.proxy(function() { image.onload = function() {}; if (!this.visible) { return false }; this.image = { width : image.width, height : image.height, src : image.src }; this.maximized = !options.autoresize; if (options.width) { width = parseInt(options.width); height = parseInt(options.height); } else { if (options.autoresize) { var objsize = this.calculate(image.width, image.height); width = objsize.width; height = objsize.height; if (image.width != width || image.height != height) { this.esqueleto.buttons.div.show(); this.esqueleto.buttons.max.show(); } } else { width = image.width; height = image.height; } } this.resize(width, height); this.esqueleto.background.bind('complete', $.proxy(function() { if (!this.visible) { return false }; this.changemode('image'); this.esqueleto.background.empty(); this.esqueleto.html.empty(); $(image).hide(); if (options.title != '') { this.esqueleto.background.append($('
').html(options.title)); } this.esqueleto.background.append(image); $(image).fadeIn(400, $.proxy(function() { this.esqueleto.background.removeClass(this.options.name+'-loading'); }, this)); }, this)); }, this); image.onerror = $.proxy(function() { this.error("The requested image cannot be loaded. Please try again later."); }, this); image.src = href; } else if (type=='flash' || type=='inline' || type=='ajax') { if (type == 'inline') { this.appendhtml($(href).clone(true).show(), options.width > 0 ? options.width : $(href).outerWidth(true), options.height > 0 ? options.height : $(href).outerHeight(true), 'html'); } else if (type == 'ajax') { if (options.width) { width = options.width; height = options.height; } else { this.error("You need to specific the size of the lightbox."); return false; } if (this.animations.ajax) { this.animations.ajax.abort(); }; this.animations.ajax = $.ajax({ url : href, type : "GET", cache : false, error : $.proxy(function() { this.error("The requested content cannot be loaded. Please try again later.") }, this), success : $.proxy(function(html) { this.appendhtml(html, width, height, 'html'); }, this) }); } else if (type == 'flash') { if (options.width) { width = options.width; height = options.height; } else { width = this.options.flash.width; height = this.options.flash.height; } var flash = this.swf2html(href, width, height); this.appendhtml($(flash), width, height, 'html'); } } else if (type=='iframe') { if (options.width) { width = options.width; height = options.height; } else { this.error("You need to specific the size of the lightbox."); return false; } this.appendhtml($('').css(options), options.width, options.height, 'html'); } this.callback = $.isFunction(callback) ? callback : function(e) {}; }, swf2html: function(href, width, height) { var str = ''; str += ''; str += ''; str += ''; str += ''; return str; }, appendhtml: function(obj, width, height, mode) { if (typeof mode !== 'undefined') { this.changemode(mode); } this.resize(width + 30, height + 20); this.esqueleto.background.bind('complete', $.proxy(function() { this.esqueleto.background.removeClass(this.options.name+'-loading'); this.esqueleto.html.append(obj); this.esqueleto.background.unbind('complete'); }, this)); }, movebox: function(w, h) { var size = { x: $(window).width(), y: $(window).height() }; var scroll = { x: $(window).scrollLeft(), y: $(window).scrollTop() }; var height = h!=null ? h : this.esqueleto.lightbox.outerHeight(); var width = w!=null ? w : this.esqueleto.lightbox.outerWidth(); var y = 0; var x = 0; //vertically center x = scroll.x + ((size.x - width) / 2); if (this.visible) { y = scroll.y + (size.y - height) / 2; } else if (this.options.emergefrom == "bottom") { y = (scroll.y + size.y + 14); } else {// top y = (scroll.y - height) - 14; } if (this.visible) { if (!this.animations.move) { this.morph(this.esqueleto.move, { 'left' : x }, 'move'); } this.morph(this.esqueleto.move, { 'top' : y }, 'move'); } else { this.esqueleto.move.css({ 'left' : x, 'top' : y }); } }, morph: function(el, prop, mode, callback, queue) { var optall = $.speed({ queue : queue || false, duration : this.options[mode+'Duration'], easing : 'easeOutBack', complete : ($.isFunction(callback) ? $.proxy(callback, this) : null) }); return el[ optall.queue === false ? "each" : "queue" ](function() { var opt = $.extend({}, optall), self = this; opt.curAnim = $.extend({}, prop); $.each( prop, function( name, val ) { var e = new $.fx( self, opt, name ); e.custom( e.cur(true) || 0, val, "px" ); }); return true; }); }, resize: function(x, y) { if (this.visible) { var size = { x: $(window).width(), y: $(window).height() }; var scroll = { x: $(window).scrollLeft(), y: $(window).scrollTop() }; var left = (scroll.x + (size.x - (x + 14)) / 2); var top = (scroll.y + (size.y - (y + 14)) / 2); if ($.browser.msie || ($.browser.mozilla && (parseFloat($.browser.version) < 1.9))) { y += 4; } this.animations.move = true; this.morph(this.esqueleto.move.stop(), { 'left': (this.maximized && left < 0) ? 0 : left, 'top' : (this.maximized && (y + 14) > size.y) ? scroll.y : top }, 'move', $.proxy(function() { this.move = false; }, this.animations)); this.morph(this.esqueleto.html, { 'height': y - 20 }, 'resize'); this.morph(this.esqueleto.lightbox.stop(), { 'width': (x + 14), 'height': y - 20 }, 'resize', {}, true); this.morph(this.esqueleto.background.stop(), { 'width': x, 'height': y }, 'resize', function() { $(this.esqueleto.background).trigger('complete'); }); } else { this.esqueleto.html.css({ 'height': y - 20 }); this.esqueleto.lightbox.css({ 'width': x + 14, 'height': y - 20 }); this.esqueleto.background.css({ 'width': x, 'height': y }); } }, close: function(param) { this.visible = false; this.gallery = {}; if ($.browser.msie) { this.esqueleto.background.empty(); this.esqueleto.html.empty(); this.esqueleto.buttons.custom.empty(); this.esqueleto.move.css({'display': 'none'}); this.movebox(); } else { this.esqueleto.move.animate({'opacity': 0, 'top': '-=40'}, { queue : false, complete : ($.proxy(function() { this.esqueleto.background.empty(); this.esqueleto.html.empty(); this.esqueleto.buttons.custom.empty(); this.movebox(); this.esqueleto.move.css({'display': 'none', 'opacity': 1, 'overflow': 'visible'}); }, this)) }); } this.overlay.hide($.proxy(function() { if ($.isFunction(this.callback)) { this.callback.apply(this, $.makeArray(param)); } }, this)); this.esqueleto.background.stop(true, false); this.esqueleto.background.unbind('complete'); }, open: function() { this.visible = true; if ($.browser.msie) { this.esqueleto.move.get(0).style.removeAttribute('filter'); this.esqueleto.buttons.div.css({'position': 'static'}).css({'position': 'absolute'}); } this.esqueleto.move.css({ 'display' : 'block', 'overflow':'visible' }).show(); this.overlay.show(); }, shake: function() { var x = this.options.shake.distance; var d = this.options.shake.duration; var t = this.options.shake.transition; var o = this.options.shake.loops; var l = this.esqueleto.move.position().left; var e = this.esqueleto.move; for (i=0; i maxx) { y = y * (maxx / x); x = maxx; if (y > maxy) { x = x * (maxy / y); y = maxy; } } else if (y > maxy) { x = x * (maxy / y); y = maxy; if (x > maxx) { y = y * (maxx / x); x = maxx; } } // End Resizing return {width: parseInt(x), height: parseInt(y)}; }, loading: function() { this.changemode('image'); this.esqueleto.background.empty(); this.esqueleto.html.empty(); this.esqueleto.background.addClass(this.options.name+'-loading'); this.esqueleto.buttons.div.hide(); this.movebox(this.options.width, this.options.height); this.resize(this.options.width, this.options.height); }, maximinimize: function() { if (this.maximized) { this.maximized = false; this.esqueleto.buttons.max.removeClass(this.options.name+'-button-min'); this.esqueleto.buttons.max.addClass(this.options.name+'-button-max'); var objsize = this.calculate(this.image.width, this.image.height); this.loading(); this.esqueleto.buttons.div.show(); this.resize(objsize.width, objsize.height); } else { this.maximized = true; this.esqueleto.buttons.max.removeClass(this.options.name+'-button-max'); this.esqueleto.buttons.max.addClass(this.options.name+'-button-min'); this.loading(); this.esqueleto.buttons.div.show(); this.resize(this.image.width, this.image.height); } } }, //end object lightbox: function(url, options, callback) { if (typeof url !== 'undefined') { return $.LightBoxObject.show(url, options, callback); } else { return $.LightBoxObject; } } }); $.fn.lightbox = function(options, callback) { return $(this).live('click', function(e) { e.preventDefault(); $(this).blur(); var sel = []; var rel = $.trim($(this).attr('rel')) || ''; var til = $.trim($(this).attr('title')) || ''; if (!rel || rel == '' || rel === 'nofollow') { sel = $(this).attr('href'); copy_options = (til || til != '') ? $.extend({}, options, {'title': til}) : options; } else { var rels = []; var antes = []; var desps = []; var encon = false; $("a[rel=" + rel + "], area[rel=" + rel + "]").each($.proxy(function(i, el) { if (this == el) { antes.unshift(el); encon = true; } else if (encon == false) { desps.push(el); } else { antes.push(el); } }, this)); rels = antes.concat(desps); $.each(rels, function() { var title = $.trim($(this).attr('title')) || ''; title = title ? "%LIGHTBOX%" + title : ''; sel.push($(this).attr('href') + title); }); if (sel.length == 1) { sel = sel[0]; } copy_options = options; } $.LightBoxObject.show(sel, copy_options, callback, this); }); }; $(function() { if (parseFloat($.fn.jquery) > 1.2) { $.LightBoxObject.create(); } else { throw "The jQuery version that was loaded is too old. Lightbox Evolution requires jQuery 1.3+"; } }); })(jQuery);