/*
 * Lightboxesq 1.0 - simple, lightweight jQuery lightbox plugin
 * mitchell.cain@gmail.com
 * NO LICENSE - DO WHAT YOU WANT
 * 2011-06-02
 */

(function($) {
    var sets = [];
    var id_count = 0;
    var id, n;

    var overlay = $('<div/>', {
        id: 'lb_overlay'
    }).click(close);
    var navprev = $('<a/>', {
        id: 'lb_navprev',
        text: 'Previous'
    }).click(prev);
    var navnext = $('<a/>', {
        id: 'lb_navnext',
        text: 'Next'
    }).click(next);
    var navclose = $('<a/>', {
        id: 'lb_navclose',
        text: 'Close'
    }).click(close);
    var caption_desc = $('<span/>');
    var caption_count = $('<span/>');
    var caption = $('<div/>', {
        id: 'lb_caption'
    }).append([caption_desc[0], caption_count[0], navclose[0]]);
    var lightboxesq = $('<div/>', {
        id: 'lightboxesq'
    }).append([navprev[0], navnext[0], caption[0]]);
    var wrapper = $('<div/>', {
        id: 'lb_wrapper'
    }).hide().append([overlay[0], lightboxesq[0]]);

    $(function() {
        $('body').append(wrapper);
    });

    $.fn.lightboxesq = function(imagelink) {
        if (this.length > 0) {
            sets[id_count] = {
                domset: this,
                setdata: []
            };
            var imagecount = 0;
            this.each(function() {
                $(this).data('lb_id', id_count).click(function(e) {
                    e.preventDefault();
                    $.fn.lightboxesq(e.currentTarget);
                });
                preload(this, id_count, imagecount, false);
                imagecount++;
            });
            id_count++;
        } else if (typeof imagelink == 'object') {
            open(imagelink);
        }
        return this;
    };

    function preload(imagelink, id, n, showphoto) {
        var img = $('<img>').load(function() {
            sets[id].setdata[n] = {
                image: this,
                width: this.width,
                height: this.height,
                desc: $(imagelink).attr('title') || ''
            };
            $(this).hide().prependTo(lightboxesq);
            if (showphoto) {
                prep();
            }
        }).attr('src', $(imagelink).attr('href'));
        if ((showphoto && img.complete) || img.complete === undefined) {
            var src = img.src;
            img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==';
            img.src = src;
        }
    }

    function open(imagelink) {
        lightboxesq.addClass('lb_unloaded').css({
            // top: $(window).scrollTop() + $(window).height() / 2,
            // left: $(window).scrollLeft() + $(window).width() / 2
            top: '114px',
            // top: '124px',
            left: '50%'
        });
        $('img', lightboxesq).hide();
        id = $(imagelink).data('lb_id');
        n = sets[id].domset.index(imagelink);
        wrapper.fadeIn(function() {
            $(document).keyup(keyup);
            prep(imagelink);
        });
    }

    function prep(imagelink) {
        if (typeof sets[id].setdata[n] == 'object') {
            lightboxesq.addClass('lb_unloaded');
            typeof sets[id].setdata[n + 1] == 'object' ? lightboxesq.removeClass('lb_nonext') : lightboxesq.addClass('lb_nonext');
            typeof sets[id].setdata[n - 1] == 'object' ? lightboxesq.removeClass('lb_noprev') : lightboxesq.addClass('lb_noprev');
            if ($('img:visible', lightboxesq).length > 0) {
                $('img:visible', lightboxesq).stop(true).fadeOut(show);
            } else {
                show();
            }
        } else {
            preload(imagelink, id, n, true);
        }
    }

    function show() {
        lightboxesq.stop(true).animate({
            width: sets[id].setdata[n].width,
            height: sets[id].setdata[n].height,
            marginLeft: -sets[id].setdata[n].width / 2
            // marginTop: -sets[id].setdata[n].height / 2
        }, function() {
            $(sets[id].setdata[n].image).stop(true).css('opacity', '').fadeIn(function() {
                caption_desc.text(sets[id].setdata[n].desc);
                caption_count.text('Photo ' + (n + 1) + ' of ' + sets[id].setdata.length);
                // lightboxesq.removeClass('lb_unloaded').animate({
                //     // height: sets[id].setdata[n].height + caption.outerHeight()
                // });
            });
        });
    }

    function prev() {
        n--;
        prep();
    }

    function next() {
        n++;
        prep();
    }

    function close() {
        $(document).unbind('keyup', keyup);
        $('img', lightboxesq).stop(true);
        wrapper.fadeOut(function() {
            lightboxesq.stop(true).addClass('lb_unloaded').css({
                width: '',
                height: '',
                marginLeft: '',
                marginTop: ''
            });
            $('img', lightboxesq).stop(true).hide();
        });
    }

    function keyup(e) {
        switch (e.which) {
        case 27:
        case 88:
            close();
            e.preventDefault();
            break;
        case 37:
        case 80:
            if (navprev.is(':visible')) {
                navprev.click();
                e.preventDefault();
            }
            break;
        case 39:
        case 78:
            if (navnext.is(':visible')) {
                navnext.click();
                e.preventDefault();
            }
            break;
        }
    }
})(jQuery);
