/* * jQuery Litebox - jQuery plug-in * Beta 2r2, Released 2007.03.14 * * Copyright (c) 2007 Daniel MacDonald (www.projectatomic.com) * Dual licensed GPL http://www.gnu.org/licenses/gpl.html * and MIT http://www.opensource.org/licenses/mit-license.php */ (function($){ $.fn.litebox = function(o){ if (window.XMLHttpRequest && typeof document.doctype =='object'&& !window.opera){ //ie6+, mozilla1.0+, safari1.2+, konquerer, icab3.0+ var s = {oc:'white',oy:0.7,oz:1000,sc:'black',sw:0.8,sh:0.9,ns:2,nc:'white',nz:'0.6em',nf:'sans-serif',lu:'loading.gif',lh:128,lw:128,ld:2000,a:false,loop:false,count:true,ad:5000,auto:'AUTO',stop:'STOP',restart:'RESTART',image:'IMAGE',of:'OF',close:'CLOSE',prev:'PREV',next:'NEXT',aa:'SPACEBAR',ac:'ESC',ap:'LEFT ARROW',an:'RIGHT ARROW', click:'CLICK TO SEE FULL IMAGE IN NEW WINDOW'}; if(o){ $.extend(s, o); } return this.each(function(){ var g = $(this).find('a').click(function(){ var i = $(g).index($(this)[0]); $.litebox.init(i, g, s); return false; }); }); } }; $.litebox = { i: 0, g: [], s: {}, lt: 0, at: 0, init: function(i, g, s){ this.i = i; this.g = g; this.s = s; $('body').append('
'); $('#ss_o').css({position: 'fixed', zIndex: s.oz, opacity: 0, background: s.oc}); $('#ss_s').css({position: 'fixed', zIndex: s.oz+1, opacity: 0, background: s.sc}); $('#ss_l').attr('src', s.lu).css({position: 'absolute', zIndex: s.oz+2, height: s.lh, width: s.lw, display: 'none'}); $('#ss_i').attr('alt', s.click).css({position: 'absolute', zIndex: s.oz+3, opacity: 0, border: 'none'}).bind('click', function(){ var w = window.open($($.litebox.g[$.litebox.i]).attr('href'),'liteboxwin'); return false; }); $('#ss_c, #ss_s/a').css({position: 'absolute', display: 'block', color: s.nc, font: s.nz+'/1 '+s.nf, textDecoration: 'none', outline: 'none !impotant'}); $('#ss_c').css({width: '50%', bottom: s.ns, left: '25%', textAlign: 'center'}); if(s.count){ $('#ss_c/span:eq(0)').html(s.image+' '); $('#ss_c/span:eq(2)').html(' '+s.of+' '); } $('#ss_a').attr('title', s.aa).css({top: s.ns, left: s.ns*2}).bind('click', function(){ $.litebox.toggle(); return false; }); if(s.a){ $('#ss_a').html(s.stop); }else{ $('#ss_a').html(s.auto); } $('#ss_x').attr('title', s.ac).html(s.close).css({top: s.ns, right: s.ns*2}).bind('click', function(){ $.litebox.remove(); return false; }); $('#ss_p').attr('title', s.ap).html(s.prev).css({bottom: s.ns, left: s.ns*2}).bind('click', function(){ $.litebox.moveprev(); return false; }); $('#ss_n').attr('title', s.an).html(s.next).css({bottom: s.ns, right: s.ns*2}).bind('click', function(){ $.litebox.movenext(); return false; }); $(document).bind('keydown', function(e){ var key = e.which || e.keyCode || e.charCode; switch (key){ case 27: // [esc] $.litebox.remove(); break; case 37: // [left arrow] $.litebox.moveprev(); break; case 39: // [right arrow] $.litebox.movenext(); break; case 32: // [spacebar] $.litebox.auto(); break; } return false; }); $.litebox.position(); $('#ss_o').fadeTo('normal', s.oy, function(){ $('#ss_s').fadeTo('normal', 1); $.litebox.load(i, g); }); }, load: function(i, g){ var s = this.s; $('#ss_i').fadeTo('normal', 0, function(){ $.litebox.lt = setTimeout($.litebox.loading, s.ld); $('#ss_i').bind('load', function(){ clearTimeout($.litebox.lt); $('#ss_l').css('display', 'none'); $.litebox.resize($(g[i]).attr('href')); if(s.count){ $('#ss_c/span:eq(1)').html(i+1); $('#ss_c/span:eq(3)').html(g.length); } if (i > 0){ $('#ss_p').css('display', 'block'); $.litebox.preload($(g[i-1]).attr('href')); }else{ $('#ss_p').css('display', 'none'); } if (i+1 < g.length){ $('#ss_n').css('display', 'block'); $.litebox.preload($(g[i+1]).attr('href')); }else{ $('#ss_n').css('display', 'none'); } if (s.a == true){ $.litebox.auto(); } }); $('#ss_i').attr('src', $(g[i]).attr('href')) }); }, loading: function(){ $('#ss_l').css('display', 'block'); }, position: function(e){ var s = (e) ? e.data.s : this.s; var xh = parseInt($('#ss_x').height(), 10), ww = self.innerWidth || document.documentElement.clientWidth, wh = self.innerHeight || document.documentElement.clientHeight; $('#ss_o').css({height: wh, width: ww, top: 0, left: 0}); $('#ss_s').css({height: wh*s.sh, width: ww*s.sw, top: wh/2-wh*s.sh/2, left: ww/2-ww*s.sw/2}); $('#ss_l').css({top: wh*s.sh/2-s.lh/2, left: ww*s.sw/2-s.lw/2}); if (typeof document.body.style.maxHeight == 'undefined'){ //ie6 only var sx = document.documentElement.scrollLeft, sy = document.documentElement.scrollTop; $('#ss_o').css({position: 'absolute', top: sy, left: sx}); $('#ss_s').css({position: 'absolute', top: wh/2-wh*s.sh/2+sy, left: ww/2-ww*s.sw/2+sx}); $(window).bind('scroll', {s: s}, $.litebox.position); } $.litebox.resize($('#ss_i').attr('src')); $(window).bind('resize', {s: s}, $.litebox.position); }, preload: function(src){ var img = document.createElement('img'); img.src = src; }, resize: function(src){ if (typeof src != 'undefined'){ var s = this.s; var img = new Image(); img.src = src; var xh = parseInt($('#ss_x').height(), 10); var sw = parseInt($('#ss_s').width(), 10)-2*(xh+3*s.ns); var sh = parseInt($('#ss_s').height(), 10)-2*(xh+3*s.ns); var iw = img.width; var ih = img.height; if (iw > sw) { ih = ih * (sw / iw); iw = sw; if (ih > sh) { iw = iw * (sh / ih); ih = sh; } } else if (ih > sh) { iw = iw * (sh / ih); ih = sh; if (iw > sw) { ih = ih * (sw / iw); iw = sw; } } $('#ss_i').css({height: ih, width: iw, top: sh/2-ih/2+xh+2*s.ns, left: sw/2-iw/2+xh+3*s.ns}).fadeTo('normal', 1); } }, toggle: function(){ var s = $.litebox.s; if (s.a){ clearTimeout($.litebox.at); $.litebox.s.a = false; $('#ss_a').html(s.auto); } else { $.litebox.s.a = true; $('#ss_a').html(s.stop); $.litebox.auto(); } }, auto: function(){ var s = $.litebox.s; clearTimeout($.litebox.at); if (this.i+1 < this.g.length){ $.litebox.at = setTimeout($.litebox.movenext, s.ad); }else if (s.loop){ $.litebox.i = -1; $.litebox.at = setTimeout($.litebox.autoload, s.ad); }else{ $('#ss_a').html(s.restart).one('click', function(){ $('#ss_a').html(s.stop); $.litebox.s.a = true; $.litebox.i = 0; $.litebox.at = setTimeout($.litebox.autoload, s.ad); }); } }, autoload: function(){ $.litebox.load($.litebox.i, $.litebox.g); }, moveprev: function(){ clearTimeout($.litebox.at); $.litebox.s.a = false; $('#ss_a').html($.litebox.s.auto); if ($.litebox.i > 0){ $.litebox.i -= 1; $.litebox.load($.litebox.i, $.litebox.g); } }, movenext: function(){ if ($.litebox.i+1 < $.litebox.g.length){ $.litebox.i += 1; $.litebox.load($.litebox.i, $.litebox.g); } }, remove: function(){ $(window).unbind('resize').unbind('scroll'); $(document).unbind('keypress'); $('#ss_l').remove(); $('#ss_s').fadeTo('normal', 0, function(){ $('#ss_s').remove(); $('#ss_o').fadeTo('normal', 0, function(){ $('#ss_o').remove(); }); }); } }; })(jQuery);