if (typeof backend == 'undefined') {
    var backend = {};
}

backend = {
    carregaValores: function(objeto, url, id, defValue) {
        objeto.attr('disabled', 'disabled');
        objeto.html('<option value="">Carregando...</option>');
        $.getJSON(getBaseURL + url + id, function(retorno) {
            var itens = '<option value="0">Selecione...</option>';
            if(retorno) {
                for (i in retorno) {
                    itens += '<option value="' + i + '">' + retorno[i] + '</option>';
                }
                objeto.html(itens);
                if (defValue == 'undefined' || defValue == null) {
                    objeto.val(0);
                } else {
                    objeto.val(defValue);
                }
                objeto.removeAttr('disabled');
            }
        });
    }
};

backend.messages = {
    alertBox: function(html) {
        $('body').append('<div id="dialog"></div>');
        $("#dialog").html(html);
        $("#dialog").dialog({
            title: 'Mensagem de alerta',
            modal: true,
            buttons: {'Fechar': function() {
                $(this).dialog('destroy');
            }}
        });
    }
};

backend.extendValidate = {
    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) {
                        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();', 5000);

                return true;
            }
        });
    }
}
