(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.header').after('<div class="lightbox_block"><div id="lightbox-popup" class="big-img-popup"><div class="img_prev"><img id="lightbox-prev-image" /><div class="shadow">&nbsp;</div></div><div class="img"><img id="lightbox-image" /></div><div class="img_next"><img id="lightbox-next-image" /><div class="shadow">&nbsp;</div></div><a href="#" id="lightbox-close" class="lightbox_close">x</a><a href="#" id="lightbox-prev" class="slide_prev">&lt;</a><a href="#" id="lightbox-next" class="slide_next">&gt;</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) {
            _show_image();
        }
        function _show_image() {
            $('#lightbox-image').fadeIn(function () {
                _set_navigation()
            });
            _preload_neighbor_images()
        }
        function _set_navigation() {
            $('#lightbox-prev').unbind().bind('click', function () {
                if(settings.activeImage > 0)
                {
                    settings.activeImage--;
                    _set_image_to_view();
                }
                return false
            });
            $('#lightbox-next').unbind().bind('click', function () {
                if(settings.activeImage < settings.imageArray.length - 1)
                {
                    settings.activeImage++;
                    _set_image_to_view();
                }
                return false
            })
        }
        function _preload_neighbor_images() {
            $('#lightbox-next-image').attr('src', '');
            $('#lightbox-prev-image').attr('src', '');
            if(settings.activeImage < settings.imageArray.length - 1)
            {
                objNext = new Image();
                objNext.onload = function(){
                    $('#lightbox-next-image').attr('src', settings.imageArray[settings.activeImage + 1]);
                    objNext.onload = function(){};
                };
                objNext.src = settings.imageArray[settings.activeImage + 1];
            }
            if(settings.activeImage > 0)
            {
                objPrev = new Image();
                objPrev.onload = function(){
                    $('#lightbox-prev-image').attr('src', settings.imageArray[settings.activeImage - 1]);
                    objPrev.onload = function(){};
                };
                objPrev.src = settings.imageArray[settings.imageArray.length - 1];
            }
        }
        function _finish() {
            $('#lightbox-popup').remove();
            $('embed, object, select').css({
                visibility: 'visible'
            });
        }
        return this.unbind('click').click(_initialize)
    }
})(jQuery);
