﻿var IsValid;
$(document).ready(function () {
    $('.FormPanel .TextBox').focusout(function () { FieldTrim(this); });
    $('.FormPanel .Required').focusout(function () { FieldRequired(this); });
    $('.FormPanel .SelectRequired').change(function () { FieldSelectRequired(this); });
    $('.FormPanel .MaskInteger').focusout(function () { FieldInteger(this); });
    $('.FormPanel .MaskDouble').focusout(function () { FieldDouble(this); });
    $('.FormPanel .MaskCPF').focusout(function () { MaskCPF(this); FieldCPF(this); });
    $('.FormPanel .MaskCNPJ').focusout(function () { MaskCNPJ(this); FieldCNPJ(this); });
    $('.FormPanel .MaskCPF_CNPJ').focusout(function () { MaskCPF_CNPJ(this); FieldCPF_CNPJ(this); });
    $('.FormPanel .MaskZipCode').focusout(function () { MaskZipCode(this); FieldZipCode(this); });
    $('.FormPanel .MaskPhone').focusout(function () { MaskPhone(this); FieldPhone(this); });
    $('.FormPanel .MaskMail').focusout(function () { FieldMail(this); });

    $('.FormPanel .MaskInteger').keypress(function (event) { MaskInteger(this); });
    $('.FormPanel .MaskDouble').keypress(function (event) { MaskDouble(this); });
    $('.FormPanel .MaskCPF').keypress(function (event) { MaskCPF(this); });
    $('.FormPanel .MaskCNPJ').keypress(function (event) { MaskCNPJ(this); });
    $('.FormPanel .MaskCPF_CNPJ').keypress(function (event) { MaskCPF_CNPJ(this); });
    $('.FormPanel .MaskZipCode').keypress(function (event) { MaskZipCode(this); });
    $('.FormPanel .MaskPhone').keypress(function (event) { MaskPhone(this); });

    $('#aspnetForm').submit(function (event) { if (!IsFormValid()) { event.preventDefault(); } });
});

function IsFormValid() {
    IsValid = true;

    $('.FormPanel .Summary').css({ visibility: 'hidden', display: 'block' });
    $('.FormPanel .Loading').css({ display: 'block', width: $(window).width(), height: $(document).height(), opacity: 0.2 });
    $('.FormPanel .LoadingMessage').css({ display: 'block', left: ($(window).width() - 800) / 2, top: 0 });

    $('.FormPanel .TextBox').each(function (i) { FieldTrim(this); });
    $('.FormPanel .Required').each(function (i) { FieldRequired(this); });
    $('.FormPanel .SelectRequired').each(function (i) { FieldSelectRequired(this); });
    $('.FormPanel .MaskInteger').each(function (i) { FieldInteger(this); });
    $('.FormPanel .MaskDouble').each(function (i) { FieldDouble(this); });
    $('.FormPanel .MaskCPF').each(function (i) { FieldCPF(this); });
    $('.FormPanel .MaskCNPJ').each(function (i) { FieldCNPJ(this); });
    $('.FormPanel .MaskCPF_CNPJ').each(function (i) { FieldCPF_CNPJ(this); });
    $('.FormPanel .MaskZipCode').each(function (i) { FieldZipCode(this); });
    $('.FormPanel .MaskPhone').each(function (i) { FieldPhone(this); });
    $('.FormPanel .MaskMail').each(function (i) { FieldMail(this); });

    if (!IsValid) {
        $('.FormPanel .Summary').css({ visibility: 'visible' });
        $('.FormPanel .TextBoxInvalid:first').focus();

        var offset = $('.FormPanel .Summary').offset();
        $(document).scrollTop(offset.top - 15);

        $('.FormPanel .Loading').css({ display: 'none' });
        $('.FormPanel .LoadingMessage').css({ display: 'none' });
    } else {
        $('.FormPanel .Summary').css({ display: 'none' });
    }

    return IsValid;
}

/*** Fields Validators ***/
function FieldTrim(src) {
    $(src).val($.trim($(src).val()));
}

function FieldRequired(src) {
    if ($(src).val() == '') {
        ShowWarning(src, 'Campo obrigatório.');
    } else {
        HideWarning(src);
    }
}

function FieldSelectRequired(src) {
    if ($('#' + $(src).attr('id') + ' input:checked').val() == undefined) {
        var offset = $(src).offset();
        var srcmsg = '.' + $(src).attr('id');
        $(srcmsg).html('Selecione uma opção.');

        var top = offset.top + $(src).height() + 1;
        var left = offset.left + $(src).width() - $(srcmsg).width() - 5;

        $(srcmsg).css({ display: 'block', left: left, top: top });
        $(src).addClass('RadioButtonListInvalid');

        IsValid = false;
    } else {
        var srcmsg = '.' + $(src).attr('id');
        $(srcmsg).css({ display: 'none' });
        $(src).removeClass('RadioButtonListInvalid');
    }
}

function FieldInteger(src) {
    if ($(src).val() != '') {
        if ((!IsNumeric($(src).val())) || ($(src).val().indexOf('.') >= 0)) {
            ShowWarning(src, 'Digite um número inteiro.');
        } else {
            HideWarning(src);
        }
    }
}

function FieldDouble(src) {
    if ($(src).val() != '') {
        $(src).val($(src).val().replace(".", ","));

        if (!IsNumeric($(src).val().replace(",", "."))) {
            ShowWarning(src, 'Digite um número.');
        } else {
            HideWarning(src);
        }
    }
}

function FieldCPF(src) {
    if ($(src).val() != '') {
        if (!IsCPFValid($(src).val())) {
            ShowWarning(src, 'CPF Inválido.');
        } else {
            HideWarning(src);
        }
    }
}

function FieldCNPJ(src) {
    if ($(src).val() != '') {
        if (!IsCNPJValid($(src).val())) {
            ShowWarning(src, 'CNPJ Inválido.');
        } else {
            HideWarning(src);
        }
    }
}

function FieldCPF_CNPJ(src) {
    if ($(src).val() != '') {
        if ((!IsCPFValid($(src).val())) && (!IsCNPJValid($(src).val()))) {
            ShowWarning(src, 'CPF/CNPJ Inválido.');
        } else {
            HideWarning(src);
        }
    }
}

function FieldZipCode(src) {
    if ($(src).val() != '') {
        if ($(src).val().length < 6) {
            ShowWarning(src, 'CEP Inválido.');
        } else {
            HideWarning(src);
        }
    }
}

function FieldPhone(src) {
    if ($(src).val() != '') {
        if ($(src).val().length < 14) {
            ShowWarning(src, 'Número Inválido.');
        } else {
            HideWarning(src);
        }
    }
}

function FieldMail(src) {
    if ($(src).val() != '') {
        if (($(src).val().indexOf('.') < 1) || ($(src).val().indexOf(' ') >= 0) || ($(src).val().indexOf('@') < 1)) {
            ShowWarning(src, 'E-mail Inválido.');
        } else {
            HideWarning(src);
        }
    }
}

/*** Warnings ***/
function ShowWarning(src, msg) {
    var offset = $(src).offset();
    var srcmsg = '.' + $(src).attr('id');
    
    $(srcmsg).html(msg);

    var top = offset.top + 27;
    var left = offset.left + $(src).width() - $(srcmsg).width() + 6;

    $(srcmsg).css({ display: 'block', left: left, top: top });
    $(src).addClass('TextBoxInvalid');

    IsValid = false;
}

function HideWarning(src) {
    var srcmsg = '.' + $(src).attr('id');
    $(srcmsg).css({ display: 'none' });
    $(src).removeClass('TextBoxInvalid');
}
