(function ($) { $.fn.lightBox = function (k) { k = jQuery.extend({ overlayBgColor: '#000', overlayOpacity: 0.8, fixedNavigation: false, imageLoading: 'images/lightbox-ico-loading.gif', imageBtnPrev: 'images/lightbox-btn-prev.gif', imageBtnNext: 'images/lightbox-btn-next.gif', imageBtnClose: 'images/lightbox-btn-close.gif', imageBlank: 'images/lightbox-blank.gif', containerBorderSize: 10, containerResizeSpeed: 400, txtImage: 'Image', txtOf: 'of', keyToClose: 'c', keyToPrev: 'p', keyToNext: 'n', imageArray: [], activeImage: 0 }, k); var l = this; function _initialize() { _start(this, l); return false } function _start(a, b) { $('embed, object, select').css({ 'visibility': 'hidden' }); _set_interface(); k.imageArray.length = 0; k.activeImage = 0; if (b.length == 1) { k.imageArray.push(new Array(a.getAttribute('href'), a.getAttribute('title'))) } else { for (var i = 0; i < b.length; i++) { k.imageArray.push(new Array(b[i].getAttribute('href'), b[i].getAttribute('title'))) } } while (k.imageArray[k.activeImage][0] != a.getAttribute('href')) { k.activeImage++ } _set_image_to_view() } function _set_interface() { $('body').append('<div id="jquery-overlay"></div><div id="jquery-lightbox"><div id="lightbox-container-image-box"><div id="lightbox-container-image"><img id="lightbox-image"><div style="" id="lightbox-nav"><a href="#" id="lightbox-nav-btnPrev"></a><a href="#" id="lightbox-nav-btnNext"></a></div><div id="lightbox-loading"><a href="#" id="lightbox-loading-link"><img src="' + k.imageLoading + '"></a></div></div></div><div id="lightbox-container-image-data-box"><div id="lightbox-container-image-data"><div id="lightbox-image-details"><span id="lightbox-image-details-caption"></span><span id="lightbox-image-details-currentNumber"></span></div><div id="lightbox-secNav"><a href="#" id="lightbox-secNav-btnClose"><img src="' + k.imageBtnClose + '"></a></div></div></div></div>'); var c = ___getPageSize(); $('#jquery-overlay').css({ backgroundColor: k.overlayBgColor, opacity: k.overlayOpacity, width: c[0], height: c[1] }).fadeIn(); var d = ___getPageScroll(); $('#jquery-lightbox').css({ top: d[1] + (c[3] / 10), left: d[0] }).show(); $('#jquery-overlay,#jquery-lightbox').click(function () { _finish() }); $('#lightbox-loading-link,#lightbox-secNav-btnClose').click(function () { _finish(); return false }); $(window).resize(function () { var a = ___getPageSize(); $('#jquery-overlay').css({ width: a[0], height: a[1] }); var b = ___getPageScroll(); $('#jquery-lightbox').css({ top: b[1] + (a[3] / 10), left: b[0] }) }) } function _set_image_to_view() { $('#lightbox-loading').show(); if (k.fixedNavigation) { $('#lightbox-image,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide() } else { $('#lightbox-image,#lightbox-nav,#lightbox-nav-btnPrev,#lightbox-nav-btnNext,#lightbox-container-image-data-box,#lightbox-image-details-currentNumber').hide() } var a = new Image(); a.onload = function () { $('#lightbox-image').attr('src', k.imageArray[k.activeImage][0]); _resize_container_image_box(a.width, a.height); a.onload = function () { } }; a.src = k.imageArray[k.activeImage][0] }; function _resize_container_image_box(c, d) { var e = $('#lightbox-container-image-box').width(); var f = $('#lightbox-container-image-box').height(); var g = (c + (k.containerBorderSize * 2)); var h = (d + (k.containerBorderSize * 2)); var i = e - g; var j = f - h; $('#lightbox-container-image-box').animate({ width: g, height: h }, k.containerResizeSpeed, function () { _show_image(); var a = $('#jquery-overlay').height(); var b = __getPageHeight(); if (a < b) { $('#jquery-overlay').css({ height: b + 30 }) } }); if ((i == 0) && (j == 0)) { if ($.browser.msie) { ___pause(250) } else { ___pause(100) } } $('#lightbox-container-image-data-box').css({ width: c }); $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ height: d + (k.containerBorderSize * 2) }) }; function _show_image() { $('#lightbox-loading').hide(); $('#lightbox-image').fadeIn(function () { _show_image_data(); _set_navigation() }); _preload_neighbor_images() }; function _show_image_data() { $('#lightbox-container-image-data-box').slideDown('fast'); $('#lightbox-image-details-caption').hide(); if (k.imageArray[k.activeImage][1]) { $('#lightbox-image-details-caption').html(k.imageArray[k.activeImage][1]).show() } if (k.imageArray.length > 1) { $('#lightbox-image-details-currentNumber').html(k.txtImage + ' ' + (k.activeImage + 1) + ' ' + k.txtOf + ' ' + k.imageArray.length).show() } } function _set_navigation() { $('#lightbox-nav').show(); $('#lightbox-nav-btnPrev,#lightbox-nav-btnNext').css({ 'background': 'transparent url(' + k.imageBlank + ') no-repeat' }); if (k.activeImage != 0) { if (k.fixedNavigation) { $('#lightbox-nav-btnPrev').css({ 'background': 'url(' + k.imageBtnPrev + ') left 15% no-repeat' }).unbind().bind('click', function () { k.activeImage = k.activeImage - 1; _set_image_to_view(); return false }) } else { $('#lightbox-nav-btnPrev').unbind().hover(function () { $(this).css({ 'background': 'url(' + k.imageBtnPrev + ') left 15% no-repeat' }) }, function () { $(this).css({ 'background': 'transparent url(' + k.imageBlank + ') no-repeat' }) }).show().bind('click', function () { k.activeImage = k.activeImage - 1; _set_image_to_view(); return false }) } } if (k.activeImage != (k.imageArray.length - 1)) { if (k.fixedNavigation) { $('#lightbox-nav-btnNext').css({ 'background': 'url(' + k.imageBtnNext + ') right 15% no-repeat' }).unbind().bind('click', function () { k.activeImage = k.activeImage + 1; _set_image_to_view(); return false }) } else { $('#lightbox-nav-btnNext').unbind().hover(function () { $(this).css({ 'background': 'url(' + k.imageBtnNext + ') right 15% no-repeat' }) }, function () { $(this).css({ 'background': 'transparent url(' + k.imageBlank + ') no-repeat' }) }).show().bind('click', function () { k.activeImage = k.activeImage + 1; _set_image_to_view(); return false }) } } _enable_keyboard_navigation() } function _enable_keyboard_navigation() { $(document).keydown(function (a) { _keyboard_action(a) }) } function _disable_keyboard_navigation() { $(document).unbind() } function _keyboard_action(a) { if (a == null) { keycode = event.keyCode; escapeKey = 27 } else { keycode = a.keyCode; escapeKey = a.DOM_VK_ESCAPE } key = String.fromCharCode(keycode).toLowerCase(); if ((key == k.keyToClose) || (key == 'x') || (keycode == escapeKey)) { _finish() } if ((key == k.keyToPrev) || (keycode == 37)) { if (k.activeImage != 0) { k.activeImage = k.activeImage - 1; _set_image_to_view(); _disable_keyboard_navigation() } } if ((key == k.keyToNext) || (keycode == 39)) { if (k.activeImage != (k.imageArray.length - 1)) { k.activeImage = k.activeImage + 1; _set_image_to_view(); _disable_keyboard_navigation() } } } function _preload_neighbor_images() { if ((k.imageArray.length - 1) > k.activeImage) { objNext = new Image(); objNext.src = k.imageArray[k.activeImage + 1][0] } if (k.activeImage > 0) { objPrev = new Image(); objPrev.src = k.imageArray[k.activeImage - 1][0] } } function _finish() { $('#jquery-lightbox').remove(); $('#jquery-overlay').fadeOut(function () { $('#jquery-overlay').remove() }); $('embed, object, select').css({ 'visibility': 'visible' }) } function __getPageHeight() { var a = document.body; var b = document.documentElement; return Math.max(a.scrollHeight, a.offsetHeight, b.clientHeight, b.scrollHeight, b.offsetHeight) } function ___getPageSize() { var a, yScroll; if (document.body.scrollHeight > document.body.offsetHeight) { a = document.body.scrollWidth; yScroll = document.body.scrollHeight } else { a = document.body.offsetWidth; yScroll = document.body.offsetHeight } var b, windowHeight; if (self.innerHeight) { if (document.documentElement.clientWidth) { b = document.documentElement.clientWidth } else { b = self.innerWidth } windowHeight = self.innerHeight } else if (document.documentElement && document.documentElement.clientHeight) { b = document.documentElement.clientWidth; windowHeight = document.documentElement.clientHeight } else if (document.body) { b = document.body.clientWidth; windowHeight = document.body.clientHeight } if (yScroll < windowHeight) { pageHeight = windowHeight } else { pageHeight = yScroll } if (a < b) { pageWidth = a } else { pageWidth = b } arrayPageSize = new Array(pageWidth, pageHeight, b, windowHeight); return arrayPageSize }; function ___getPageScroll() { var a, yScroll; if (self.pageYOffset) { yScroll = self.pageYOffset; a = self.pageXOffset } else if (document.documentElement && document.documentElement.scrollTop) { yScroll = document.documentElement.scrollTop; a = document.documentElement.scrollLeft } else if (document.body) { yScroll = document.body.scrollTop; a = document.body.scrollLeft } arrayPageScroll = new Array(a, yScroll); return arrayPageScroll }; function ___pause(a) { var b = new Date(); c = null; do { var c = new Date() } while (c - b < a) }; return this.unbind('click').click(_initialize) } })(jQuery);
