/**
 * @category    Workbox jQuery
 * @package     wbBox
 * @copyright   Copyright (c) 2009-2010 Workbox AB (http://www.workbox.se)
 * @license     http://www.opensource.org/licenses/bsd-license.php
 * @version     1.0.0
 */

(function($)
{
    $.fn.extend({
        wbBox:function(options)
        {
            // Set the default parameters.
            var defaults = {
                baseUrl:'http://www.example.com/index.php?id=',
                bigWidth:600,
                bigHeight:400
            };
            // Join the default with the passed options into the o variable.
            var o = $.extend(defaults, options);
            // Set the obj variable to the passed object.
            var obj = $(this);
            // Variable to hold the interval object.
            var intervalHolder = 0;

            return this.each(function()
            {
                wbBoxInit(obj);
            });

            function wbBoxInit(domChunk)
            {
                $(domChunk).live('click', function()
                {
                    var title = this.title || this.name || null;
                    var path = this.href || this.alt;
                    var group = this.rel || false;
                    var img = this.rev || false;
                    wbBoxShow(title, path, group, img);
                    return false;
                });
            };

            function wbBoxShow(caption, url, imageGroup, imageId)
            {
                if ($('#wbBoxOverlay').length == 0) {
                    $('body, html').css({
                        height:'100%',
                        width:'100%'
                    });
                    $('html').css('overflow', 'hidden');
                    $('body').append('<div id="wbBoxOverlay"></div><div id="wbBoxWindow"></div>');
                    $('#wbBoxOverlay').bind('click', wbBoxRemove);
                }
                if (caption === null) {
                    caption = '';
                }
                $('body').append('<div id="wbBoxLoad"></div>');
                $('#wbBoxLoad').show();
                wbBoxPrevCaption = '';
                wbBoxPrevURL = '';
                wbBoxPrevHtml = '';
                wbBoxPrevId = '';
                wbBoxNextCaption = '';
                wbBoxNextURL = '';
                wbBoxNextHtml = '';
                wbBoxNextId = '';
                wbBoxFoundURL = false;
                wbBoxThisCount = 0;
                wbBoxThisCountTotal = $('a[rel="' + imageGroup + '"]').length;
                if (imageGroup) {
                    var n = 0;
                    $('a[rel="' + imageGroup + '"]').each(function()
                    {
                        n++;
                        if (wbBoxNextHtml === '') {
                            if (this.href != url) {
                                if (wbBoxFoundURL) {
                                    wbBoxNextCaption = this.title;
                                    wbBoxNextURL = this.href;
                                    wbBoxNextId = this.rev;
                                    wbBoxNextHtml = '<div id="wbBoxNextWrap"><a href="#" id="wbBoxNext"></a></div>';
                                } else {
                                    wbBoxPrevCaption = this.title;
                                    wbBoxPrevURL = this.href;
                                    wbBoxPrevId = this.rev;
                                    wbBoxPrevHtml = '<div id="wbBoxPrevWrap"><a href="#" id="wbBoxPrev"></a></div>';
                                }
                            } else {
                                wbBoxFoundURL = true;
                                wbBoxThisCount = n;
                            }
                        }
                    });
                }
                $('#wbBoxWindow').append('<div id="wbBoxCloseWindowButton">Stäng<span class="icon"></span></div>'
                                       + '<div id="wbBoxImageTitle">' + caption + '</div>'
                                       + '<div id="wbBoxImageHolder">'
                                       + '<img style="width:' + o.bigWidth + 'px;height:' + o.bigHeight + 'px;" src="' + url + '" alt="">'
                                       + wbBoxPrevHtml + wbBoxNextHtml
                                       + '</div>'
                                       + '<div id="imageIconBar">'
                                       + '<div id="imageIconBarCount">' + wbBoxThisCount + ' / ' + wbBoxThisCountTotal + '</div>'
                                       + '<div id="imageIconBarRemove"><a href="#"><span>Ta bort</span><span class="icon"></span></a></div>'
                                       + '<div id="imageIconBarMail"><a href="#"><span>Maila</span><span class="icon"></span></a></div>'
                                       + '<div id="imageIconBarFacebook"><a href="http://www.facebook.com/sharer.php?u=' + o.baseUrl + imageId + '" rel="external"><span>Facebook</span><span class="icon"></span></a></div>'
                                       + '<div id="imageIconBarLove"><a href="#"><span></span><span class="icon"></span></a></div>'
                                       + '</div>');
                wbBoxLove(imageId);
                $('#imageIconBarLove a').bind('click', callLove);
                $('#imageIconBarRemove a').bind('click', callRemove);
                $('#imageIconBarMail a').bind('click', callMail);
                $('#wbBoxCloseWindowButton').bind('click', wbBoxRemove);
                if (!(wbBoxPrevHtml === '')) {
                    function goPrev()
                    {
                        $('#wbBoxWindow').remove();
                        $('body').append('<div id="wbBoxWindow"></div>');
                        wbBoxShow(wbBoxPrevCaption, wbBoxPrevURL, imageGroup, wbBoxPrevId);
                        return false;
                    }
                    $('#wbBoxPrev').bind('click', goPrev);
                }
                if (!(wbBoxNextHtml === '')) {
                    function goNext()
                    {
                        $('#wbBoxWindow').remove();
                        $('body').append('<div id="wbBoxWindow"></div>');
                        wbBoxShow(wbBoxNextCaption, wbBoxNextURL, imageGroup, wbBoxNextId);
                        return false;
                    }
                    $('#wbBoxNext').bind('click', goNext);
                }
                function callLove()
                {
                    $('#imageIconBarLove a span:first').fadeOut('fast', function()
                    {
                        $.ajax({
                            type:'GET',
                            url:'/ajax/updatelove/id/' + imageId,
                            cache:false,
                            success:function(data)
                            {
                                $('#imageIconBarLove a span:first').html(data);
                                $('#imageIconBarLove a span:first').fadeIn();
                            }
                        });
                    });
                    return false;
                }
                function callRemove()
                {
                    $('#wbBoxImageHolder').append('<div id="wbBoxRemoveHolder">'
                                                + '<div id="wbBoxRemoveCloseButton">Stäng Formulär</div>'
                                                + '<div id="removeFormHolder"></div>'
                                                + '</div>');
                    $('#wbBoxRemoveCloseButton').bind('click', removeRemoveHolder);
                    $.ajax({
                        type:'GET',
                        url:'/ajax/removeform/id/' + imageId,
                        cache:false,
                        success:function(data)
                        {
                            $('#removeFormHolder').html(data);
                        }
                    });
                    return false;
                }
                function callMail()
                {
                    if ($('#wbBoxRemoveHolder').length != 0) {
                        removeRemoveHolder();
                    }
                    if ($('#wbBoxMailHolder').length != 0) {
                        removeMailHolder();
                    }
                    $('#wbBoxImageHolder').append('<div id="wbBoxMailHolder">'
                                                + '<div id="wbBoxMailCloseButton">Stäng Formulär</div>'
                                                + '<div id="mailFormHolder"></div>'
                                                + '</div>');
                    $('#wbBoxMailCloseButton').bind('click', removeMailHolder);
                    $.ajax({
                        type:'GET',
                        url:'/ajax/mailform/id/' + imageId,
                        cache:false,
                        success:function(data)
                        {
                            $('#mailFormHolder').html(data);
                        }
                    });
                    return false;
                }
                wbPosition();
                $('#wbBoxLoad').remove();
            };

            function removeRemoveHolder()
            {
                $('#wbBoxRemoveCloseButton').unbind('click', removeRemoveHolder);
                $('#wbBoxRemoveHolder').remove();
            };

            function removeMailHolder()
            {
                $('#wbBoxMailCloseButton').unbind('click', removeMailHolder);
                $('#wbBoxMailHolder').remove();
            };

            function wbBoxLove(id)
            {
                $.ajax({
                    type:'GET',
                    url:'/ajax/getlove/id/' + id,
                    cache:false,
                    success:function(data)
                    {
                        $('#imageIconBarLove a span:first').html(data);
                    }
                });
            };

            function wbPosition()
            {
                $('#wbBoxWindow').css({marginTop:'-' + (o.bigHeight / 2) + 'px',
                                       marginLeft:'-' + (o.bigWidth / 2) + 'px',
                                       display:'block'});
            };

            function wbBoxRemove()
            {
                $('#wbBoxOverlay').unbind('click', wbBoxRemove);
                $('#wbBoxWindow').fadeOut('fast', function()
                {
                    $('#wbBoxWindow, #wbBoxOverlay').remove();
                });
                $('#wbBoxLoad').remove();
                $('body, html').css({
                    height:'auto',
                    width:'auto'
                });
                $('html').css('overflow', '');
                return false;
            };
        }
    });
})(jQuery);
