/* 
 * PROCERGS - Companhia de Processamento de Dados do Estado do Rio Grande do Sul
 */
var enableOnSubmit = true;			//validaform deve habilitar campos disabled ao submeter?
var customMsg      = '';			//mensagem de erro personalizada
var joinMessages   = false;            //Exibe todas as mensagens de uma vez

function validaForm(form, vetor, customMessage){

    //os parametros passados para a funcao: nome_do_campo|tipo_de_validacao|"label"_para_campo.
    //Para validar mais de um campo, passa-los separados por virgulas.
    //O parâmetro customMessage serve para alerts personalizados
    strMessages = '';
    var i, campos;
    if ( customMessage ) {
        customMsg = customMessage;
    }

    if(vetor.indexOf(",") == -1) {
        campos = vetor;
        lastField = true;
        getParams(form, campos);
    } else {
        tmp = vetor.split(",");
        campos = new Array();
        for (i=0; i < tmp.length; i++) {
            if (tmp[i]) {
                campos.push(tmp[i]);
            }
        }

        for (i=0; i < campos.length; i++) {
            if (campos[i]) {
                lastField = (i == (campos.length-1) ? campos[i] : "");
                getParams(form, campos[i]);
                if ( erro && !joinMessages) {
                    break;
                }
            }
        }
    }

    // Força msg de erro quando msgs são agrupadas mas o ultimo campo não gera erro
    if ( !erro && strMessages) {
        errorMsg();
        erro = true;
    }

    if ( !erro && enableOnSubmit ) {
        enableAll(form);
    }
    return !(erro);
}

/************************************************************************************************
*  Responsável pela chamada de cada um dos tipos de validação									*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function getParams(form, campos) {

    var params = campos.split("|");
    var tipoValidacao = params[1].toUpperCase();

    //frm = $(nomeForm);
    var field = form.elements[params[0]];
    //var field = $('#' + params[0]);
    //alert(params[0] +'\n'+ field +'\n'+ tipoValidacao);
    var label = params[2];
    var disabled = !isEnabled(field);

    if ( !disabled) {

        switch (tipoValidacao) {

            case 'ISNULL':
                //Valida se o campo está em branco
                if ( (field.length && !field.type) || field.type == 'checkbox' ) {
                    xNull(field, label);
                } else {
                    isNull(field, label);
                }
                break;

            case 'ISXNULL':
                //Valida radios e checkboxes
                xNull(field, label);
                break;

            case 'ISEMAIL':
            case 'VT_MAIL':
                //Valida se o campo contém um e-mail válido
                isEmail(field, label);
                break;

            case 'ISPASSWORD':
            case 'PASSWORD':
            case 'VT_PASSWORD':
                //Valida se dois campos contém o mesmo valor
                field2 = field.form.elements[params[2]];
                compareFields(field, field2);
                break;

            case 'ISNUMBER':
            case 'VT_NUMBER':
                //Valida se o campo contém um valor numérico
                isNumeric(field, label);
                break;

            case 'ISNATURAL':
            case 'VT_NATURAL':
                //Valida se o campo contém um valor positivo
                isNatural(field, label);
                break;

            case 'LEN':
                //Valida se o length do campo é igual ao parâmetro "requiredLen" da tag <input>
                Len(field, label);
                break;

            case 'ISCPF':
            case 'VT_CPF':
                //Valida se é um cpf válido
                isCPF(field, label);
                break;

            case 'ISCNPJ':
            case 'ISCGC':
            case 'VT_CNPJ':
                //Valida se é um cgc válido
                isCGC(field, label);
                break;

            case 'ISTIME':
            case 'VT_TIME':
                //Valida se é um horário no formato hh:mm
                isTime(field, label);
                break;

            case 'ISDATE':
            case 'VT_DATE':
                //Valida se é uma data no formato dd/mm/aa
                isDate(field, label);
                break;

            case 'MAXLEN':
                //MaxLength(para textareas)
                maxLen(field, label);
                break;

            case 'ISRG':
                //Valida se é um rg válido
                isRG(field.value);
                break;

            case 'ISCEP':
            case 'VT_CEP':
                //Valida se é um cpf válido
                isCEP(field,label);
                break;

            case 'ISIE':
                //Valida se é uma IE válida
                isIE(field,label);
                break;

            case 'ISWORD':
            case 'VT_WORD':
                //Valida campos de username
                isWord(field, label);
                break

            case 'ISGREATER':
            case 'VT_GREATER':
                //Verifica se o valor campo eh maior do q determinado valor
                isGreater(field, label, params[3]);
                break;
        }
    }
}

/************************************************************************************************
*  Habilita todos os campos antes do submit do form												*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 06/02/2002 - 14:53																*
************************************************************************************************/
function enableAll(oForm) {
    for (z=0; z < oForm.elements.length; z++) {
        if ( oForm.elements[z].disabled ) {
            vFormEnabled[vFormEnabled.length] = oForm.elements[z];
            oForm.elements[z].disabled = false;
        }
    }
}


/************************************************************************************************
*  Desabilita todos os campos habilitados por enableall											*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 06/02/2002 - 14:53																*
************************************************************************************************/
function rollback() {
    for (i=0; i<vFormEnabled.length; i++) {
        vFormEnabled[i].disabled = true;
    }
}



/************************************************************************************************
*  Verifica se um campo estah disabled ou nao													*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 11/09/2003 - 14:16																*
************************************************************************************************/
function isEnabled(field) {
    if ( field.length && !field.type ) {
        for (var i=0; i<field.length; i++) {
            if ( !field[i].disabled ) {
                return true;
            }
        }
        return false;
    } else {
        return !field.disabled;
    }
}


/************************************************************************************************
*  Maxlength para campos textarea																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function maxLen(campo, alias) {

    var msg;
    erro = false;

    if (campo.value.length > campo.maxlength) {
        erro = true;
        msg = "O campo '"+ alias +"' deve conter, no máximo, "+ campo.maxlength +" caracteres!";
        errorMsg(campo, alias, msg);
    }
    return !erro;

}



/************************************************************************************************
*  Validação de campos username																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 30/01/2003 - 17:44																*
************************************************************************************************/
function isWord(campo, alias) {

    erro = false;
    var re = /^[a-zA-Z_][a-zA-Z_0-9]+$/;
    var msg;

    if ( campo.value.match(re) == null ) {
        erro = true;
        msg = "O campo '"+ alias +"' não deve conter espaços!";
        errorMsg(campo, alias, msg);
    }
    return !erro;

}


/************************************************************************************************
*  Comparação se campos senha																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function compareFields(field1, field2, msg) {

    erro = false;
    if (!msg) {
        msg = 'As senhas digitadas não conferem!';
    }
    if (field1.value != field2.value) {
        erro = true;
        errorMsg(field1, '', msg);
    }
    return !erro;

}

/************************************************************************************************
*  auto-complete para campos de CEP																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function setCep() {

    var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46);
    var fld = window.event.srcElement;
    var frm = fld.form;
    var str = fld.value.replace(/\-/g,'');

    if (str) {
        if ( !inArray(ignoreKeys, window.event.keyCode) ) {
            if (str.length == 5)
                str += '-';
            else if (str.length > 5)
                str = str.substr(0,5) +'-'+ str.substr(5,3);
            fld.value = str;
            if (str.length == 9) focusNext(fld);
        }
    }
}


/************************************************************************************************
*  Validação de CEO																				*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isCEP(campo, alias){

    var str;
    var msg;
    erro = false;
    str = trim(campo.value);

    if (str) {
        var re = /^[0-9]{8}$/ig;
        if ( !str.match(re) ) {

            erro = true;
            msg = "O campo '"+ alias +"' não contém um CEP válido!";
            errorMsg(campo, alias, msg);

        }
    }
    return !erro;
}



/************************************************************************************************
*  Validação de CGC																				*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isCNPJ(cnpj) {
    return isCGC(cnpj);
}



function isCGC(campo, alias) {

    var calcCGC;
    var s1;
    var s2;
    var i;
    var soma;
    var digito;
    var result;
    var cgc = campo.value;

    s1 = cgc;

    if (s1 == '') {
        return true;
    }

    if (s1.length != 14) {
        if(customMsg){
            errorMsg(campo, alias, customMsg);
        } else	{
            errorMsg(campo, alias,  'O campo '+ alias +' deve conter 14 dígitos.');
        }
        erro = true;
        return false;
    }
    if (s1 == '00000000000000') {
        if(customMsg){
            errorMsg(campo, alias, customMsg);
        } else	{
            errorMsg(campo, alias,  'O campo '+ alias +' é inválido.');
        }
        erro = true;
        return false;
    }
    calcCGC = s1.substring(0, 12);

    //  Cálculo do 1º dígito
    soma = 0;
    for (i = 1; i <= 4; i++) {
        soma = soma + (calcCGC.charAt(i-1) * (6 - i));
    }
    for (i = 1; i <= 8; i++) {
        soma = soma + (calcCGC.charAt(i + 3) * (10 - i));
    }
    digito = 11 - (soma % 11);

    if ((digito == 10) || (digito == 11))
        calcCGC = calcCGC + '0';
    else
        calcCGC = calcCGC + digito;

    // Cálculo do 2º dígito
    soma = 0;
    for (i = 1; i <= 5; i++) {
        soma = soma + (calcCGC.charAt(i-1) * (7 - i));
    }
    for (i = 1; i <= 8; i++) {
        soma = soma + (calcCGC.charAt(i + 4) * (10 - i));
    }
    digito = 11 - (soma % 11);

    if ((digito == 10) || (digito == 11))
        calcCGC = calcCGC + '0';
    else
        calcCGC = calcCGC + digito;

    if (calcCGC == s1) result = true;

    if (!result) {
        if(customMsg){
            errorMsg(campo, alias, customMsg);
        } else	{
            errorMsg(campo, alias,  'O campo '+ alias +' é um CNPJ inválido.');
        }
    }

    erro = !result;
    return result;
}

/************************************************************************************************
*  Validação de CPF																				*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isCPF(campo, alias) {

    var i;
    var soma;
    var digito;
    var calcCPF;
    var s1;
    var s2;
    var b;
    var c;
    var result;
    var cpf = campo.value;

    s1 = cpf;

    if (s1 == '') {
        return true;
    }

    if (s1.length != 11) {
        if(customMsg){
            errorMsg(campo, alias, customMsg);
        } else	{
            errorMsg(campo, alias,  'O campo '+ alias +' deve conter 11 dígitos.');
        }
        erro = true;
        return false;
    }

    // Teste se os 11 díg. são iguais
    b = true;
    c = s1.charAt(0);
    for (i = 1; i < 11; i++) {
        if ((b) && (s1.charAt(i) == c))
            b = true;
        else
            b = false;
        c = s1.charAt(i);
    }

    if (b) {
        result = false;
    } else {

        calcCPF = s1.substring(0, 9);

        // Cálculo do 1º dígito
        soma = 0;
        for (i = 1; i <= 9; i++) {
            soma = soma + (calcCPF.charAt(i-1) * (11 - i));
        }
        digito = 11 - (soma % 11);

        if ((digito== 10) || (digito == 11))
            calcCPF = calcCPF + '0';
        else
            calcCPF = calcCPF + digito;

        // Cálculo do 2º dígito
        soma = 0;
        for (i = 0; i <= 10; i++) {
            soma = soma + (calcCPF.charAt(i-1) * (12 - i));
        }
        digito = 11 - (soma % 11);

        if ((digito== 10) || (digito == 11))
            calcCPF = calcCPF + '0';
        else
            calcCPF = calcCPF + digito;

        if (calcCPF == s1)
            result = true;
        else
            result = false;
    }

    if (!result) {
        if(customMsg){
            errorMsg(campo, alias, customMsg);
        } else	{
            errorMsg(campo, alias,  'O campo '+ alias +' possui CPF inválido.');
        }
    }

    erro = !result;
    return result;
}

/************************************************************************************************
*  Validação de Inscricao Estadual																*
*  Autor: Alberto Fujita																		*
*  Data/Hora: 06/12/2004 - 11:59																*
************************************************************************************************/
function isIE(campo, alias) {
    var ie = campo.value;
    var peso = new Array(2,9,8,7,6,5,4,3,2);
    var i;
    var soma = 0;
    var modulo = 0;
    var validaIE, validaDigito;

    erro = false;

    // verifica o tamanho da string
    if ( ie.length != 10) {
        errorMsg(campo, alias,  'O campo '+ alias +' deve conter 10 dígitos.');
        erro = true;
    }
    else {

        // calcula o digito verificador
        validaIE = ie.substring(0,9);

        for (i=0; i<9; i++) {
            soma += validaIE.charAt(i) * peso[i];
        }

        modulo = 11 - (soma % 11);
        validaDigito = ie.substring(9,10);

        if ( modulo > 9 ) {
            modulo = 0;
        }

        // valida o digito de verificao
        if ( modulo != validaDigito ) {
            errorMsg(campo, alias,  'O campo '+ alias +' não contém uma Inscrição Estadual válida.');
            erro = true
        }

    }

    return !erro;
}


/************************************************************************************************
*  Validação de data																			*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isDate( campo , alias) {

    var msg;
    var str = campo.value;
    erro = true;
    arrMonths = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
    var re = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/ig;

    if ( str.match(re) ) {

        aDate = str.split('/');
        day = aDate[0]*1;
        month = aDate[1]*1;
        year = aDate[2]*1;

        if (isLeap(year)) arrMonths[2] = 29;

        if ( (day > 0) && (day <= arrMonths[month]) && (month > 0) && ( month < 13) )
            erro = false;

    } else if ( !str )
        erro = false;


    if (erro) {
        msg = 'O campo '+ alias +' deve conter uma data no formato DD/MM/AAAA';
        errorMsg(campo, alias, msg);
    }
    return !erro;
}

/************************************************************************************************
*  Verifica se eh ano bissexto (usada na funcao isDate)											*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isLeap(y) {
    var N = parseInt(y);
    return ( ( N%4==0 && N%100 !=0 ) || ( N%400==0 ));
}

/************************************************************************************************
*  Validação de e-mail																			*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isEmail(campo, alias) {

    var c;
    var msg;
    erro = false;
    strMail = campo.value;

    if (strMail) {

        //Verifica a existência de "@" e se existe alguma string antes
        if(strMail.search("@")>=1) {

            //Verifica se existe algum caracter inválido
            strMail = strMail.replace("@",".");
            arrMail = strMail.split(".");
            if(arrMail.length<3) erro = true;

            for(c=0; c<arrMail.length; c++) {
                if(erro)
                    break;
                else
                    erro = hasWeirdChars(arrMail[c]);
                if ( !arrMail[c].toString().replace(/ /g, '') )
                    erro=true;
            }
        }
        else
            erro = true;
    }

    if (erro) {
        msg = "O campo '"+ alias +"' não contém um e-mail válido!";
        errorMsg(campo, alias, msg);
    }
    return !erro;
}

/************************************************************************************************
*  Verifica existencia de caracteres inválidos em um e-mail(usada em isEmail)					*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function hasWeirdChars(str) {

    var A_Z = "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ";
    var others = A_Z + "-_";
    var i;
    var last = str.length-1;

    for (i=0;i<str.length;i++) {
        chrNow = str.charAt(i);
        if ( (i==0) || (i==last) ) {

            if ( (A_Z.indexOf(chrNow)==-1) )
                return true;

        } else {

            if (others.indexOf(chrNow)==-1)
                return true;
        }
    }
    return false;
}





/************************************************************************************************
*  Validação de campos obrigatórios																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isNull(campo, alias){

    erro = false;
    var auxText = trim(campo.value)
    var msg;

    if (auxText.length == 0) {

        erro = true;
        msg = "O campo '"+ alias +"' é obrigatorio!";
        campo.value = auxText;
        errorMsg(campo, alias, msg);

    }
    return !erro;
}



/************************************************************************************************
*  Trim																							*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function trim(str) {
    return str.replace(/^\s+/g, '').replace(/\s+$/g, '');
}




/************************************************************************************************
*  validação de campos numéricos																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isNumeric(campo, alias) {

    erro = false;
    var msg;
    var n = campo.value.replace(/\./g,'').replace(/\,/g, '.');

    if ( isNaN(n) ) {
        erro = true;
        msg = "O campo '"+ alias +"' deve conter um valor numérico!";
        errorMsg(campo, alias, msg);
    }
    return !erro;
}




/************************************************************************************************
*  validação de campos numéricos positivos														*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 14/01/2003 - 16:41																*
************************************************************************************************/
function isNatural(campo, alias) {

    erro = false;
    var msg;

    var n = campo.value.replace(',','.')*1;
    if ( !(n > 0) && campo.value) {
        erro = true;
        msg = "O campo '"+ alias +"' deve conter um valor positivo!";
        errorMsg(campo, alias, msg);
    }
    return !erro;

}


/************************************************************************************************
*  Verifica se o valor de um campo eh maior q determinado valor									*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 04/09/2003 - 11:57																*
************************************************************************************************/
function isGreater(campo, alias, value) {

    erro = false;
    var msg;
    var n = campo.value.replace(',', '.')*1;
    v2 = ( isNaN(value.replace(',', '.') * 1) ? campo.form.elements[value].value : value).replace(',', '.')*1;
    if ( campo.value && n <= v2 ) {
        erro = true;
        msg = "O valor do campo '"+ alias +"' deve ser maior que "+ v2.toString() +"!";
        errorMsg(campo, alias, msg);
    }
    return !erro;

}



/************************************************************************************************
*  Validação de campos de hora																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function isTime(campo, alias){

    erro = true;
    var msg;
    var hour = campo.value;

    if ( campo.value ) {

        if(hour.indexOf(":")) {
            arrParts = hour.split(":")
            if(arrParts.length == 2){
                hora = (arrParts[0]*1);
                mins = ('0'+ arrParts[1]*1);
                if(!(isNaN(hora)) && !(isNaN(mins))){
                    if((hora<24)&&(hora>=0)) {
                        if( (mins<60) && (mins>=0) ){
                            erro = false;
                            campo.value = Right('00'+ hora, 2) +':'+ Right('00'+ mins, 2);
                        }
                    }
                }
            }
        }

    } else {
        erro = false;
    }

    if (erro) {
        if (alias) msg = "O campo Hora '"+ alias +"' deve conter um horário válido!";
        errorMsg(campo, alias, msg);
    }

    return !erro;
}




/************************************************************************************************
*  Validação de radios e checkboxes																*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function xNull(campo, alias) {

    erro = true;
    var multiple = false;
    if (campo.length) {
        multiple = (campo[0].type != 'radio');
        for (var i=0; i<campo.length; i++) {
            if (campo[i].checked) {
                erro = false;
                break;
            }
        }
    } else if (campo.checked) {
        erro = false;
    }

    if (erro && alias) {
        msg = (multiple ? "Selecione ao menos uma opção no campo '"+ alias +"'." : "O campo '"+ alias +"' é obrigatório!");
        errorMsg(campo, alias, msg);
    }

    return !erro;
}




/************************************************************************************************
*  Tamanho mínimo de um campo																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 10/05/2001 - 13:41																*
************************************************************************************************/
function Len(campo, alias) {

    erro = false;
    var msg;

    if (campo.value.length < campo.requiredLen) {

        erro = true;
        msg = "O campo '"+ alias +"' deve conter, no mínimo, "+ campo.requiredLen +" caracteres!";
        errorMsg(campo, alias, msg);

    }
    return !erro;
}



/************************************************************************************************
*  Exibe mensagem de erro																		*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 11/12/2002 - 14:40																*
************************************************************************************************/
function errorMsg(oFld, alias, strMsg) {
    if ( strMsg || !erro) {
        var customized = (customMsg ? customMsg.replace(FLAG_LABEL, alias) : strMsg);
        if ( joinMessages ) {
            strMessages += (strMessages && customized ? '\n' : '') + (customized ? customized : '');
            if ( lastField ) {
                alert(strMessages);
            }
        } else {
            alert(customized);
            setFocus(oFld);
        }
    }
}



/************************************************************************************************
*  Seta o foco no campo onde ocorreu o erro														*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 11/12/2002 - 14:40																*
************************************************************************************************/
function setFocus(oFld) {
    try {
        var strType = oFld.type.toLowerCase();
        if ( strType == 'text' ) oFld.select();
        if ( strType != 'hidden' ) oFld.focus();
    } catch (err) {
        return false;
    }
}


/************************************************************************************************
*  auto-complete para campos de Hora															*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 26/02/2003 - 18:49																*
************************************************************************************************/
function setTime(fld, autoComplete) {

    var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46);
    if (!fld) fld = window.event.srcElement;
    var frm = fld.form;
    var str = fld.value.replace(/[^\d]/g,'');
    if (autoComplete) fld.onblur = setTimeComplete;

    if (str) {
        if ( !inArray(ignoreKeys, window.event.keyCode) ) {
            if (str.length == 2)
                str += ':';
            else if (str.length > 2)
                str = str.substr(0,2) +':'+ str.substr(2,2);
            fld.value = str;
            if (str.length == 5) focusNext(fld);
        }
    } else fld.value = '';
}



/************************************************************************************************
*  auto-complete para campos de Hora															*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 26/02/2003 - 18:49																*
************************************************************************************************/
function setTimeComplete(fld) {
    if (!fld) fld = window.event.srcElement;
    str = fld.value;
    if (str) {
        tmp = str.split(':');
        str = Right('00'+ tmp[0], 2);
        str += ':'+ Right('00'+ (tmp.length == 2 ? tmp[1] : ''), 2);
        fld.value = str;
    }
}



/************************************************************************************************
*  auto-complete para campos de Data															*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 26/02/2003 - 18:49																*
************************************************************************************************/
function setDate(fld, autoComplete) {
    var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46);
    str = fld.value.replace(/\D/g,'');
    if (str) {
        if ( !inArray(ignoreKeys, window.event.keyCode) ) {
            var s1 = str.substr(0,2);
            var s2 = str.substr(2,2);
            var s3 = str.substr(4,4);
            str = s1 +(s1.length==2 ? '/' : '') + s2 + (s2.length==2 ? '/' : '') + s3;
            fld.value = str;
            if ( autoComplete ) {
                setDateComplete(fld);
                str = fld.value;
            }
        /*if ( str.match(/^\d{2}\/\d{2}\/\d{4}$/) ) {
				focusNext(fld);
			}*/
        }
    }
}



/************************************************************************************************
*  auto-complete para campos float																*
*  usar no onKeyUp do campo																		*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 29/08/2003 - 10:32																*
************************************************************************************************/
function setFloat(campo, precision, ev) {

    if (!campo.value) return false;
    if ( !precision || isNaN(precision) ) {
        precision = 2;
    }

    if ( !campo.onkeypress ) {
        campo.onkeypress = stripNaN;
    }

    var tammax = 18;
    var result;

    vr = intval(campo.value.replace(/\D/g, '')).toString();
    tam = (vr.length <= tammax ? vr.length : tammax);

    if ( tam <= precision) {
        result = '0,'+ Right(strRepeat('0', precision) + vr, precision);
    } else {
        result = '';
        init = tam - precision - 1;
        for (var i = init; i >= 0; i--) {
            result = vr.charAt(i) + result;
            if ( ((init-i+1) % 3 == 0) && (i != 0) ) {
                result = '.' + result;
            }
        }
        result += ',' + vr.substr(init + 1);
    }
    campo.value = result;

    if ( tam > tammax ) {
        if (isGecko()) {
            return false;
        } else {
            ev.returnValue = false;
        }
    }
    return true;
}




/************************************************************************************************
*  auto-complete para campos de Data															*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 26/02/2003 - 18:49																*
************************************************************************************************/
function setDateComplete(fld) {
    if (!fld) fld = window.event.srcElement;
    str = fld.value;
    var re = /^\d{2}\/\d{2}\/\d{2}$/i;
    if ( str.match(re) )
        fld.value = str.replace(/(\d{2})$/i, '20$1');
}




/************************************************************************************************
*  Seta mascara em campos texto																	*
*  Autor: Carlos Eduardo Maciel																	*
*  Data/Hora: 15/01/2004 - 20:12																*
************************************************************************************************/
function maskNumber(field, strMask) {

    strMask     = strMask.replace(/\d/g, '0');
    var size        = strMask.length;
    var strValue    = field.value.replace(/\D/g, '');
    var digPointer  = 0;
    var maskPointer = 0;

    for (i=0; i<size; i++) {
        if (strMask.charAt(i) == '0' && digPointer < strValue.length) {
            tmp = strMask.substr(0, i) + strValue.charAt(digPointer++) + strMask.substr(i+1, size);
            strMask = tmp;
            maskPointer = i;
        }
    }

    // Se digitou alguma coisa
    if (maskPointer) {
        for (i=maskPointer+1; i<size; i++) {
            if (strMask.charAt(i) != '0') {
                maskPointer++;
            } else {
                break;
            }
        }
    }

    field.value = ( strValue ? strMask.substr(0, maskPointer+1) : '');

    if (field.value.length == size) {
        focusNext(field);
    }
}

function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

