(function ($) {
    $.fn.lightBox = function (settings) {
        settings = jQuery.extend({
            imageArray: [],
            activeImage: 0
        }, settings);
        var jQueryMatchedObj = this;
        function _initialize() {
            _start(this, jQueryMatchedObj);
            return false
        }
        function _start(objClicked, jQueryMatchedObj) {
            $('embed, object, select').css({
                'visibility': 'hidden'
            });
            _set_interface();
            settings.imageArray.length = 0;
            settings.activeImage = 0;
            if (jQueryMatchedObj.length == 1) {
                settings.imageArray.push(objClicked.getAttribute('href'))
            } else {
                for (var i = 0; i < jQueryMatchedObj.length; i++) {
                    settings.imageArray.push(jQueryMatchedObj[i].getAttribute('href'))
                }
            }
            while (settings.imageArray[settings.activeImage] != objClicked.getAttribute('href')) {
                settings.activeImage++
            }
            _set_image_to_view()
        }
        function _set_interface() {
            if($('div#lightbox-popup').length == 0)
            {
                $('div.postarea').append('<div class="popup" id="lightbox-popup"><a href="#" class="lightbox-close" id="lightbox-close">Close</a><span class="top">&nbsp;</span><div class="text"><em class="cnr-blk c-tl">&nbsp;</em><em class="cnr-blk c-tr">&nbsp;</em><em class="cnr-blk c-bl">&nbsp;</em><em class="cnr-blk c-br">&nbsp;</em><img id="lightbox-image" /></div><span class="bott">&nbsp;</span><a href="#" class="prev" id="lightbox-prev">Prev</a><a href="#" class="next" id="lightbox-next">Next</a></div>');
                $('#lightbox-close').click(function () {
                    _finish();
                    return false
                })
            }
        }
        function _set_image_to_view() {
            $('#lightbox-image').hide();
            var objImagePreloader = new Image();
            objImagePreloader.onload = function () {
                $('#lightbox-image').attr('src', settings.imageArray[settings.activeImage]);
                _center_image(objImagePreloader.width, objImagePreloader.height);
                objImagePreloader.onload = function () {}
            };
            objImagePreloader.src = settings.imageArray[settings.activeImage]
        }
        function _center_image(intImageWidth, intImageHeight) {
            $('#lightbox-image').css({
                position: 'relative',
                left: ($('#lightbox-popup').width() - intImageWidth) / 2 + 'px',
                top: ($('#lightbox-popup').height() - intImageHeight) / 2 + 'px'
            });
            _show_image();
        }
        function _show_image() {
            $('#lightbox-image').fadeIn(function () {
                _set_navigation()
            });
            _preload_neighbor_images()
        }
        function _set_navigation() {
            $('#lightbox-prev').unbind().bind('click', function () {
                settings.activeImage = (settings.activeImage == 0 ? (settings.imageArray.length - 1) : (settings.activeImage - 1));
                _set_image_to_view();
                return false
            });
            $('#lightbox-next').unbind().bind('click', function () {
                settings.activeImage = (settings.activeImage + 1) % settings.imageArray.length;
                _set_image_to_view();
                return false
            })
        }
        function _preload_neighbor_images() {
            objNext = new Image();
            objNext.src = settings.imageArray[(settings.activeImage + 1) % settings.imageArray.length];
            objPrev = new Image();
            objPrev.src = settings.imageArray[settings.activeImage == 0 ? (settings.imageArray.length - 1) : (settings.activeImage - 1)];
        }
        function _finish() {
            $('#lightbox-popup').remove();
            $('embed, object, select').css({
                'visibility': 'visible'
            })
        }
        return this.unbind('click').click(_initialize)
    }
})(jQuery);
