function GE(objid){ return document.getElementById(objid); }

function chkSubmit(arRules,frm){
	//Valida campos
	ValidForm = ValidaCampos(arRules);
	if(ValidForm == true){
		//GE(frm).submit();
		return true;
	}else{
		alert(ValidForm);
		return false;
	}
}

function ValidaCampos(arRules){
	var Errors = 0;
	var sMsgErro = 'Os seguintes campos n\u00E3o foram preenchidos ou est\u00E3o incorretos:\n';
	for (rules = 0; rules < arRules.length; rules++){
		if(GE(arRules[rules][0])){
			sValue = GE(arRules[rules][0]);
			sName = arRules[rules][1];
			sRule = arRules[rules][2];
			sRulePlus = arRules[rules][3];
			switch (sRule){
				case "empty":
					if(isEmpty(sValue.value)){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "empty_compare":
					if(isEmpty(sValue.value) && GE(sRulePlus).checked){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "number_compare":
					if((isEmpty(sValue.value) || !isNumber(sValue.value)) && GE(sRulePlus).checked){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "number":
					if(isEmpty(sValue.value) || !isNumber(sValue.value)){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "numbermax":
					if(isEmpty(sValue.value) || !isNumber(sValue.value) || sValue.value > sRulePlus){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "numberlen":
					if(isEmpty(sValue.value) || !isNumber(sValue.value) || sValue.value.length != sRulePlus){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "email":
					if(!isEmail(sValue.value)){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "date":
					if(!isDateFmt(sValue.value,sRulePlus)){ Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "date_not_null":
					if(!isEmpty(sValue.value)){ 
						if (!isDateFmt(sValue.value,sRulePlus)){ Errors++;
							sMsgErro += '- ' + sName + '\n';
							sValue.className = "frmInputErr";
						}else sValue.className = "frmInput";
					}
					break;
				case "selected":
					if(!isSelected(sValue)){Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "radio":
					if(!isCheckedRadio(sValue, sRulePlus)){Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "checkbox":
					if (!sValue.checked){Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "file":
					if(!isEmpty(sValue.value) && !chkExtension(sValue.value, sRulePlus)){Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "file2":
					if(isEmpty(sValue.value) || !chkExtension(sValue.value, sRulePlus)){Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				case "like":
					if(isEmpty(sValue.value) || sValue.value != GE(sRulePlus).value){Errors++;
						sMsgErro += '- ' + sName + '\n';
						sValue.className = "frmInputErr";
					}else sValue.className = "frmInput";
					break;
				//case "cpf":
				//	if(isEmpty(sValue.value) || sValue.value != GE(sRulePlus).value){Errors++;
				//		sMsgErro += '- ' + sName + '\n';}
				//	break;
				case "cnpj":
      					if(!validaCNPJ(sValue.value)){Errors++;
      						sMsgErro += '- ' + sName + '\n';
      						sValue.className = "frmInputErr";
      					}else sValue.className = "frmInput";
      					break;
				case "cpf":       //ValidaInscMunic
                        if(!validaCPF(sValue.value)){Errors++;
      						sMsgErro += '- ' + sName + '\n';
      						sValue.className = "frmInputErr";
      					}else sValue.className = "frmInput";
      					break;
                case "insmun":
                        if(!ValidaInscMunic(sValue.value)){Errors++;
      						sMsgErro += '- ' + sName + '\n';
      						sValue.className = "frmInputErr";
      					}else sValue.className = "frmInput";
      					break;
				case "function":
					if (!sRulePlus()){
						Errors++;
						sMsgErro += '- ' + "Tipo de Pacote";
					}
					break;
				default:
					alert('Erro!\n\nRegra de valida\u00E7\u00E3o inv\u00E1lida:\n' + sRule);
			}
		}else{
			alert('Erro!\n\nObjeto inv\u00E1lido nas regras de valida\u00E7\u00E3o:\n' + arRules[rules][0])
		}
	}
	//while(sMsgErro.indexOf("_") > 0 ){
	//	sMsgErro = sMsgErro.replace("_"," ");
	//}
	if (Errors > 0){/*alert(Errors);*/ return sMsgErro;}
	else{return true;}
}

function isEmail(text){
	var arroba = "@",ponto = ".",posponto = 0,posarroba = 0;
	if (text =="") return false;
	for (var indice = 0; indice < text.length; indice++){if (text.charAt(indice) == arroba){posarroba = indice;break;}}
	for (var indice = posarroba; indice < text.length; indice++){if (text.charAt(indice) == ponto) {posponto = indice;break;}}
	if (posponto == 0 || posarroba == 0) return false;
	if (posponto == (posarroba + 1)) return false;
	if ((posponto + 1) == text.length) return false;
	return true;
}


function isDate (strData){
	var arrData = strData.split("/");
	for (var i in arrData) if (isNaN(arrData[i])) return false;
	if (arrData.length!=3) return false;
	digitosAno = arrData[2].length;
	if (digitosAno==4) return (Number(arrData[0])<=31 && Number(arrData[1])<=12 && Number(arrData[2])>=1900 && Number(arrData[2])<=2005);
	else if (digitosAno==2) return (Number(arrData[0])<=31 && Number(arrData[1])<=12 && Number(arrData[2])>=1 && Number(arrData[2])<=99);
	else return false;
	alert ("Teste");
}

function isDateFmt( data, format ){
	var tdate, ad, rd, dm, tmpstr, pDay, pMonth, pYear;
	format = format.toUpperCase();
	pDay = format.indexOf('D');
	pMonth = format.indexOf('M');
	pYear = format.indexOf('Y');
	dm = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	data = data.toString().replace(/\-/gi, "/");
	ad = data.split('/');
	if (ad.length != format.length) return false;
	if((ad[pMonth]>=1 && ad[pMonth]<=12)==false) return false;
	if(Math.floor(ad[pYear]/4)*4==ad[pYear]) dm[1] = 29;
	if(ad[pYear].toString().length != 4) return false;
	if((ad[pDay]>=1 && ad[pDay]<=dm[ad[pMonth]-1])==false) return false;
	for(i=0; i<ad.length; i++){if ((isEmpty(ad[i])) || (!isNumber(ad[i])) || (parseInt(ad[i])<0)) return false;}
	return true;
}

function isEmpty(text){
   var enter1 = "\n",enter2 = "\r",espaco = " ",tab = "\t";
   if (text =="") return true;
   for (var indice = 0; indice < text.length; indice++){if (text.charAt(indice) != espaco && text.charAt(indice) != tab &&text.charAt(indice) != enter1 && text.charAt(indice) != enter2 )return false;}
   return true;
}

function isSelected(obj){
	if(obj.disabled == false){
		if(obj.options[obj.selectedIndex].text == '' || obj.options[obj.selectedIndex].text == '--'){
			return false;
		}else{
			return true;
		}
	}else{
		return false;
	}
}

function isCheckedRadio(obj,grp){
	var Checks = 0;

	chkGroup = obj.name;
	chkForm = obj.form;
	for(elem=0;elem < chkForm.elements.length;elem++){
		if(chkForm.elements[elem].name == grp){
			if(chkForm.elements[elem].checked == true){
				Checks++;
			}
		}
	}
	if(Checks > 0){
		return true;
	}else{
		return false;
	}
	
}

function isNumber(numero){
   var CaractereInvalido = false;
   for (i=0; i < numero.length; i++){var Caractere = numero.charAt(i);if(Caractere != "." && Caractere != "," && Caractere != "-"){if (isNaN(parseInt(Caractere))) CaractereInvalido = true;}}
   return !CaractereInvalido;
}


function chkExtension(string, ext){
	string = string.split('.');
	if(string[string.length-1].toLowerCase() == ext.toLowerCase()) return true;
	else return false;
	
}
//Auxiliares

function ReplaceX( texto, procurar, novo ){
   len = procurar.length;
   pos = texto.indexOf(procurar);
   while (pos > -1){parte1 = texto.substring(0, pos);parte2 = texto.substring(pos + len , texto.length);texto = parte1 + novo + parte2;pos = texto.indexOf(procurar);}
   return texto;
}

function splitstr( str, strdiv ){
   var vetret, vetpos, ocorr, i, i2, ini, fim;
   ocorr = 0;
   for (i=0; i < str.length; i++) if ( str.charAt(i) == strdiv) ocorr++;
   vetret = new Array(ocorr);
   vetpos = new Array(ocorr);
   i2=0;
   for (i=0; i < str.length; i++)if( str.charAt(i) == strdiv){vetpos[i2]=i;i2++;}
   i2=0; ini=0; fim=0;
   for (i=0; i<ocorr+1; i++){if(i == vetpos.length)fim = str.length;elsefim = vetpos[i];vetret[i]=str.substring(ini, fim);ini = vetpos[i]+1;}
   return vetret;
}

function joinDates(d,m,y,x){
	current_date = new Date();
	current_year = current_date.getYear();
	if(GE(y).value > 30){
		ano = '19' + GE(y).value;
	}else{
		ano = '20' + GE(y).value;
	}
	newDate = GE(d).value + '/' + GE(m).value + '/' + ano;
	GE(x).value = newDate;
}

function validaCNPJ(CNPJ) {
	//CNPJ = document.validacao.CNPJID.value;
	erro = new String;
	//if (CNPJ.length != 14) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";
	if (CNPJ == "00000000000000") erro += "CNPJ inv\u00E1lido! \n\n";
	//if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
	//  if (erro.length == 0) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";
	//}
	//substituir os caracteres que nao sao numeros
    CNPJ = CNPJ.replace(".","");
    CNPJ = CNPJ.replace(".","");
    CNPJ = CNPJ.replace("-","");
    CNPJ = CNPJ.replace("/","");
	
	if (CNPJ.length != 14) erro += "\u00C9 necess\u00E1rio preencher corretamente o n\u00FAmero do CNPJ! \n\n";
	
	var nonNumbers = /\D/;
	if (nonNumbers.test(CNPJ)) erro += "A verificacao de CNPJ suporta apenas numeros! \n\n";
	var a = [];
	var b = new Number;
	var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
	for (i=0; i<12; i++){
	    a[i] = CNPJ.charAt(i);
	    b += a[i] * c[i+1];
	}
	if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
	b = 0;
	for (y=0; y<13; y++) {
	    b += (a[y] * c[y]);
	}
	if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
	if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
	    erro +="D\u00EDgito verificador com problema!";
	}
	if (erro.length > 0){
		//alert(erro);
		return false;
	}
	return true;
}

function validaCPF(cpf) {
       erro = new String;
       if (cpf.length < 11) erro += "S\u00E3o necess\u00E1rios 11 d\u00EDgitos para verifica\u00E7\u00E3o do CPF! \n\n";
           var nonNumbers = /\D/;
           if (nonNumbers.test(cpf)) erro += "A verifica\u00E7\u00E3o de CPF suporta apenas n\u00FAmeros! \n\n";
           if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
                   erro += "N\u00FAmero de CPF inv\u00E1lido!"
       }
       var a = [];
       var b = new Number;
       var c = 11;
       for (i=0; i<11; i++){
               a[i] = cpf.charAt(i);
               if (i < 9) b += (a[i] * --c);
       }
       if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
       b = 0;
       c = 11;
       for (y=0; y<10; y++) b += (a[y] * c--);
       if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }
       if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
               erro +="D\u00EDgito verificador com problema!";
       }
       if (erro.length > 0){
               //alert(erro);
               return false;
       }
       return true;
}

function ValidaInscMunic(insc)
{
       erro = new String;

       if(!isEmpty(insc)){
            var nonNumbers = /\D/;
            if (nonNumbers.test(insc)){
                 if(insc.toUpperCase() != "ISENTA"){
                        erro += "Dados de Inscri\u00E7\u00E3o Estadual ou Municipal inv\u00E1lidos! \n\n";
                 }
            }
       }
       else{
            erro += "Campo Obrigatório!";
       }

       if (erro.length > 0){
               //alert(erro);
               return false;
       }
       return true;
}

function formatar(src, mask) 
{
  var i = src.value.length;
  var saida = mask.substring(0,1);
  var texto = mask.substring(i)
  if (texto.substring(0,1) != saida) 
  {
        src.value += texto.substring(0,1);
  }
}

//FUNCAO PARA COLOCAR MASCARA NOS CAMPOS NO EVENTO ONBLUR
//EX: onBlur="javascript:return mask(this.value,this,'2,5','/');" DD/MM/YYYY
function mask(str,textbox,loc,delim){
var locs = loc.split(',');

for (var i = 0; i <= locs.length; i++){
	for (var k = 0; k <= str.length; k++){
	 if (k == locs[i]){
	  if (str.substring(k, k+1) != delim){
	    str = str.substring(0,k) + delim + str.substring(k,str.length)
	  }
	 }
	}
 }
textbox.value = str
}

