﻿/**
 * @author	Nicholas Almeida
 * @version	2.01
 * @original 	http://www.javascript-coder.com
*/
var valColorError = "#FEFEDE";
var __buttonSubmit__;
var __newWidth__;
var __buttonSubmitSrc__;
var __cAlert__;
var __lang__;
var __cAlertDiv__;
var __cAlertTxt__;
var __oldFocus__;
var __cAlertShow__ = true;
function frmValidator(frmname, lang) {
    this.formobj = document.forms[frmname];
    if (!this.formobj) {
        alert('BUG: Não foi possívem acessar o formulário: ' + frmname);
        return;
    };
    if (this.formobj.onsubmit) {
        this.formobj.old_onsubmit = this.formobj.onsubmit;
        this.formobj.onsubmit = null;
    }
    else {
        this.formobj.old_onsubmit = null;
    };
    this.formobj.onsubmit = form_submit_handler;
    this.lang = __lang__ = lang;
    this.cAlert = customAlert;
    this.av = add_validation;
    this.cSubmit = change_submit;
    this.amv = addMultiVal;
    this.customValidation = set_addnl_vfunction;
    this.clearAllValidations = clear_all_validations;
    this.formobj.onreset = rABgColor;
};
function set_addnl_vfunction(functionname) {
    this.formobj.addnlvalidation = functionname;
};
function clear_all_validations() {
    for (var itr = 0; itr < this.formobj.elements.length; itr++) {
        this.formobj.elements[itr].validationset = null;
    };
};
function customAlert(d, t, s) {
	if(!s){
	    if (!gElm(d) || !gElm(t)) {
	        alert('BUG: Box id not defined or Text id not defined.');
	        return false;
	    }
	}
    else {
        __cAlert__ = true;
        __cAlertDiv__ = d;
        __cAlertTxt__ = t;
        __cAlertShow__ = s;
    }
};
function form_submit_handler() {
    for (var itr = 0; itr < this.elements.length; itr++) {
        if (this.elements[itr].validationset && !this.elements[itr].validationset.validate()) {
            return false;
        };
    };
    if (this.addnlvalidation) {
        str = ' var ret = ' + this.addnlvalidation + '()';
        eval(str);
        if (!ret)return ret;
    };
    if (__buttonSubmit__) {
        if (__lang__ == 'en') {
            stButton = 'Sending...';
        }
        else if (__lang__ == 'es') {
            stButton = 'Enviando...';
        }
        else {
            stButton = 'Enviando...';
        }
        __buttonSubmit__.title = stButton;
        if (__buttonSubmitSrc__) {
            __buttonSubmit__.src = __buttonSubmitSrc__;
        }
        else {
            __buttonSubmit__.value = stButton;
        }
        __buttonSubmit__.disabled = 'disabled';
        __buttonSubmit__.style.cursor = 'wait';
        if (__newWidth__) {
            __buttonSubmit__.style.width = __newWidth__;
        };
    }
    return true;
};
function add_validation(itemname, descriptor, errstr) {
    if (!this.formobj) {
        alert('BUG: Formulário não definido corretamente!');
        return;
    };
    var itemobj = this.formobj[itemname];
    if (!itemobj)alert('BUG: Não foi possível encontrar nehum campo com o name=' + itemname);
    if (itemobj.length && isNaN(itemobj.selectedIndex)) {
        itemobj = itemobj[0];
    };
    if (!itemobj) {
        alert('BUG: Não foi possível encontrar o campo com o nome: ' + itemname);
        return;
    };
    if (!itemobj.validationset) {
        itemobj.validationset =  new ValidationSet(itemobj);
    };
    itemobj.validationset.add(descriptor, errstr);
};
function change_submit(bt, newWidth, buttonSubmitSrc) {
    if (!this.formobj) {
        alert('BUG: Formulário não definido corretamente!');
        return;
    };
    __buttonSubmit__ = gElm(bt);
    __newWidth__ =  newWidth;
    __buttonSubmitSrc__ = buttonSubmitSrc;
};
function ValidationDesc(inputitem, desc, error) {
    this.desc = desc;
    this.error = error;
    this.itemobj =  inputitem;
    this.validate = vdesc_validate;
};
function vdesc_validate() {
    if (!validateInput(this.desc, this.itemobj, this.error)) {
        if (!__cAlert__)this.itemobj.focus();
        return false;
    };
    return true;
};
function ValidationSet(inputitem) {
    this.vSet = new Array();
    this.add = add_validationdesc;
    this.validate = vset_validate;
    this.itemobj =  inputitem;
};
function add_validationdesc(desc, error) {
    this.vSet[this.vSet.length] =  new ValidationDesc(this.itemobj, desc, error);
};
function vset_validate() {
    for (var itr = 0; itr < this.vSet.length; itr++) {
        if (!this.vSet[itr].validate()) {
            return false;
        };
    };
    return true;
};
function validateEmail(email) {
    if (email.length <= 0) {
        return true;
    };
    var splitted = email.match('^(.+)@(.+)$');
    if (splitted == null)return false;
    if (splitted[1] != null ) {
        var regexp_user = /^\"?[\w-_\.]*\"?$/;
        if (splitted[1].match(regexp_user) == null)return false;
    };
    if (splitted[2] != null) {
        var regexp_domain = /^[\w-\.]*\.[A-Za-z]{2,4}$/;
        if (splitted[2].match(regexp_domain) == null) {
            var regexp_ip = /^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
            if (splitted[2].match(regexp_ip) == null)return false;
        };
        return true;
    };
    return false;
};
function TestComparison(objValue, strCompareElement, strvalidator, strError) {
    var bRet = true;
    var objCompare = null;
    if (!objValue.form) {
        alert('BUG: Formulário não definido!');
        return false;
    };
    objCompare = objValue.form.elements[strCompareElement];
    if (!objCompare) {
        alert('BUG: Campo com o nome ' + strCompareElement + ' não encontrado!');
        return false;
    };
    var cmpstr = '';
    switch (strvalidator) {
        case 'equal':
        case 'eq':
            {
                if (objValue.value != objCompare.value) {
                    if (__lang__ == 'en') {
                        cmpstr = ' must be the same as field \"';
                    }
                    else if (__lang__ == 'es') {
                        cmpstr = ' debe ser igual al campo \"';
                    }
                    else {
                        cmpstr = ' deve ser igual ao campo \"';
                    }
                    bRet = false;
                };
                break;
            };
        case 'notequal':
        case 'noteq':
            {
                if (objValue.value.length > 0 && objCompare.value.length > 0 && objValue.value == objCompare.value) {
                    if (__lang__ == 'en') {
                        cmpstr = ' must be different from field \"';
                    }
                    else if (__lang__ == 'es') {
                        cmpstr = ' debe ser diferente del campo \"';
                    }
                    else {
                        cmpstr = ' deve ser diferente do campo \"';
                    }
                    bRet = false;
                };
                break;
            };
    };
    if (bRet == false) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Field \"' + objValue.title + '\"' + cmpstr + objCompare.title + '\".';
            }
            else if (__lang__ == 'es') {
                strError = 'El campo \"' + objValue.title + '\"' + cmpstr + objCompare.title + '\".';
            }
            else {
                strError = 'O campo \"' + objValue.title + '\"' + cmpstr + objCompare.title + '\".';
            }
            cBgColor(objValue);
        };
        boxAlert(strError, objValue);
    };
    if (bRet)rBgColor(objValue);
    return bRet;
};
function TestSelMin(objValue, strMinSel, strError) {
    var bret = true;
    var objcheck = objValue.form.elements[objValue.name];
    var chkcount = 0;
    if (objcheck.length) {
        for (var c = 0; c < objcheck.length; c++) {
            if (objcheck[c].checked == '1') {
                chkcount++;
            };
        };
    }
    else {
        chkcount = (objcheck.checked == '1') ? 1 : 0;
    };
    var minsel = eval(strMinSel);
    if (chkcount < minsel) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Select at least ' + minsel + ' option(s) for field \"' + objValue.title + '\".';
            }
            else if (__lang__ == 'es') {
                strError = 'Seleccione al menos ' + minsel + ' opciones para el campo \"' + objValue.title + '\".';
            }
            else {
                strError = 'Selecione ao menos ' + minsel + ' opção(ões) para o campo \"' + objValue.title + '\".';
            }
        };
        boxAlert(strError, objValue);
        bret = false;
    };
    if (bret)rBgColor(objValue);
    return bret;
};
function TestSelMax(objValue, strMaxSel, strError) {
    var gret = true;
    var objcheck = objValue.form.elements[objValue.name];
    var chkcount = 0;
    if (objcheck.length) {
        for (var c = 0; c < objcheck.length; c++) {
            if (objcheck[c].checked == '1') {
                chkcount++;
            };
        };
    }
    else {
        chkcount = (objcheck.checked == '1') ? 1 : 0;
    };
    var maxsel = eval(strMaxSel);
    if (chkcount > maxsel) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Select at the most ' + maxsel + ' option(s) for field \"' + objValue.title + '\".';
            }
            else if (__lang__ == 'es') {
                strError = 'Seleccione como máximo ' + maxsel + ' opciones para el campo \"' + objValue.title + '\".';
            }
            else {
                strError = 'Selecione no máximo ' + maxsel + ' opção(ões) para o campo \"' + objValue.title + '\".';
            }
        };
        boxAlert(strError, objValue);
        gret = false;
    };
    if (gret)rBgColor(objValue);
    return gret;
};
function TestDontSelect(objValue, index, strError) {
    var ret = true;
    if (objValue.selectedIndex == null) {
        alert('BUG: Este comando só pode ser usado para elementos de seleção.');
        ret = false;
    }
    else if (objValue.selectedIndex == eval(index)) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Select one of the options for field \"' + objValue.title + '\".';
            }
            else if (__lang__ == 'es') {
                strError = 'Seleccione una de las opciones para el campo \"' + objValue.title + '\".';
            }
            else {
                strError = 'Selecione uma das opções para o campo \"' + objValue.title + '\".';
            }
        };
        boxAlert(strError, objValue);
        ret = false;
        cBgColor(objValue);
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function TestRequiredInput(objValue, strError) {
    var ret = true;
    if (eval(objValue.value.length) == 0) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Field \"' + objValue.title + '\" must be filled out.';
            }
            else if (__lang__ == 'es') {
                strError = 'El campo \"' + objValue.title + '\" es obligatorio.';
            }
            else {
                strError = 'O campo \"' + objValue.title + '\" é obrigatório.';
            }
        };
        boxAlert(strError, objValue);
        ret = false;
        cBgColor(objValue);
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function TestMaxLen(objValue, strMaxLen, strError) {
    var ret = true;
    if (eval(objValue.value.length) > eval(strMaxLen)) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Field \"' + objValue.title + '\" can contain up to ' + strMaxLen + ' character(s).';
                strErrorCont = 'Currently it has: ' + objValue.value.length + ' character(s).';
            }
            else if (__lang__ == 'es') {
                strError = 'El campo \"' + objValue.title + '\" puede contener hasta ' + strMaxLen + ' caracter(es).';
                strErrorCont = 'Actualmente tiene: ' + objValue.value.length + ' carácter(es).';
            }
            else {
                strError = 'O campo \"' + objValue.title + '\" pode conter no máximo ' + strMaxLen + ' caracter(es).';
                strErrorCont = 'Atualmente ele tem: ' + objValue.value.length + ' caracter(es).';
            }
        };
        cBgColor(objValue);
        boxAlert(strError + '\n' + strErrorCont, objValue);
        ret = false;
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function TestMinLen(objValue, strMinLen, strError) {
    var ret = true;
    if (eval(objValue.value.length) < eval(strMinLen)) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Field \"' + objValue.title + '\" must contain at least ' + strMinLen + ' character(s).';
                strErrorCont = 'Currently it has: ' + objValue.value.length + ' character(s).';
            }
            else if (__lang__ == 'es') {
                strError = 'El campo \"' + objValue.title + '\" debe contener un mínimo de ' + strMinLen + ' caracter(es).';
                strErrorCont = 'Actualmente tiene: ' + objValue.value.length + ' carácter(es).';
            }
            else {
                strError = 'O campo \"' + objValue.title + '\" deve conter no mínimo ' + strMinLen + ' caracter(es).';
                strErrorCont = 'Atualmente ele tem: ' + objValue.value.length + ' caracter(es).';
            }
        };
        cBgColor(objValue);
        boxAlert(strError + '\n' + strErrorCont, objValue);
        ret = false;
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function TestInputType(objValue, strRegExp, strError, strDefaultError) {
    var ret = true;
    var charpos = objValue.value.search(strRegExp);
    if (objValue.value.length > 0 && charpos >= 0) {
        if (!strError || strError.length == 0) {
            strError = strDefaultError;
            if (__lang__ == 'en') {
                strErrorCont = 'Error of character in position: ';
            }
            else if (__lang__ == 'es') {
                strErrorCont = 'Error en el carácter en la posición: ';
            }
            else {
                strErrorCont = 'Erro no caracter na posição: ';
            }
        };
        cBgColor(objValue);
        boxAlert(strError + '\n' + strErrorCont + eval(charpos + 1) + '.', objValue);
        ret = false;
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function TestEmail(objValue, strError) {
    var ret = true;
    if (objValue.value.length > 0 && !validateEmail(objValue.value)) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = '\"' + objValue.value + '\" is not a valid e-mail for field \"' + objValue.title + '\".';
            }
            else if (__lang__ == 'es') {
                strError = '\"' + objValue.value + '\" no es un e-mail válido para el campo \"' + objValue.title + '\".';
            }
            else {
                strError = '\"' + objValue.value + '\" não é um e-mail válido para o campo \"' + objValue.title + '\".';
            }
        };
        boxAlert(strError, objValue);
        ret = false;
        cBgColor(objValue);
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function TestRegExp(objValue, strRegExp, strError) {
    var ret = true;
    if (objValue.value.length > 0 && !objValue.value.match(strRegExp)) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Invalid character found in field \"' + objValue.title + '\".';
            }
            else if (__lang__ == 'es') {
                strError = 'Carácter no permitido encontrado en el campo \"' + objValue.title + '\".';
            }
            else {
                strError = 'Caracter não permitido encontrado no campo \"' + objValue.title + '\".';
            }
        };
        boxAlert(strError, objValue);
        ret = false;
        cBgColor(objValue);
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function TestSelectOneRadio(objValue, strError) {
    var objradio = objValue.form.elements[objValue.name];
    if (!objradio)alert('BUG: Não foi possível encotrar nenhum radioButton no formulário.\nCertifique-se de que eles existem e que tem o atributo \"name\".');
    var one_selected = false;
    for (var r = 0; r < objradio.length; r++) {
        if (objradio[r].checked == '1') {
            one_selected = true;
            break;
        };
    };
    if (false  == one_selected) {
        if (!strError || strError.length == 0) {
            if (__lang__ == 'en') {
                strError = 'Select one of the options for field  \"' + objValue.title + '\".';
            }
            else if (__lang__ == 'es') {
                strError = 'Seleccione una de las opciones para el campo \"' + objValue.title + '\".';
            }
            else {
                strError = 'Selecione uma das opções para o campo \"' + objValue.title + '\".';
            }
        };
        boxAlert(strError, objValue);
    };
    return one_selected;
};
function TestCpf(v) {
    if (v == "" || v == "" || v == "" || v == "" || v == "" || v == "" || v == "" || v == "" || v == "" || v == "")return false;
    if (!v)return true;
    var s = null;
    var r = null;
    if (v.length != 11 || v.match(/1{11};|2{11};|3{11};|4{11};|5{11};|6{11};|7{11};|8{11};|9{11};|0{11};/))return false;
    s = 0;
    for (var i = 0; i < 9; i++)s += parseInt(v.charAt(i)) * (10 - i); r = 11 - (s % 11); if (r == 10 || r == 11)r = 0; if (r != parseInt(v.charAt(9)))return false; s = 0; for (var i = 0; i < 10; i++)s += parseInt(v.charAt(i)) * (11 - i); r = 11 - (s % 11); if (r == 10 || r == 11)r = 0; if (r != parseInt(v.charAt(10)))return false; return true; ; }; function TestCnpj(v) {
    if (!v)return true;
    var m =  new Array('543298765432', '6543298765432');
    var d =  new Array(0, 0);
    for (var t = 0; t < 2; t++) {
        for (x = 0; x < 13; x++) {
            if ((t == 0 && x != 12) || t == 1)d[t] += (parseInt(v.slice(x, x + 1)) * parseInt(m[t].slice(x, x + 1)));
        };
        d[t] = (d[t] * 10) % 11;
        if (d[t] == 10)d[t] = 0;
    };
    return (d[0] == parseInt(v.slice(12, 13)) && d[1] == parseInt(v.slice(13, 14)));
};
function TestFile(v, ext) {
    if (!v)return true;
    var e = ext.split("00000000000111111111112222222222233333333333444444444445555555555566666666666777777777778888888888899999999999,");
    for (var i = 0; i < e.length; i++) {
        if (v.substr(v.lastIndexOf('.') + 1) == e[i])return true;
    };
    return false;
};
function replaceAll(str, replacements) {
    for (i = 0; i < replacements.length; i++) {
        var idx = str.indexOf(replacements[i][0]);
        while (idx >  - 1) {
            str = str.replace(replacements[i][0], replacements[i][1]);
            idx = str.indexOf(replacements[i][0]);
        };
    };
    return str;
};
function addMultiVal() {
    var arrPar = [];
    for (var i = 0; i < arguments.length; i++) {
        arrPar[i] = arguments[i];
    };
    var fld = arrPar[0];
    arrPar = arrPar.slice(1, arrPar.length);
    for (var a = 0; a < arrPar.length; a++) {
        this.av(fld, arrPar[a]);
    };
    delete arrPar, fld;
};
function validateInput(strValidateStr, objValue, strError) {
    var ret = true;
    var epos = strValidateStr.search('=');
    var command = '';
    var cmdvalue = '';
    if (epos >= 0) {
        command = strValidateStr.substring(0, epos);
        cmdvalue = strValidateStr.substr(epos + 1);
    }
    else {
        command = strValidateStr;
    };
    switch (command) {
        case 'req':
        case 'required':
            {
                ret = TestRequiredInput(objValue, strError);
                break;
            };
        case 'maxlength':
        case 'maxlen':
            {
                ret = TestMaxLen(objValue, cmdvalue, strError);
                break;
            };
        case 'minlength':
        case 'minlen':
            {
                ret = TestMinLen(objValue, cmdvalue, strError);
                break;
            };
        case 'alnum':
        case 'alphanumeric':
            {
                if (__lang__ == 'en') {
                    strTxtError = 'Only alphanumeric characters (letters and numbers) are valid for field';
                }
                else if (__lang__ == 'es') {
                    strTxtError = 'Sólo caracteres alfanuméricos (letras y números) son permitidos para el campo';
                }
                else {
                    strTxtError = 'Apenas caracteres alfanuméricos(letras e números) são permitidos para o campo';
                }
                ret = TestInputType(objValue, '[^A-Za-z0-9áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇ\\s]', strError, strTxtError + ' \"' + objValue.title + '\".');
                break;
            };
        case 'num':
        case 'number':
        case 'numeric':
            {
                if (__lang__ == 'en') {
                    strTxtError = 'Only numeric characters (numbers) are valid for field';
                }
                else if (__lang__ == 'es') {
                    strTxtError = 'Sólo caracteres numéricos (números) son permitidos para el campo';
                }
                else {
                    strTxtError = 'Apenas caracteres numéricos(números) são permitidos para o campo';
                }
                ret = TestInputType(objValue, '[^0-9]', strError, strTxtError + ' \"' + objValue.title + '\".');
                break;
            };
        case 'letters':
        case 'let':
            {
                if (__lang__ == 'en') {
                    strTxtError = 'Only letters are valid for field';
                }
                else if (__lang__ == 'es') {
                    strTxtError = 'Sólo letras son permitidas para el campo';
                }
                else {
                    strTxtError = 'Apenas letras são permitidas para o campo';
                }
                ret = TestInputType(objValue, '[^A-Za-záàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇ\\s]', strError, strTxtError + ' \"' + objValue.title + '\".');
                break;
            };
        case 'restrict':
        case 'rest':
            {
                if (__lang__ == 'en') {
                    strTxtError = 'Only letters, numbers, \"-\" and \"_\" are valid for field';
                }
                else if (__lang__ == 'es') {
                    strTxtError = 'Sólo letras, números, \"-\" y \"_\" son permitidos para el campo';
                }
                else {
                    strTxtError = 'Apenas letras, números, \"-\" e \"_\"  são permitidas para o campo';
                }
                ret = TestInputType(objValue, '[^A-Za-z0-9-_]', strError, strTxtError + ' \"' + objValue.title + '\".');
                break;
            };
        case 'email':
            {
                ret = TestEmail(objValue, strError);
                break;
            };
        case "":
        case "":
            {
                if (isNaN(objValue.value)) {
                    if (__lang__ == 'en') {
                        strTxtError = 'Only numeric characters (numbers) are valid for field';
                    }
                    else if (__lang__ == 'es') {
                        strTxtError = 'Sólo caracteres numéricos (números) son permitidos para el campo';
                    }
                    else {
                        strTxtError = 'Apenas caracteres numéricos(números) são permitidos para o campo';
                    }
                    boxAlert(strTxtError + ' \"' + objValue.title + '\".', objValue);
                    cBgColor(objValue);
                    return false;
                };
                if (eval(objValue.value) > eval(cmdvalue)) {
                    if (!strError || strError.length == 0) {
                        if (__lang__ == 'en') {
                            strError = 'Field \"' + objValue.title + '\" must be smaller or equal than: ' + cmdvalue + '.';
                        }
                        else if (__lang__ == 'es') {
                            strError = 'El campo \"' + objValue.title + '\" debe ser menor o igual a: ' + cmdvalue + '.';
                        }
                        else {
                            strError = 'O campo \"' + objValue.title + '\" deve ser menor ou igual a: ' + cmdvalue + '.';
                        }
                    };
                    boxAlert(strError, objValue);
                    cBgColor(objValue);
                    return false;
                };
                break;
            };
        case "":
        case "":
            {
                if (isNaN(objValue.value)) {
                    if (__lang__ == 'en') {
                        strTxtError = 'Only numeric characters (numbers) are valid for field';
                    }
                    else if (__lang__ == 'es') {
                        strTxtError = 'Sólo caracteres numéricos (números) son permitidos para el campo';
                    }
                    else {
                        strTxtError = 'Apenas caracteres numéricos(números) são permitidos para o campo';
                    }
                    boxAlert(strTxtError + ' \"' + objValue.title + '\".', objValue);
                    cBgColor(objValue);
                    return false;
                };
                if (eval(objValue.value) < eval(cmdvalue)) {
                    if (!strError || strError.length == 0) {
                        if (__lang__ == 'en') {
                            strError = 'Field \"' + objValue.title + '\" must be bigger or equal than: ' + cmdvalue + '.';
                        }
                        else if (__lang__ == 'es') {
                            strError = 'El campo \"' + objValue.title + '\" debe ser mayor o igual a: ' + cmdvalue + '.';
                        }
                        else {
                            strError = 'O campo \"' + objValue.title + '\" deve ser maior ou igual a: ' + cmdvalue + '.';
                        }
                    };
                    boxAlert(strError, objValue);
                    cBgColor(objValue);
                    return false;
                };
                break;
            };
        case 'regex':
            {
                ret = TestRegExp(objValue, cmdvalue, strError);
                break;
            };
        case 'dontselect':
            {
                ret = TestDontSelect(objValue, cmdvalue, strError);
                break;
            };
        case 'selmin':
            {
                ret = TestSelMin(objValue, cmdvalue, strError);
                break;
            };
        case 'selmax':
            {
                ret = TestSelMax(objValue, cmdvalue, strError);
                break;
            };
        case 'selone':
            {
                ret = TestSelectOneRadio(objValue, strError);
                break;
            };
        case 'equal':
        case 'eq':
        case 'notequal':
        case 'noteq':
            {
                return TestComparison(objValue, cmdvalue, command, strError);
                break;
            };
        case 'cpf':
            {
                var tmpValue = replaceAll(objValue.value, [['.', ''], ['/', ''], ['-', ''], [' ', '']]);
                ret = TestCpf(tmpValue);
                if (!ret) {
                    if (__lang__ == 'en') {
                        strErrorTxt = 'is not a valid CPF number for field';
                    }
                    else if (__lang__ == 'es') {
                        strErrorTxt = 'no es un número de CPF válido para el campo';
                    }
                    else {
                        strErrorTxt = 'não é um número de CPF válido para o campo';
                    }
                    boxAlert('\"' + objValue.value + '\" ' + strErrorTxt + ' \"' + objValue.title + '\".', objValue);
                    cBgColor(objValue);
                }
                else rBgColor(objValue);
                delete tmpValue;
                break;
            };
        case 'cnpj':
            {
                var tmpValue = replaceAll(objValue.value, [['.', ''], ['/', ''], ['-', ''], [' ', '']]);
                ret = TestCnpj(tmpValue);
                if (!ret) {
                    if (__lang__ == 'en') {
                        strErrorTxt = 'is not a valid CNPJ number for field';
                    }
                    else if (__lang__ == 'es') {
                        strErrorTxt = 'no es un número de CNPJ válido para el campo';
                    }
                    else {
                        strErrorTxt = 'não é um número de CNPJ válido para o campo';
                    }
                    boxAlert('\"' + objValue.value + '\" ' + strErrorTxt + ' \"' + objValue.title + '\".', objValue);
                    cBgColor(objValue);
                }
                else rBgColor(objValue);
                delete tmpValue;
                break;
            };
        case 'file':
            {
                ret = TestFile(objValue.value.toLowerCase(), cmdvalue);
                if (!ret) {
                    if (__lang__ == 'en') {
                        boxAlert('Field \"' + objValue.title + '\" allows only \".' + cmdvalue + ' \"archives.', objValue);
                    }
                    else if (__lang__ == 'es') {
                        boxAlert('El campo \"' + objValue.title + '\" permite sólo archivos con la extensión \".' + cmdvalue + ' \".', objValue);
                    }
                    else {
                        boxAlert('O campo \"' + objValue.title + '\" permite somente arquivos com a extensão \".' + cmdvalue + ' \".', objValue);
                    }
                    cBgColor(objValue);
                }
                else rBgColor(objValue);
                delete tmpValue;
                break;
            };
    };
    if (ret)rBgColor(objValue);
    return ret;
};
function cBgColor(o) {
    o.style.backgroundColor = valColorError;
};
function rBgColor(o) {
    o.style.backgroundColor = "";
};
function rABgColor() {
    for (var itr = 0; itr < this.elements.length; itr++) {
        rBgColor(this.elements[itr]);
    };
};
function only(t, o, e) {
    if (window.event)key = window.event.keyCode;
    else if (e)key = e.which;
    else return true;
    S = (o) ? o : '';
    if (t == 'num' || t == 'number' || t == 'numeric')S += '0123456789';
    if (t == 'alnum' || t == 'alphanumeric')S += 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZáàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇ 0123456789';
    if (t == 'let' || t == 'letters')S += 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZáàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇ ';
    if (t == 'rest' || t == 'restrict')S += 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
    if (t == 'email')S += 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789@-_.';
    if (key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27)return true;
    else if (S.indexOf(String.fromCharCode(key)) !=- 1)return true;
    else return false;
};
function not(S, e) {
    if (window.event)key = window.event.keyCode;
    else if (e)key = e.which;
    else return true;
    if (!S)return false;
    else if (key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27)return true;
    else if (S.indexOf(String.fromCharCode(key)) !=- 1)return false;
    else return true;
};
function jump(o, e) {
    if (window.event)key = window.event.keyCode;
    else if (e)key = e.which;
    else return true;
    if (key == 9 || key == 2 || key == 16)return false;
    if (o.value.length == o.maxLength) {
        for (var i = 0; i < o.form.length; i++) {
            if (o.form[i] == o && o.form[i + 1]) {
                if (o.form[i + 1])o.form[i + 1].focus();
                break;
            };
        }
    };
};
function checkReset(f) {
    if (__lang__ == 'en') {
        strErrorTxt = 'All data submitted will be deleted.\nTo delete all data click \"OK\".\nTo continue submitting information click \"Cancel\".';
    }
    else if (__lang__ == 'es') {
        strErrorTxt = 'Todos los datos registrados serán borrados.\nPara borrar todos los datos haga clic en \"OK\".\nPara continuar registrando haga clic en \"Cancelar\".';
    }
    else {
        strErrorTxt = 'Todos os dados preenchidos serão apagados.\nPara apagar todos os dados clique em \"OK\".\nPara continuar preenchendo clique em \"Cancelar\".';
    }
    if (confirm(strErrorTxt))gElm(f).reset();
};
function clearMe(w, s) {
    (w.value == s) ? w.value = '' : 0;
};
function leaveMe(w, s) {
    (w.value.length == 0) ? w.value = s : 0;
};
function boxAlert(x, f) {
    if (__cAlert__) {
        if (__cAlertShow__) {
            //openBox(__cAlertDiv__);
			var boxCode = [
				'<div class="w570">',
					'<h2 class="titSecao titAtencao">',
						'Atenção',
					'</h2>',
					'<br class="cb" />',
					'<div id="feedLogin" class="feedLoginLolly">',
						'<p id="txtFeed"></p>',
					'</div>',
					'<p>',
						'<a href="#" onclick="closeBox(\'defaultLollyId\');return false;">',
							'<img src="../Imagens/bt_fechar_validacao.gif" alt="Fechar" title="Fechar" /><br />',
						'</a>',
					'</p>',
				'</div>'
			];
			boxCode = boxCode.join('');
			Box.open({
				content:boxCode,
				onOpen:function(){
					gElm(__cAlertTxt__).innerHTML = x;
				},
				onClose:function(){
					//gElm(__cAlertTxt__).innerHTML = '';
				}
			});
			
        }
        else {
            sDiv(__cAlertDiv__);
            f.focus();
			gElm(__cAlertTxt__).innerHTML = x;
        }
        __oldFocus__ = f;
    }
    else {
        alert(x);
    }
};
function oldFocus() {
    __oldFocus__.focus();
};