function get(id)
{
	return document.getElementById(id);
}

function getTag(tag)
{
	return document.getElementsByTagName(tag);
}

function empty(obj)
{
	var type = typeof obj;
	var er = /^\s{0,}$/;
	var retorno = false;

	if(type=="string")
	{
		if(obj.match(er))
			return true;
	}
	if(type!="undefined")
	{
		if(type == "object")
		{
			retorno  = obj.value.match(er);
		}
		else if(get(obj))
		{
			retorno = get(obj).value.match(er);
		}
	}	
	
	return retorno;
}

function exclui(texto_adicional)
{
	var texto = "Deseja realmente excluir este registro?";
	if (texto_adicional)
		texto+= " " + texto_adicional;
	
	if(!empty(get('codigo').value))
		return conf = confirm(texto);
	else
		return false;
}

function evidencia(obj)
{
	var cor = arguments[1] ? arguments[1] : '#A5ACB2';
	
	if(typeof obj != "object")
	{
		obj = get(obj);
	}
	obj.style.border = '1px solid '+cor;
}

function evidenciaOff(obj)
{
	if(!empty(obj))
		evidencia(obj);
}

function validaBusca()
{
	if(empty('busca'))	
	{
		alert("Informe um dado para busca!");
		get('busca').focus();
		return false;
	}
	else
	{
		return true;
	}
}

function mascara(campo, mask, e)
{
	campo.maxLength=mask.length;
    
	var src=campo.value.length;
    var mask=mask.substr(src,1);
    
    if(window.event)
    {
	    if(e.keyCode!=13 && (e.keyCode > 47 && e.keyCode < 58))
	    {
	    	if(mask!='#' && src>=0)
	    	{	
	        	campo.value+=mask;
	    	}
	    }
	    else
	    {
	    	e.keyCode=0;
	    }
    }
    else
    {
    	if(e.which!=13 && (e.which > 47 && e.which < 58))
	    {
	    	if(mask!='#' && src>=0)
	    	{	
	        	campo.value+=mask;
	    	}
	    }
	    else if( (e.which > 31 && e.which < 48 ) || (e.which > 57 && e.which < 65 ) || (e.which > 64 && e.which < 91 ) ||  e.which > 90 )
	    {
	    	e.preventDefault();
	    }
    }
}

function validaCEP(cep)
{
	var er = /^\d{5}\-\d{3}/;
	
	return cep.match(er);
		
}

function validaFONE(fone)
{
	var er = /^\(\d{2}\)\d{4}\-\d{4}/;
	
	return fone.match(er);
		
}

function validaEMAIL(email)
{
//	var er = /^[a-z0-9-_.]+@+[a-z0-9-_.]+\.[a-z]{2,4}((\.)[a-z]{2})?$/;
	var er = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
	
	return email.match(er);
}

function validaDOMINIO(dominio)
{
	var er = /^(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
	
	return dominio.match(er);
}

function validaANO(ano)
{
	if(ano%4==0)
	{
		if(ano%100!=0 || ano%400 == 0)
		{
			return true;
		}
	}
	
	return false;
}


function validaDATA(data)
{
	var er = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[12][0-9]{3}$/;
	var erMes = /^(0[13578]|1[012])$/;
	
	if(!data.match(er))
		return false;
		
	var dt = data.split("/");
	var dia = dt[0];
	var mes = dt[1];
	var ano = dt[2];
	
	var bissexto = validaANO(ano);
	
	if(mes==2)
		maxDia = bissexto ? 29 : 28;
	else if(mes.match(erMes))
		maxDia = 31;
	else
		maxDia = 30;

	if(dia > maxDia)
		return false;
		
	return true;
}

function validaCPF(cpf) 
{
	var cpf = new String(cpf);
    var aux_cpf = "";
    var erro = true;

	// retirar caracteres não numéricos
	aux_cpf = removeMask(cpf);

	if(aux_cpf.length!=11)
	{
		return false;
	}
    else 
    {
    	var sub = aux_cpf.substr(0,1);
    
    	if(aux_cpf.match(sub+'{11}'))
    		return false;
    		
    	var cpf1 = String(aux_cpf);
    	var cpf2 = cpf.substr(cpf.length-2,2);
      	var controle = "";
      	var start = 2;
      	var end = 10;

      	for(var i=1;i<=2;i++) 
      	{
      		var soma = 0;
      		
      		for(j=start;j<=end;j++)
      		{
      			soma += cpf1.substr((j-i-1),1)*(end+1+i-j);
      		}
        	if(i==2)
        	{
          		soma += digito * 2;
        	}
        	
        	digito = (soma * 10) % 11;
        	
        	if(digito==10)
        	{
          		digito = 0;
        	}
        	
        	controle += digito;
        	start = 3;
        	end = 11;
      	}
      	if(controle!=cpf2)
      	{
        	erro = false;
      	}
    }
  
	return erro;
}

function validaCNPJ(cnpj) 
{
	
	var erro = true; 
	var aux_cnpj = "";	
	var cnpj1=0 , cnpj2=0;
	var fator, controle;

	// retirar caracteres não numéricos

	aux_cnpj = removeMask(cnpj);
	
	if(aux_cnpj.length!=14)
	{
		return false;
	}
	else 
	{
		var sub = aux_cnpj.substr(0,1);
		
		if(aux_cnpj.match(sub+'{14}'))
			return false;
		
		cnpj1 = aux_cnpj.substr(0,12);
		cnpj2 = aux_cnpj.substr(aux_cnpj.length-2,2);
		fator = "543298765432";
		controle = "";
		
		for(j=0; j<2; j++) 
		{
			soma = 0;
			for(i=0; i<12; i++)
			{
				soma += cnpj1.substr(i,1) * fator.substr(i,1);
			}
			if(j==1)
			{
				soma += digito * 2;
			}
			
			digito = (soma * 10) % 11;
			
			if(digito==10)
			{
				digito = 0;
			}
			
			controle += digito;
			
			fator = "654329876543";
		} 
		if(controle != cnpj2)
		{
			erro = false;
		}
	} 
	return erro;
}


function valorMoeda(campo)
{
	var value = removeMask(campo.value);
	
	if(value.length > 17)
		value = value.substr(0, 17);
		
	var tam = value.length;
	
	if (tam <= 2)
		campo.value = value;
	else if (tam > 2 && tam <=5)
		campo.value = value.substr(0, tam-2) + ',' + value.substr(tam-2, tam);
	else if (tam >= 6 && tam <=8)
		campo.value = value.substr(0, tam-5) + '.' + value.substr(tam-5, 3) + ',' + value.substr(tam-2, tam);
 	else if (tam >= 9 && tam <= 11)
 		campo.value = value.substr(0, tam-8) + '.' + value.substr(tam-8, 3) + '.' + value.substr(tam-5, 3) + ',' + value.substr(tam-2, tam);
 	else if (tam >= 12 && tam <= 14)
 		campo.value = value.substr(0, tam-11) + '.' + value.substr(tam-11, 3) + '.' + value.substr(tam-8, 3) + '.' + value.substr(tam-5, 3) + ',' + value.substr(tam-2, tam); 
 	else if (tam >= 15 && tam < 18) 
 		campo.value = value.substr(0, tam-14) + '.' + value.substr(tam-14, 3) + '.' + value.substr(tam-11, 3) + '.' + value.substr(tam-8, 3) + '.' + value.substr(tam-5, 3) + ',' + value.substr(tam-2, tam);
}

function removeMask(value)
{
	var valueLimpo='';
	
	for(i=0; i < value.length; i++)
	{
		tmp = value.substring(i, i+1);
		
		if(!isNaN(tmp))
		{
			valueLimpo+=tmp;
		}
	}
	
	return valueLimpo;
}

function reseta(form)
{
	if(typeof form != "object")
	{
		form = document.form;
	}
	
	for(i=0; i<form.length; i++)
	{
		if(form[i].type.match(/text|textarea|password|hidden|select/))
		{
			form[i].value = '';
			
			if(form[i].style.borderColor.match(/red/))
				evidencia(form[i]);
		}
	}
}

function pdf(page, form)
{
	var args = "";
	
	for(i=0; i<form.length; i++)
	{
		args+= "&"+form[i].name+"="+form[i].value;
	}
	
	window.open(page+args);
}

/**
 * Função para adicionar mascara ao campo CPF / CNPJ
 */

function addMask(obj)
{
	var value = obj.value;
	var nValue='';
	var valueLimpo='';
	var tmp;
	var cpf;
	var cnpj;
	var erro = false;
	
	/** retira a mascara se houver */
	value = removeMask(value);
	/**
	 * Se for um CPF
	 */
	if(value.length == 11)
	{
		for(i=0; i < value.length; i++)
		{
			nValue+= value.substring(i, i+1);
			if(i==2 || i==5)
			{
				nValue+="."
			}
			else if(i==8)
			{
				nValue+="-";
			}
		}
	}
	/**
	 * Se for um CNPJ
	 */
	else if(value.length == 14)
	{
		for(i=0; i< value.length; i++)
		{
			nValue+= value.substring(i, i+1);
			if(i==1 || i==4 || i==11)
			{
				nValue+="."
			}
			else if(i==7)
			{
				nValue+="/";
			}
		}
	}
	else
	{
		nValue = obj.value;
	}

	obj.value = nValue;
}

function findLabel(inputElementID) 
{
	arrLabels = document.getElementsByTagName('label');

	searchLoop:
	for (var i=0; i<arrLabels.length; i++) {
		if (arrLabels[i].getAttributeNode('for') && arrLabels[i].getAttributeNode('for').value == inputElementID) {				
			return arrLabels[i];
			break searchLoop;				
		}
	}		

}
	
	
/*
 * Função que muda a imagem ao lado do label dos inputs do tipo checkbox.
 * Adicionar a função no onclick
 * Parametros:
 * - Elemento: usar sempre "this"
 */
function changeChkBoxLabel(Element)  // passar Elemento = this
{
	labelElement = findLabel(Element.getAttributeNode('id').value);
	
	if(labelElement.className == 'CHECKBOX_CHECKED') {
		labelElement.className = "CHECKBOX_UNCHECKED";
	}
	else {
		labelElement.className = "CHECKBOX_CHECKED";
	}
}

/*
 * Função que muda a imagem ao lado do label dos inputs do tipo radio.
 * Adicionar a função no onclick
 * Parametros:
 * - Elemento: usar sempre "this"
 * - GrupoNome: nome do grupo de campos do tipo radio
 * - NroElementos: número de elementos do grupo
 */
function changeRadioLabel(Elemento, GrupoNome, NroElementos) 
{			 
		clicadoLabelElemento = findLabel(Elemento.getAttributeNode('id').value);
		clicadoInputElemento = Elemento;
		
		// desmarca todos os elementos do mesmo grupo deste Radio
		for (var i=1; i<=NroElementos; i++) {
			labelElemento = findLabel(GrupoNome+i);
			labelElemento.className = 'RADIO_UNCHECKED';
			get(GrupoNome+i).checked = false;
		}

		// marca o elemento selecionado
		clicadoLabelElemento.className = 'RADIO_CHECKED';
		// atribui o valor do radio selecionado para a variavel de retorno
		get(GrupoNome).value = clicadoInputElemento.value;

}

/* 
 * Função que detecta o nome a versao do navegador
 * Retorno uma array de duas posições
 * - Posição "nome": nome do navegador
 * - Posição "versao": versão do navegador
 */
function navegador()
{
	var ret = new Array(2);
	var nav = "";
	var ver = "";
	var app = navigator.appName;
	var age = navigator.userAgent;
	if (app == "Microsoft Internet Explorer")
	{
		nav = "ie";
		ver = age.substr(age.indexOf("MSIE")+5);
		ver = ver.substr(0,ver.indexOf("."));
	}
	if (app == "Opera")
	{
		nav = "opera";
		ver = age.substr(age.indexOf("Opera")+6);
		ver = ver.substr(0,ver.indexOf("."));
	}
	if (app == "Netscape")
	{
		if (age.indexOf("Navigator") >0)
		{
			nav = "netscape";
			ver = age.substr(age.indexOf("Navigator")+10);
			ver = ver.substr(0,ver.indexOf("."));
		}
		else if (age.indexOf("Firefox") >0)
		{
			nav = "firefox";
			ver = age.substr(age.indexOf("Firefox")+8);
			ver = ver.substr(0,ver.indexOf("."));
		}
		
		if (age.indexOf("Safari") >0)
		{
			nav = "safari";
			ver = age.substr(age.indexOf("Version")+8);
			ver = ver.substr(0,ver.indexOf("."));
		}
	}
	
	ret["nome"] = nav;
	ret["versao"] = ver;
	return ret;
}

		function validaFORM(form)
		{
			
			if(typeof form!="object")
				var form = document.form;
		
			var qtd = form.length;
			var type, id, label, obj, obr, rel, tipoVal, senha, lbSenha, cSenha, lbCSenha, email, lbEmail, cEmail, lbCEmail;
			var msg = "";
			var erType = /^(submit|button|hidden)$/;
			var headMsg = "";
			var $cnpj = null;
			var $cpf = null;
			
			for(var i=0; i < qtd; i++)
			{
				obj = form[i];
		
				if(!obj.type.match(erType))
				{
					rel = obj.getAttribute('rel')
					
					if(typeof rel !="object")
					{
						obr = rel.match(/^true/) ? true : false;
					}
					else
					{
						obr = false;
					}
					
					if(obr)
					{
						label = get("lb_"+obj.id).innerHTML;
						
						if(empty(obj))
						{
							if((obj.type=="text") || (obj.type=="password"))
							{
								msg+="\n O campo '"+label+"' deve ser preenchido.\n";
							}
							else if(type="select-one")
							{
								msg+="\n O campo '"+label+"' deve ser selecionado.\n";
							}
							evidencia(obj, 'red');
						}
						else if(typeof rel!='object' && obj.id!="senha"  && obj.id!="csenha")
						{
							tipoVal = rel.split("_");
						
							if(tipoVal.length == 2 && !empty(tipoVal[1]))
							{
								if(tipoVal[1]=='cpfcnpj')
								{
									$cpf = eval('validaCPF(\''+obj.value+'\')');
									$cnpj = eval('validaCNPJ(\''+obj.value+'\')');
									
									if($cpf == false && $cnpj == false)
									{
										msg+="\n O campo "+label+' deve ser preenchido com um CPF ou CNPJ válido.\n';
										evidencia(obj, 'red')
									}
								}
								else 
								{
									if(!eval('valida'+tipoVal[1].toUpperCase()+'(\''+obj.value+'\')'))
									{
										msg+="\n O campo "+label+' deve ser preenchido com um '+tipoVal[1].toUpperCase()+' válido.\n';
										evidencia(obj, 'red');
									}
									
								}
							}
						}
						if(obj.id == "senha")
						{
							senha = obj;
							lbSenha = label;	
						}
						else if(obj.id == "csenha")
						{
							csenha = obj;
							lbCSenha = label;
						}
						else if(obj.id == "cemail")
						{
							cEmail = obj;
							lbCEmail = label;
						}
						else if(obj.id == "email")
						{
							email = obj;
							lbEmail = label;
						}
					}
				}
			}
			
			if((senha && csenha) && (!empty(senha) && !empty(csenha)))
			{
				if(senha.value != csenha.value)
				{
					msg+="\n O campo '"+lbSenha+"' e o campo '"+lbCSenha+"' devem ser iguais.\n";
					evidencia(senha, 'red');
					evidencia(csenha, 'red');
				}
				else if(senha.value.length < 6)
				{
					msg+="\n O campo '"+lbSenha+"' deve ter no mínimo 6 (seis) caracteres.\n";
					evidencia(csenha, 'red');
					evidencia(senha, 'red');
				}
			}
			
			if(cEmail)
			{
				if(cEmail.value != email.value)
				{
					msg+="\n O campo '"+lbEmail+"' e o campo '"+lbCEmail+"' devem ser iguais.\n";
					evidencia(email, 'red');
					evidencia(cEmail, 'red');
				}
			}
			
			if(!empty(msg))
			{
				msg = "Foram encontrados os seguintes erros no preenchimento do formulario:\n"+msg;
				alert(msg);
				return false;
			}
			
			return true;
		}
