var vm7 = {
    getBaseURL: function() {
        return baseURL;
    },

    getImgUrl: function(imagem) {
        return baseURL + 'img/' + imagem;
    },

    getBackendImgUrl: function(imagem) {
        return baseURL + 'img/backend/' + imagem;
    },

    post: function(url, data, callback) {
        vm7.ajax('POST', url, data, callback);
    },

    get: function(url, data, callback) {
        vm7.ajax('GET', url, data, callback);
    },

    ajax: function(type, url, data, callback) {
        if (typeof data == 'function') {
            callback = data;
            data = {};
        }

        var options = {
            cache: false,
            type: type,
            url: url,
            data: data,
            success: callback,
            error: function(request, settings) {
                var msgErro = 'Ocorreu um erro ao tentar comunicar com o servidor. Por favor, tente novamente!';
                alert(msgErro);
            }
        };

        jQuery.ajax(options);
    },

    carregaLista: function(emptyText, entity, url, selectId, callback) {
        var objeto = jQuery('select#' + selectId);
        objeto.html('<option value="0">Aguarde ... Carregando</option>');

        vm7.get(vm7.getBaseURL() + url, function(listaEntidades) {
            eval('var listaEntidades = ' + listaEntidades + ';');
            var data = '<option value="0">' + emptyText + '</option>';

            for (i in listaEntidades) {
                var entidade = listaEntidades[i];
                data += '<option value="' + entidade[entity].id + '">' + entidade[entity].nome + '</option>';
            }

            objeto.html(data);
            objeto.val(0);

            if (typeof callback == 'function') {
                eval(callback);
            }
        });
    },

    carregaListaChaveValor: function(emptyText, url, selectId, callback) {
        var objeto = jQuery('select#' + selectId);
        objeto.html('<option value="0">Aguarde ... Carregando</option>');

        vm7.get(vm7.getBaseURL() + url, function(listaEntidades) {
            eval('var listaEntidades = ' + listaEntidades + ';');

            vm7.escreveListaChaveValor(emptyText, listaEntidades, objeto, callback);
        });
    },

    escreveListaChaveValor: function(emptyText, listaEntidades, objeto, callback) {
        var data = '<option value="0">' + emptyText + '</option>';

        var count = 0;
        for (id in listaEntidades) {
            var entidade = listaEntidades[id];
            data += '<option value="' + id + '">' + entidade + '</option>';

            count++;
        }

        objeto.html(data);
        objeto.val(0);

        if (typeof callback == 'function') {
            callback.call();
        }

        return count;
    },

    sobeTopo: function(offsetTop) {
        // pega a posicao da barra de rolagem
        var scrollTop = $(document).scrollTop();

        if (typeof offsetTop == 'number') {
            if (offsetTop >= scrollTop) {
                $(document).scrollTop(offsetTop - 50);

                return true;
            }
        } else {
            offsetTop = 0;
        }

        if (scrollTop > 0) {
            $(document).scrollTop(scrollTop - 50);

            setTimeout('vm7.sobeTopo(' + offsetTop + ')', 4);
        }
    }
};

vm7.button = {
    carregando: function(objeto) {
        var objeto = jQuery(objeto);
        var disabled = true;

        if (objeto.attr('disabled') == 'undefined') {
            disabled = false;
        } else {
            disabled = objeto.attr('disabled');
        }

        objeto.attr('disabled', false);
        objeto.toggleClass('carregando');
        vm7.loading.toggle();
    }
};

vm7.loading = {
    started: false,

    control: function() {
        jQuery().mousemove(function(e) {
            $('div#loadingPointer').css('top', e.pageY);
            $('div#loadingPointer').css('left', e.pageX);
        });
    },

    start: function() {
        if (vm7.loading.started == false) {
            vm7.loading.control();
            vm7.loading.started = true;
        }

        jQuery('div#loadingPointer').show();
    },

    stop: function() {
        jQuery('div#loadingPointer').hide();
    },

    toggle: function() {
        if (vm7.loading.started == false) {
            vm7.loading.control();
            vm7.loading.started = true;
        }

        jQuery('div#loadingPointer').toggle();
    }
};

vm7.table = {
    zebra: function(tabela) {
        var table = jQuery(tabela).not('.semZebra');

        var i = 0;
        jQuery('tr', table).each(function() {
            jQuery(this).removeClass('linha');

            if (i % 2 == 0)
                jQuery(this).addClass('linha');

            i++;
        });

        jQuery('tr', table).hover(function(){
            $(this).addClass('linhaSelecionada');
        }, function(){
            $(this).removeClass('linhaSelecionada');
        });
    }
};

vm7.upload = {
    settings: {},

    processando: false,

    envia: function(settings) {
        if (vm7.upload.processando) {
            vm7('Já existe um arquivo sendo processado no momento. Por favor, tente novamente.');
            return false;
        }

        vm7.upload.settings = settings;
        vm7.upload.processando = true;

        var action = jQuery('form#' + settings.formularioId).attr('action');

        jQuery('form#' + settings.formularioId).attr('target', 'ajaxUploadListener');
        jQuery('form#' + settings.formularioId).attr('action', settings.formularioAction);
        jQuery('form#' + settings.formularioId).submit();

        jQuery('form#' + settings.formularioId).attr('target', settings.target);
        jQuery('form#' + settings.formularioId).attr('action', action);
    },

    callbackSucesso: function(response) {
        vm7.upload.settings.callbackSucesso( response );

        vm7.upload.settings = null;
        vm7.upload.processando = false;
    },

    callbackErro: function(response) {
        var message = 'Os seguintes problemas ocorreram:' + "\n";
        for (i in response) {
            message += ' - ' + response[i] + "\n";
        }
        vm7.upload.settings.callbackErro( message );

        vm7.upload.settings = null;
        vm7.upload.processando = false;
    }
};

vm7.filtro = {
    showHide: function() {
        jQuery('form#filtro').toggle();
        jQuery('form#filtro').find('input,select,textarea').val('');
    },

    cancelar: function(obj) {
        jQuery(obj).parents('form#filtro').toggle();
        jQuery(obj).parents('form#filtro').find('input,select,textarea').val('');
    },

    limpar: function(obj) {
        jQuery(obj).parents('form#filtro').find('input,select,textarea').val('');
        jQuery(obj).parents('form#filtro').submit();
    }
};

/*vm7.regrasValidacao = {
    validate: function() {
        $.extend($.validate.methods, {
            required: function (string) {
                return (string == $.trim(string));
            },
            positive: function (number) {
                number = parseFloat(number);
                if(number < 0) {
                    return false;
                }
                return true;
            }
        });

        $.extend($.validate._messages, {
            'positive': 'Preencha o campo "%(title)s" com um número positivo'
        });

        $.extend($.validate, {
            applyMasks: function(form, validations) {
                $(form).find('label span').each(function() {
                    $(this).removeClass('validate-required');
                    $(this).children('strong').remove();
                });
                for (id in validations) {
                    var field = $('#' + id);
                    for (var i = 0; i < validations[id].length; i++) {
                        var validation = validations[id][i];
                        if(!$(field).parent('label').children('span').is('.validate-required')) {
                            var label = '';
                            var text = $(field).parent().find('span').text();
                            label = '<strong>*</strong> ' + text;
                            $(field).parent().find('span').html(label);
                            $(field).parent().find('span').addClass('validate-required');
                        }
                        if (typeof $.validate.masks[validation.rule] == 'string') {
                            field.unmask();
                            field.mask($.validate.masks[validation.rule]);
                        } else if (typeof $.validate.masks[validation.rule] == 'function') {
                            $.validate.masks[validation.rule](field, validation.options);
                        }
                    }
                    $(field).bind('change', function() {
                        $(this).parent().find('span').removeClass('validate-required');
                    });
                }
                return true;
            }
        });

        $.extend($.validate, {
            showErrors: function(errors) {
                // Has errors?
                if (!(errors instanceof Array) || errors.length == 0) {
                    return false;
                }
                // Verify if error container exists
                if ($('#validateError').html() == null) {
                    $('body').append('<li id="validateError" onclick="$(this).remove();"></li>');
                }
                // Add class to all inputs
                for (i in errors) {
                    var error = errors[i];
                    var field = $('#' + error.id);
                    // Show first error
                    if (i == 0) {
                        //Controle de validação em abas
                        if(field.parents('form').is('.controla-abas')) {
                            if(field.parents('fieldset.abas:hidden')) {
                                $('.menu-tabs li a').parent().removeClass('selected');
                                $('fieldset.abas').hide();
                                field.parents('fieldset.abas').show();
                                var id = field.parents('fieldset.abas').attr('id');
                                id = id.split('-');
                                $('.menu-tabs li a#' + id[1]).parent().addClass('selected');
                            }
                        }
                        //
                        var element = $.validate.container(field).parent();
                        $('#validateError').html('<span>' + error.message + '</span>').insertBefore(element);
                    }
                }

                // Scroll to message
                var offset = ($('#validateError').outerHeight({
                    margin: true
                }) - $('#validateError').height()) / 2;
                $.scrollTo($('#validateError'), 500, {
                    offset: - offset
                });
                window.setTimeout('$(\'#validateError\').remove();', 15000);

                return true;
            }
        });
    }
}*/
