var ns6 = (document.getElementById)&&!(document.all);

function ObtemPosicaoNoArray1(objeto) {
	var oColObj = document.getElementsByName(objeto.name);
	for (var i=0; i < oColObj.length; i++) {
		if(oColObj[i]===objeto)
			return i;
	}
	return 0;
}

function ErroArray(indexErro, idErro, ErroMessage, elemento)
{
	this.indexErro = indexErro;
	this.idErro = idErro;
	this.ErroMessage = ErroMessage;
	this.elemento = elemento;
}

function ValidaForm(form) {
	var elemento="", elemValue, elemNome, elemTipo;
	var sTipo, str, num, k;
	var AchaNulo, AchaTipo;
	var NumErro=0;
	var ErroDesc = new Array();
	var PadraoTipo = new Array ("l", "f", "dt", "c", "v", "ti", "si", "m", "bai", "cep", "cid", "cpj", "cex", "cmc",
								"cpf", "cfj", "ddd", "doc", "em", "end", "log", "ome", "pwd", "per", "tax", "tel", "uf");
	
	for (var i=0; i<form.elements.length; i++) {
		
		str="";
		sTipo="";
		num="";
		elemento = form.elements.item(i);
		if((elemento.disabled) || (elemento.name==''))
			continue;
		if(elemento.tagName == 'INPUT' 
			&& (elemento.type == 'radio' || elemento.type == 'checkbox')) 
		{
			var elemSelec = form.elements[elemento.name];
			if(! elemSelec.length)
				elemSelec = Array(elemSelec);
			
			if( !(elemento === elemSelec[0]))
				continue;
		}
		// Monta a string do Tipo e o Tamanho(se tiver)
		elemTipo = elemento.getAttribute('tipo');
		elemNome = elemento.getAttribute('descricao');
		var ordemElem = ObtemPosicaoNoArray1(elemento);
		if (elemTipo) {
			for (var j=0; j<elemTipo.length; j++) {
				str = elemTipo.substring(j,j+1);
				if (isNaN(str))
					sTipo = sTipo + str;
				else
					num = num + str;
			}
			
			sTipo = sTipo.toLowerCase();
			
			// Verifica se o identificador de Nullable esta presente.
			AchaNulo=false;
			AchaTipo=false;
			if (sTipo.length >= 2 && sTipo.substring(0,1) == 'n') {
				for (k=0; k<PadraoTipo.length; k++) {
					if (PadraoTipo[k] == sTipo.substring(1,sTipo.length)) {
						AchaNulo=true;
						AchaTipo=true;
						sTipo = sTipo.substring(1,sTipo.length);
						break;
					}
				}
			}
			
			if (!AchaTipo) {
				for (k=0; k<PadraoTipo.length; k++) {
					if (PadraoTipo[k] == sTipo) AchaTipo=true;
				}
			}
			
			elemValue = ( elemento.type != "select-one" )
						? (elemento.value)
						: ( (elemento.selectedIndex>=0) ? elemento.options[elemento.selectedIndex].value : "");
			if (AchaTipo) {
				// Verifica se o campo está nulo ou vazio
				if (elemValue==null || elemValue.length==0 || elemValue.match(/^[^\ *$]/)==null || (elemValue=="" && (elemento.type=="select-one")) 
				   || ((elemento.type=="radio" || elemento.type=="checkbox") && !EstaSelecionado(elemento)) ) {
					if (!AchaNulo) {
						ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome ,elemNome+" deve ser obrigatório !", elemento);
						NumErro++;
						 }
				}
				else {
					switch(sTipo) {
						case 'l':  // Long
							if (isNaN(parseInt(limparstring(elemValue),10)) ||
								(elemValue.match(/^(\-?|\+?)(\d*)$/)==null)) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter um número inteiro !", elemento);
								NumErro++;
							}
							break;
						
						case 'ti':  // Tinyint
							if (isNaN(parseInt(elemValue,10)) ||
							   (elemValue.match(/^(\-?|\+?)(\d*)$/)==null) ||
							   (parseInt(elemValue,10) < 0 || parseInt(elemValue,10) > 255)) {
	 						    ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter um número inteiro entre [0,255] !", elemento);
								NumErro++;
							}
							break;
						
						case 'si':  // Smallint
							if (isNaN(parseInt(elemValue,10)) ||
							   (elemValue.match(/^(\-?|\+?)(\d*)$/)==null) ||
							   (parseInt(elemValue,10) < -32768 || parseInt(elemValue,10) > 32767)) {
							    ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter um número inteiro entre [-32768,32767] !", elemento);
								NumErro++;
							}
							break;

						case 'f':  // Double
							
							var real = elemValue.replace(/,/g, ".");
							
							if (isNaN(parseFloat(real)) ||
								elemValue.match(/^(\-?|\+?)((\d*)|(\d*)(\,?)(\d*))$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter um número real !", elemento);
								NumErro++;
							}
							break;
						
						case 'dt':  // Datetime ou SmallDatetime
							var dhPartes = elemValue.split(" ");
							if (dhPartes.length==2) { // Data e Hora
								if (!ValidarDataHora(elemValue)) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter uma data/hora válida !", elemento);
									NumErro++;
								}
							}
							
							if (dhPartes.length==1) { // Apenas Data
								var dt = dhPartes[0].split("/");
								if (dt.length==3) { // Data inteira (DD/MM/AAAA)
									if (!ValidarData(elemValue))
									{
										ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter uma data válida !", elemento);
										NumErro++;
									}
								}
								else { // Meia Data (MM/AAAA)
									if (!ValidarData("1/"+elemValue)) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter uma data válida !", elemento);
									NumErro++;
									}
								}
							}
							break;
						
						case 'c':  // Char
							if (elemValue.length != num) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome ,elemNome+" deve conter exatamente ("+num+") caracteres !", elemento);
								NumErro++;
							}
							break;
						
						case 'v':  // Varchar
							if (elemValue.length > num) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder "+num+" caracteres !", elemento);
								NumErro++;
							}
							break;
													
						case 'm':  // Money
							if (elemValue.match(/^((\d{1,3}(\.\d{3})*)|\d*)(,\d*)?$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não se encontra no formato correto !", elemento);
								NumErro++;
							}
							else if(elemValue.length >=14) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" apresenta um valor superior ao limite do sistema !", elemento);
							}
							break;
						
						case 'bai': // Bairro
						
							if (elemValue.length>30) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 30 caracteres!", elemento);
								NumErro++;
							}
							break;
						
						case 'cep':  // CEP
							if (elemValue.match(/^\d{5}-?\d{3}$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválido!", elemento);
								NumErro++;
							}
							break;
						
						case 'cid':  // Cidade
							if (elemValue.length>30) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 30 caracteres !", elemento);
								NumErro++;
							}
							break;
						
						case 'cex':  // CodExportacao
							if (elemValue.length>20) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 20 caracteres !", elemento);
								NumErro++;
							}
							break;
						
						case 'cpf':  // CPF
							if (elemValue.length!=11 && elemValue.length!=14) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome + " possui número inválido de caracteres!", elemento);
								NumErro++;
							}
							else if (elemValue.match(/^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" contém caracteres inválidos !", elemento);
								NumErro++;
							}
							else if (!valida_CPF(elemValue)) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválido !", elemento);
								NumErro++;
							}
							break;
						
						case 'cpj':  // CNPJ
							if (elemValue.length!=14 && elemValue.length!=18) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome + " possui número inválido de caracteres!", elemento);
								NumErro++;
							}
							else if (elemValue.match(/^\d{2}\.?\d{3}\.?\d{3}\/?\d{4}-?\d{2}$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" contém caracteres inválidos !", elemento);
								NumErro++; achou=true;
							}
							else if (!valida_CNPJ(elemValue)) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválido !", elemento);
								NumErro++;
							}
							break;
						
						case 'cfj':  // CPF_CNPJ
						
							if (elemValue.length!=11 && elemValue.length!=14 && elemValue.length!=18) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome + " possui número inválido de caracteres!", elemento);
								NumErro++;							
							}
							else if (elemValue.match(/^(\d{3}\.?\d{3}\.?\d{3}-?\d{2})|(\d{2}\.?\d{3}\.?\d{3}\/?\d{4}-?\d{2})$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" só pode conter números !", elemento);
								NumErro++;
							}
							else if (elemValue.length==11 || (elemValue.length==14 && elemValue.indexOf(".")>0) ) {
								if (!valida_CPF(elemValue)) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, "CPF inválido !", elemento);
									NumErro++; achou=true;
								}
							}
							else if(!valida_CNPJ(elemValue)) { //Só sobrou Cnpj
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, "CNPJ inválido !", elemento);
								NumErro++;
							}
							break;
						
						case 'ddd':  // DDD
							if (elemValue.match(/^\d{2}$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" só pode conter números !", elemento);
								NumErro++; achou=true;
							}
							else if (elemValue.length!=2) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve ter 2 caracteres !", elemento);
								NumErro++;
							}
							break;
							
						case 'doc':  // Nome
							var achou = false;
							
							if (elemValue.length>15) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 15 caracteres !", elemento);
								NumErro++; achou = true;
							}
							if (!achou) {
								var elemSemCaracEsp = RetiraCaracteresEspeciais(elemValue);
								if (elemSemCaracEsp.match(/^([A-Za-z0-9\.\/\-]{2,15})$/)==null){
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, "Formato do número do documento inválido!", elemento);
									NumErro++;
								}
							}
							break;	
						
						case 'em':  // Email
							
							var achou=false;
							
							if (elemValue.length>50) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 50 caracteres !", elemento);
								NumErro++; achou=true;
							}
							
							if (!achou) {
								if (!Valida_Email(elemento)) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválido !", elemento);
									NumErro++;
								}
							}
							
							break;
						
						case 'end':  // Endereço
							
							var achou=false;
							
							if (elemValue.length>50) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 50 caracteres !", elemento);
								NumErro++;
							}
							//Estamos desativando a validação por uma separação de espaço
							break;
						
						case 'log':  // Login
							var achou = false;
							
							if (elemValue.length>20) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 20 caracteres !", elemento);
								NumErro++; achou = true;
							}
							
							if (!achou) {
									if (!(elemValue.indexOf(' ')==-1)) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, "Digite o "+elemNome+" sem espaços em branco !", elemento);
									NumErro++;
								}
							}
							break;
						
						case 'ome':  // Nome
							var achou = false;
							
							if (elemValue.length>50) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 50 caracteres !", elemento);
								NumErro++; achou = true;
							}
							if (!achou ) {
								if ( elemValue.charAt(elemValue.length-1)==' ' ) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, "Retire os espaços ao final do "+elemNome+" !", elemento);
									NumErro++; achou = true;
								}
							}
							if (!achou) {
								var elemSemCaracEsp = RetiraCaracteresEspeciais(elemValue);
								if (elemSemCaracEsp.match(/^([A-z]{2,}( ([A-z]\.)| ([A-z]+))*( [A-z]{2,})+)$/)==null){
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, "Digite o "+elemNome+" completo !", elemento);
									NumErro++;
								}
							}
							break;
						
						case 'pwd':  // Senha
							
							if (elemValue.length>20) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 20 caracteres !", elemento);
								NumErro++;
							}
							break;
						
						case 'tax':  // Taxa numerico. Obs.: Valor de entrada deve estar no formato brasileiro (1.123,23)

							var achou=false;
							var vVal=elemValue.split(',');
							var real=vVal[0].replace(/[.]/, '') + '.' + vVal[1];

							if (isNaN(parseFloat(real)) ||
								elemValue.match(/^(\-?|\+?)((\d*)|(\d*)(\,?)(\d*)|(\d*)(\.?)(\d*)(\,?)(\d*))$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválida !", elemento);
								NumErro++; achou=true;
							}
							
							if (!achou) {
								if (elemValue.match(/^(\d{1,4}|\d{0,4}\,\d{1,6}|\d{0,3}\.\d{3}\,\d{1,6})$/)==null) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválida !", elemento);
									NumErro++; achou=true;
								}
							}
							
							if (!achou){
								if(parseFloat(real)<0 || parseFloat(real)>100) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválida ! Valor deve ficar entre 0 e 100 !", elemento);
									NumErro++;
								}
							}
							
							break;
						
						case 'per': // Percentual. Obs.: Valor de entrada deve estar no formato brasileiro (1.123,23)
						
							var achou=false;
							var vVal=elemValue.split(',');
							var real=vVal[0].replace(/[.]/, '') + '.' + vVal[1];
							
							if (isNaN(parseFloat(real)) ||
								elemValue.match(/^(\-?|\+?)((\d*)|(\d*)(\,?)(\d*)|(\d*)(\.?)(\d*)(\,?)(\d*))$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválida !", elemento);
								NumErro++; achou=true;
							}
							
							if (!achou) {
								if (elemValue.match(/^((\d{1,5})|(\d{0,5})(\,)(\d{1,4})|(\d{0,3})(\.)(\d{1,3})(\,)(\d{1,4}))$/)==null) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválida !", elemento);
									NumErro++; achou=true;
								}
							}
							
							if (!achou){
								if(parseFloat(real)<0 || parseFloat(real)>100) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválida ! Valor deve ficar entre 0 e 100 !", elemento);
									NumErro++;
								}
							}

							
							break;
						
						case 'tel':  // Telefone
							
							var achou=false;
							
							if (elemValue.match(/^(\d{2,4})(\-?)(\d{4})$/)==null) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválido !", elemento);
								NumErro++; achou=true;
							}
							
							if (!achou) {
								if (elemValue.length>15) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não pode exceder 15 caracteres !", elemento);
									NumErro++;
								}
							}
							break;
						
						case 'uf':  // UF
							
							var achou=false;
							
							if (elemValue.length!=2) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve ter apenas 2 caracteres !", elemento);
								NumErro++; achou=true;
							}
							
							if (!achou) {
								var Sigla;
								var Estado = new Array("AC", "AL", "AM", "AP", "BA", "CE", "DF", "ES", "GO", "MA",
											 	   	   "MG", "MS", "MT", "PA", "PB", "PE", "PI", "PR", "RJ", "RN",
												   	   "RO", "RR", "RS", "SC", "SE", "SP", "TO");
								
								for (Sigla in Estado)
									if (elemValue.toUpperCase() == Estado[Sigla]) achou=true;
								
								if (!achou) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" não encontrado !", elemento);
									NumErro++;
								}
							}
							
							break;
						
						case 'cmc':  // CMC7
							
							var achou=false;
							
							if (elemValue.length!=30) {
								ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" deve conter 30 caracteres !", elemento);
								NumErro++; achou=true;
							}
							
							if (!achou) {
								if (!valida_CMC7(elemValue)) {
									ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+" inválido !", elemento);
									NumErro++;
								}
							}
							
							break;
						
						default:
							ErroDesc[NumErro] = new ErroArray(ordemElem, elemNome, elemNome+". Tipo não identificado !", elemento);
							NumErro++;
							break;
					} // switch
				} // if
			} // if
		} // if
	} // for
	
	// Mostra Erros
	if (NumErro>0)
		return (ErroDesc);
	else
		return false;
}

function EstaSelecionado(elem) {
	var formPai = elem.form;
	if(elem.type=='checkbox' || elem.type=='radio') {
		if (formPai.elements[elem.name].length > 1) {
			var aElem = formPai.elements[elem.name];
			for(var i=0; i < aElem.length; i++) {
				if(aElem.item(i).checked)
					return true;
			}
		}
		else if(elem.checked) return true;
	}
	return false;
}

function ValidarData(DataTeste) {
	var dtParts = DataTeste.split("/");
	var erro = false;
						//   J  F  M  A  M  J  J  A  S  O  N  D
	var DiadoMes = new Array(31,29,31,30,31,30,31,31,30,31,30,31);
	
	if(dtParts.length==1) {
		var dtParts2 = DataTeste.split("-");
		if(dtParts2.length==3) {
			dtParts = new Array(dtParts2[2], dtParts2[1], dtParts2[0]);
		}
	}
	if(dtParts.length==3) {
		erro = isNaN(dtParts[2]) || !(dtParts[2].length == 2 || dtParts[2].length == 4) || isNaN(dtParts[1]) || isNaN(dtParts[0]);
		if(!erro) {			
			for(var i=0; i<3; i++) {
				dtParts[i] = parseInt(dtParts[i], 10);
				erro |= isNaN(dtParts[i]);
			}
			//faço o ajuste do ano no caso de 2 dígitos
			if(dtParts[2]<30) 
				dtParts[2] += 2000
			else if(dtParts[2]<100) 
				dtParts[2] += 1900;

			if( (dtParts[2]<1900) || (dtParts[2]>2050) ||
				(dtParts[1]<1) || (dtParts[1]>12) ||
				(dtParts[0]<1) || (dtParts[0]>31) )
				erro = true;
		}
		if (dtParts[0] > DiadoMes[dtParts[1]-1])
			erro = true;
		//Testo por 29 de fevereiro
		if (dtParts[1]==2 && dtParts[0]>28) { 
			if((dtParts[2]%400)!=0) { //Testo por 400 anos
				if((dtParts[2]%100)==0) erro = true; //Testo por século
				else {
					if((dtParts[2]%4)!=0) erro = true;//Testo bissexto div 4
				}
			}
		}
	}
	else
		erro = true;
	if ((DataTeste=="") || (erro)) {
		return false;
	}
	else 
	//Observe este absurdo no mês !! dá para se confundir bastante
		return new Date(dtParts[2], dtParts[1] - 1, dtParts[0]);
}

function ValidarHora(Hora) {
	var erro = false;
	var hrParts = Hora.split(":");

	if(hrParts.length==2) 
		hrParts = hrParts.concat("00");
	if(hrParts.length==3) {
		erro = isNaN(hrParts[2]) || isNaN(hrParts[1]) || isNaN(hrParts[0]);
		if(!erro) {
			for(var i=0; i<3; i++)
				hrParts[i] = parseInt(hrParts[i]);
			if(hrParts[0]<0 || hrParts[0]>23)
				erro = true;
			if(hrParts[1]<0 || hrParts[1]>59)
				erro = true;
			if(hrParts[2]<0 || hrParts[2]>59)
				erro = true;
		}
	}
	else erro=true;
	
	if(erro)
		return false;
	else {
		return(("0"+hrParts[0]).substr((""+hrParts[0]).length-1)+":"+
		       ("0"+hrParts[1]).substr((""+hrParts[1]).length-1)+":"+
			   ("0"+hrParts[2]).substr((""+hrParts[2]).length-1))
	}
}

function ValidarDataHora(DataHora) {
	var erro = false;
	var dhParts = DataHora.split(" ");
	
	if(dhParts.length==2) {
		var dtParts = ValidarData(dhParts[0]);
		var hrParts = ValidarHora(dhParts[1]);
		
		if(!dtParts || !hrParts)
			erro = true;
	}
	else
		erro = true;
	
	if(erro)
		return false;
	else
		return(dtParts + " " + hrParts);
}

function ObtemDataDeString(Data) {
	//A data de entrada deve ser uma string no formato DD/MM/YYYY
	var DataPartes = Data.split("/");
	if(DataPartes.length == 3) {
		//!!! preste atenção nesta barbaridade o Mês tem que ser subtraído de 1, para chegar no mês correto
		return new Date(DataPartes[2], DataPartes[1] - 1, DataPartes[0]);
	}
	else
		return ValidarData(Data);
}

function limparstring(s) {
	while (s.search(" ")!=-1)
		s=s.replace(" ","");
	
	return(s);
}

function limpa_string_cpf_cnpj(S){
// Deixa so' os digitos no numero
var Digitos = "0123456789";
var temp = "";
var digito = "";
    for (var i=0; i<S.length; i++){
      digito = S.charAt(i);
      if (Digitos.indexOf(digito)>=0){temp=temp+digito}
    }
    return temp
}

function valida_CPF(s)
{
	var i;
	s = limpa_string_cpf_cnpj(s);
	var c = s.substr(0,9);
	var dv = s.substr(9,2);
	var d1 = 0;
	for (i = 0; i < 9; i++)
	{
		d1 += c.charAt(i)*(10-i);
	}
        if (d1 == 0) return false;
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)
	{
		return false;
	}
	d1 *= 2;
	for (i = 0; i < 9; i++)
	{
		d1 += c.charAt(i)*(11-i);
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1)
	{
		return false;
	}
        return true;
}

function valida_CNPJ(s)
{
	var i;
	s = limpa_string_cpf_cnpj(s);
	var c = s.substr(0,12);
	var dv = s.substr(12,2);
	var d1 = 0;
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+(i % 8));
	}
        if (d1 == 0) return false;
        d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(0) != d1)
	{
		return false;
	}
	d1 *= 2;
	for (i = 0; i < 12; i++)
	{
		d1 += c.charAt(11-i)*(2+((i+1) % 8));
	}
	d1 = 11 - (d1 % 11);
	if (d1 > 9) d1 = 0;
	if (dv.charAt(1) != d1)
	{
		return false;
	}
    return true;
}

function Valida_Email(campName)
{
  var EmailOk  = true;
  var Temp     = campName;
  var AtSym    = Temp.value.indexOf('@');
  var Period   = Temp.value.lastIndexOf('.');
  var Space    = Temp.value.indexOf(' ');
  var Length   = Temp.value.length - 1;
  
  if ( (AtSym < 1) ||                     // '@' não pode estar na primeira posição
       (Period <= AtSym+1) ||             // Deve haver pelo menos um caracter válido entre '@ e '.'
       (Period == Length ) ||             // Deve haver pelo menos um caracter válido após '.'
       (Space  != -1) )                   // Não pode haver espaços em branco
    {
      EmailOk = false
    }

  return EmailOk;
}

function valida_CMC7(codigo)
{
	if (codigo.length != 30) return false;
	if (!CalculaDac1020(codigo.substr(8,10))==codigo.charAt(7)) return false;
	if (!CalculaDac1020(codigo.substr(0,7))==codigo.charAt(18)) return false;
	if (!CalculaDac1020(codigo.substr(19,10))==codigo.charAt(29)) return false;
	return true;	
}

function CalculaDac1020(codigo) {
 	var i, dDv;
	var iSoma=0, inMult=2;

	for (i = codigo.length -1; i >=0; i--) {
		dDv = (codigo.charAt(i) - '0') * inMult;
		dDv = (dDv>9)?(dDv-9):dDv;
		iSoma+= dDv;
		inMult = 3 - inMult;
	}	
	dDv = (10-iSoma%10)%10;
	return (dDv);
}

function DateDiff(interval, Date1, Date2) {
	var diff = 0,
		DtAux1 = new Date(Date1); //Date1.getYear(), Date1.getMonth(), Date1.getDate()),
		DtAux2 = new Date(Date2); //Date2.getYear(), Date2.getMonth(), Date2.getDate());

	switch (interval) {
	case 'd': //divide a diferença das datas pelo total de milisegundos do dia
		diff = (DtAux2 - DtAux1) / 86400000; break;
	case 'm': //Está errado, mas por enquanto fica assim !
		diff = (DtAux2 - DtAux1) / (86400000*30); break;
	default:
	}
	return diff;

}

function ValidaCEP_UF(CEP, UF) {
	var sErro = null,
		sCEP = CEP.value.substr(0,5),
		selUF = UF.options(UF.selectedIndex);
	if(sCEP < selUF['CEP_MIN'] || sCEP > selUF['CEP_MAX']) {
		sErro = 'o CEP informado não corresponde ao do estado.';
	}
	return sErro;
}

// Funções para avanço automático para o próximo campo.
VerificaTab=true;
function AvancaTab(quem) {
	var tammax = quem.maxLength; 
	if ( (quem.value.length == tammax) && (VerificaTab) ) {
		var i=0,j=0, indice=-1;
		for (j=0; j<quem.form.elements.length; j++) {
			if (quem.form.elements[j] === quem) {
				indice=j;
				break;
			}
		}
		if (indice >= 0) {
			for(i = indice + 1; i < quem.form.elements.length &&
				(quem.form.elements[i].type == "hidden"); i++) {
			}
			quem.form.elements[i].focus();
			VerificaTab=false;
		}
	}
}

function HabilitaTab(status) { 
   VerificaTab = status; 
} 

