﻿/**
 * @author	Nicholas Almeida
 * @version	2.2
 * @original 	http://www.javascript-coder.com
*/
var valColorError = "#FEFEDE";
var __buttonSubmit__;
var __newWidth__;
var __buttonSubmitSrc__;
var __lang__;
var __oldFocus__;
var __onErrorHandler__;
var __onItemValidHandler__;
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.onError = onErrorHandler;
    this.onItemValid = onItemValidHandler;
    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 onItemValidHandler(func) {
	__onItemValidHandler__ = func;
};
function onErrorHandler(func) {
	__onErrorHandler__ = func;
};
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 (typeof(this.addnlvalidation) == 'function') {
		var ret = this.addnlvalidation();
        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)) {
        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(scope){
	scope = scope || window;
	var bissexto = function(year){
		return year%4==0 && year%100!=0 || year%400==0;
	};
	var dayByMonth = [null,31,28,31,30,31,30,31,31,30,31,30,31];
	scope.validDate = function(year, month, day){
		return bissexto(year) && month==2 ? day<=29 : day <= dayByMonth[month];
	}
})(window);
function TestDate(objValue, strError) {
	var checaData = validDate(Number(objValue.split("/")[2]), Number(objValue.split("/")[1]), Number(objValue.split("/")[0]));
	
	if (false  == checaData) {
        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 = 'Data Invalida no Campo \"' + objValue.title + '\".';
            }
        };
        boxAlert(strError, objValue);
    };
};

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 'regex':
        case 'regexp':
            {
                ret = TestRegExp(objValue, cmdvalue, strError);
                break;
            };
        case 'dontselect':
            {
                ret = TestDontSelect(objValue, cmdvalue, strError);
                break;
            };
        case 'selmin':
            {
                ret = TestSelMin(objValue, cmdvalue, strError);
                break;
            };
		case 'date':
            {
                ret = TestDate(objValue, 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.parentNode.className += " error";
	if(!__onErrorHandler__){
		o.style.backgroundColor = valColorError;
	}
};
function rBgColor(o) {
	//o.parentNode.className = o.parentNode.className.replace(/error/gi, "");
    //o.style.backgroundColor = "";
	if(__onItemValidHandler__){
		__onItemValidHandler__(o);
	} else {
		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(__onErrorHandler__) {
		__onErrorHandler__(f, x);
	} else {
		alert(x);
	}
};
function oldFocus() {
    __oldFocus__.focus();
};