﻿var imgObj;
var nextImgObj;
var prevImgObj;

var BrettBox = {

    Gallery: {
        Initialize: function() {
            $('.slideshow').click(function() {
                BrettBox.Render.Overlay();

                imgObj = new Image();
                imgObj.caption = $(this).attr('title');
                imgObj.index = $('.slideshow').index(this);
                imgObj.onload = BrettBox.Render.Window;
                imgObj.src = $(this).attr('rel');

                try {
                    var i = parseInt(imgObj.index) + 1;
                    nextImgObj = $('.slideshow:eq(' + i + ')');
                } catch (e) { }
                try {
                    var a = parseInt(imgObj.index) - 1;
                    prevImgObj = $('.slideshow:eq(' + a + ')');
                } catch (e) { }

                BrettBox.Settings.CacheImages(imgObj.index);
            });
        },

        Update: function(index) {
            imgObj = new Image();
            imgObj.caption = $('.slideshow:eq(' + index + ')').attr('title');
            imgObj.index = index;
            imgObj.onload = BrettBox.Render.UpdateImageContent;
            imgObj.src = $('.slideshow:eq(' + index + ')').attr('rel');

            try {
                var i = parseInt(imgObj.index) + 1;
                nextImgObj = $('.slideshow:eq(' + i + ')');
            } catch (e) { }
            try {
                var a = parseInt(imgObj.index) - 1;
                prevImgObj = $('.slideshow:eq(' + a + ')');
            } catch (e) { }

            BrettBox.Settings.CacheImages(imgObj.index);
        },

        Close: function() {
            $('#window, #overlay').fadeOut(400, function() {
                $(this).remove();
            });
        }
    },

    Render: {
        Overlay: function() {
            $('body').append('<div id="overlay" onclick="BrettBox.Gallery.Close();" style="filter:alpha(opacity=50);"></div>');
            $('#overlay').fadeIn(400);
        },

        ImageContent: function() {
            BrettBox.Settings.AdjustImageDimensions();
            var closebt = BrettBox.Render.CloseButton(); /*To add the close button on the top - SM*/
            $('#window').html(closebt + '<img height="' + imgObj.height + '" src="' + imgObj.src + '" width="' + imgObj.width + '" />');
            BrettBox.Render.Caption();
            $('#window').css({
                marginLeft: -parseInt((imgObj.width + 20) / 2) + "px",
                marginTop: -parseInt(($('#window').height() + 20) / 2) + "px"
            });
        },

        UpdateImageContent: function() {
            BrettBox.Settings.AdjustImageDimensions();

            $('.hidden').remove();
            $('body').append('<div class="hidden" style="visibility:hidden;width:' + imgObj.width + 'px;">' + imgObj.caption + '</div>');
            $('#window').height($('#window').height());
            $('#window').width($('#window').width());
            $('.caption, .prev, .next').hide();

            var hidHeight = $('.hidden').height();
            var prevHeight = $('.prev').height();
            var paddCapt = parseInt($('.caption').css('padding-top')) * 4;

            $('img', '#window').fadeOut(300, function() {
                $('#window').animate({
                    height: (imgObj.height + hidHeight + prevHeight + 20) + "px",
                    marginLeft: -((imgObj.width + 20) / 2) + "px",
                    marginTop: -((imgObj.height + hidHeight + prevHeight + 20 + paddCapt) / 2) + "px",
                    width: imgObj.width + "px"
                }, 400, function() {
                    BrettBox.Render.ImageContent();
                    $('img', '#window').fadeIn(250, function() {
                        $('.caption, .prev, .next').show();
                    });
                });
            });
        },

        Caption: function() {
            var capt = '<div style="height:14px;padding:5px 0;width:' + imgObj.width + 'px;"><a class="next" onclick="BrettBox.Gallery.Update(' + (imgObj.index + 1) + ');return false;" href="#"> </a><a class="prev" onclick="BrettBox.Gallery.Update(' + (imgObj.index - 1) + ');return false;" href="#"> </a></div><div class="caption" style="width:' + imgObj.width + 'px;">' + imgObj.caption + '</div>';

            try {
                var currImg = imgObj.src.split("/");
                var currIns = currImg[6];
            }
            catch (err) {
            }

            try {
                var nextImg = $(nextImgObj).attr("rel").split('/');
                var nextIns = nextImg[4];
            } catch (e) { }

            try {
                var prevImg = $(prevImgObj).attr("rel").split('/');
                var prevIns = prevImg[4];
            } catch (e) { }

            $('#window').append(capt);
            if (!imgObj.index > 0 || currIns != prevIns)
                $('.prev').css('visibility', 'hidden');
            else
                $('.prev').show();
            if (imgObj.index == ($('.slideshow').size() - 1) || currIns != nextIns)
                $('.next').css('visibility', 'hidden');
            else
                $('.next').show();
        },

        Window: function() {
            $('#overlay').css('backgroundImage', 'none');
            $('body').append('<div id="window"></div>');
            BrettBox.Render.ImageContent();
            $('#window').slideDown(400);
        },

        CloseButton: function() {
            var close = '<div><a href="#" onclick="BrettBox.Gallery.Close();return false;" style="float:right;color:#000;font-weight:bold;">X</a></div>';
            //$('#window').append(close);
            return close;
        }

    },

    Settings: {
        AdjustImageDimensions: function() {
            imgObj.ratio = parseInt(imgObj.width) / parseInt(imgObj.height);
            imgObj.winH = $(window).height() - 100;

            if (imgObj.winH < imgObj.height) {
                imgObj.height = imgObj.winH;
                imgObj.width = parseInt(imgObj.ratio * imgObj.winH);
            }
        },

        CacheImages: function(index) {
            var p = new Image();
            var n = new Image();

            p.src = $('.slideshow:eq(' + (index - 1) + ')').attr('rel');
            n.src = $('.slideshow:eq(' + (index + 1) + ')').attr('rel');
        }
    }
}

window.onload = BrettBox.Gallery.Initialize;

