/*jslint white: true, devel: true, onevar: true, browser: true, undef: true, nomen: true, regexp: false, plusplus: true, windows: false, bitwise: true, newcap: true, maxerr: 50, indent: 4 */

var mightybar = function () {
    mightybar.tooltip();
    mightybar.setFlash.onLoad();
    mightybar.cart();
};

mightybar.cart = function () {
    var cartForm = $('#CartStoreViewForm'),
        inProcess = false,
        cart = $('#tmpl-mb-cart').html(),
        btnSubmit;

    if (cartForm.length > 0) {
        btnSubmit = cartForm.find('button');

        btnSubmit.click(function () {
            if (!inProcess) {
                cartForm.submit();
            }

            return false;
        });

        cartForm.submit(function () {
            var that = $(this),
                action = that.attr('action'),
                data = that.serialize();

            $.ajax({
                url: action,
                type: 'POST',
                dataType: 'json',
                data: data,
                beforeSend: function (o) {
                    $.fancybox.showActivity();
                    inProcess = true;
                },
                success: function (d) {
                    $.fancybox({content: cart});
                    $('#cart-count').html(d.count);
                },
                error: function () {
                    alert('Ocorreu um erro ao tentar adicionar este produto em seu carrinho. Por favor, tente novamente!');
                },
                complete: function () {
                    $.fancybox.hideActivity();
                    inProcess = false;
                }
            });

            return false;
        });
    }
};

mightybar.tooltip = function () {
    var tooltips = $('.tooltip'),
        gravities,
        g;

    if (tooltips.length > 0) {
        gravities = {
            nw: 'gravity-nw',
            n: 'gravity-n',
            ne: 'gravity-ne',
            w: 'gravity-w',
            e: 'gravity-sw',
            sw: 'gravity-sw',
            s: 'gravity-s',
            se: 'gravity-se'
        };

        tooltips.each(function (i, link) {
            var tooltip = $(link);

            g = 's';

            $.each(gravities, function (i, c) {
                if (tooltip.hasClass(c)) {
                    g = i;
                }
            });

            tooltip.tipsy({gravity: g});
        });
    }
};

mightybar.setFlash = function (m, t) {
    var container = $('#mighty-flash'),
        hasMessage = container.find('#flashMessage'),
        obj,
        close = '<a class="close" href="#">close</a>';

    $('#tmpl-mb-flash').template('flashTemplate');

    m = m || 'Erro';
    t = t || 'error';

    obj = {type: t, message: m};

    if (window.flashMessageTimeOut) {
        clearTimeout(window.flashMessageTimeOut);
    }

    if (hasMessage.length > 0) {
        container.empty();
    }

    container.html($.tmpl('flashTemplate', obj))
        .append(close).find('a.close').click(function () {
            if (window.flashMessageTimeOut) {
                clearTimeout(window.flashMessageTimeOut);
            }

            container.fadeOut('medium', function () {
                container.empty();
                container.show();
            });

            return false;
        });

    window.flashMessageTimeOut = setTimeout(function () {
        container.fadeOut('medium', function () {
            container.empty();
            container.show();
        });
    }, 7000);
};

mightybar.setFlash.onLoad = function () {
    var container = $('#mighty-flash'),
        flash  = container.find('#flashMessage'),
        close = '<a class="close" href="#">close</a>';

    if (flash.length > 0) {
        flash.append(close).find('a.close').click(function () {
            if (window.flashMessageTimeOut) {
                clearTimeout(window.flashMessageTimeOut);
            }

            container.fadeOut('medium', function () {
                container.empty();
                container.show();
            });

            return false;
        });

        window.flashMessageTimeOut = setTimeout(function () {
            container.fadeOut('medium', function () {
                container.empty();
                container.show();
            });
        }, 7000);
    }
};

$(document).ready(function () {
    mightybar();
});
