/*
 * @author	Nicholas Almeida, www.fbiz.com.br
 * @version	1.3
 * @original http://www.javascript-coder.com
*/
var valColorError = "#FEFEDE";
var __buttonSubmit__;var __newWidth__;var __buttonSubmitSrc__;function frmValidator(frmname){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.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 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__){__buttonSubmit__.title = 'Enviando...';if(__buttonSubmitSrc__){__buttonSubmit__.src = __buttonSubmitSrc__;}else{__buttonSubmit__.value = 'Enviando...';}__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){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){cmpstr = ' deve ser diferente do campo \"';bRet = false;};break;};};if(bRet==false){if(!strError || strError.length==0){strError = 'O campo \"' + objValue.title + '\"' + cmpstr + objCompare.title + '\".'; cBgColor(objValue);};alert(strError);};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) { strError = 'Selecione ao menos ' + minsel + ' opção(ões) para o campo \"' + objValue.title + '\".';};alert(strError); 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) { strError = 'Selecione no máximo ' + maxsel + ' opção(ões) para o campo \"' + objValue.title + '\".';};alert(strError); 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) { strError = 'Selecione uma das opções para o campo \"' + objValue.title + '\".'; };                                                        alert(strError); 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) { strError = 'O campo \"' + objValue.title + '\" é obrigatório.'; };cBgColor(objValue);alert(strError); ret=false; };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) { strError = 'O campo \"' + objValue.title + '\" pode conter no máximo '+ strMaxLen +' caracter(es).'; };alert(strError + '\nAtualmente ele tem: ' + objValue.value.length + ' caracter(es).'); 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) { strError = 'O campo \"' + objValue.title + '\" deve conter no mínimo ' + strMinLen + ' caracter(es).'; };alert(strError + '\nAtualmente ele tem: ' + objValue.value.length + ' caracter(es).'); 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;};alert(strError + '\nErro no caracter na posição: ' + eval(charpos+1)+'.'); 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) { strError = '\"' + objValue.value+'\" não é um e-mail válido para o campo \"' + objValue.title + '\".'; };alert(strError); ret = false; };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) { strError = 'Caracter não permitido encontrado no campo \"' + objValue.title + '\".';};alert(strError); 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) {strError = 'Selecione uma das opções para o campo \"'+objValue.title+'\".'; };alert(strError);};return one_selected;};function TestCpf(v) {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(",");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.push(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': { ret = TestInputType(objValue,'[^A-Za-z0-9áàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇ\\s]',strError, 'Apenas caracteres alfanuméricos(letras e números) são permitidos para o campo \"' + objValue.title + '\".');break;};case 'num': case 'number': case 'numeric': { ret = TestInputType(objValue,'[^0-9]',strError, 'Apenas caracteres numéricos(números) são permitidos para o campo \"' + objValue.title + '\".');break;};case 'letters': case 'let': { ret = TestInputType(objValue,'[^A-Za-záàãâäéèêëíìîïóòõôöúùûüçÁÀÃÂÄÉÈÊËÍÌÎÏÓÒÕÔÖÚÙÛÜÇ\\s]',strError, 'Apenas letras são permitidas para o campo \"' + objValue.title + '\".');break; };case 'restrict':case 'rest': { ret = TestInputType(objValue,'[^A-Za-z0-9-_]',strError, 'Apenas letras são permitidas para o campo \"' + objValue.title + '\".');break; };case 'email': { ret = TestEmail(objValue,strError);break; };case "lt":case "lessthan":{    if (isNaN(objValue.value)) {        alert('Apenas caracteres numéricos(números) são permitidos para o campo \"' + objValue.title + '\".');        return false;    };    if (eval(objValue.value) > eval(cmdvalue)) {        if (!strError || strError.length == 0) {            strError = 'O campo \"' + objValue.title + '\" deve ser menor ou igual a: ' + cmdvalue + '.';        };        alert(strError);        return false;    };    break;};case "gt":case "greaterthan":{    if (isNaN(objValue.value)) {        alert('Apenas caracteres numéricos(números) são permitidos para o campo \"' + objValue.title + '\".');        return false;    };    if (eval(objValue.value) < eval(cmdvalue)) {        if (!strError || strError.length == 0) {            strError = 'O campo \"' + objValue.title + '\" deve ser maior ou igual a: ' + cmdvalue + '.';        };        alert(strError);        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) {alert('\"' + objValue.value + '\" não é um número de CPF válido para o campo \"' + objValue.title + '\".');cBgColor(objValue);}else rBgColor(objValue);delete tmpValue;break;             };case 'cnpj': { var tmpValue = replaceAll(objValue.value, [['.', ''],[ '/', '' ],['-', ''],[' ', '']]);ret = TestCnpj(tmpValue);if(!ret) {alert('\"' + objValue.value + '\" não é um número de CNPJ válido para o campo \"' + objValue.title + '\".');cBgColor(objValue);}else rBgColor(objValue);delete tmpValue;break;             };case 'file': { ret = TestFile(objValue.value.toLowerCase(), cmdvalue);if(!ret) {alert('O campo \"' + objValue.title + '\" permite somente arquivos com a extensão \".' + cmdvalue +' \".');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]){o.form[i+1].focus();    break;    };}};};function checkReset(f){if(confirm('Todos os dados preenchidos serão apagados.\nPara apagar todos os dados clique em \"OK\".\nPara continuar preenchendo clique em \"Cancelar\".')) gElm(f).reset();};