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 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 = get(form[i].id);
	
		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(a) '+tipoVal[1].toUpperCase()+' válido.\n';
								evidencia(obj, 'red');
							}
						}
					}
				}
				if(obj.id == "senha" && rel == 'true_')
				{
					senha = obj;
					lbSenha = label;	
				}
				else if(obj.id == "cSenha" && rel == 'true_')
				{
					cSenha = obj;
					lbCSenha = label;
				}
				else if(obj.id == "cEmail" && rel == 'true_')
				{
					cEmail = obj;
					lbCEmail = label;
				}
				else if(obj.id == "email")
				{
					email = obj;
					lbEmail = label;
				}
			}
			else
			{
				if(!empty(obj) && typeof rel!='object' && obj.id!="senha"  && obj.id!="csenha")
				{
					label = get("lb_"+obj.id).innerHTML;
					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(a) '+tipoVal[1].toUpperCase()+' válido.\n';
								evidencia(obj, 'red');
							}
						}
					}					
				}
			}
		}
	}
	
	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;
}
		
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 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;
}

// Esta função "chama" todas as funções usadas em um documento.
function init() {
	createExternalLinks();
}

// FORÇA LINKS A ABRIREM EM UMA NOVA JANELA
//******************************************************************************
// A W3C não aceita mais o atributo "target" em links (tag <a>) em doctypes XHTML 1.0 Strict
// A função abaixo faz com que todos os links que possuem rel="externo" no link, abram em outra janela conforme no exemplo abaixo:
// EXEMPLO:
//******************************************************************************
//<a href="index.php" title="Link de Exemplo" rel="externo">

/* Para chamar a função, insira no body  == <script type="text/javascript">createExternalLinks();</script>  */

function createExternalLinks() {
    if(document.getElementsByTagName) {
        var anchors = document.getElementsByTagName('a');
        for(var i=0; i<anchors.length; i++) {
            var anchor = anchors[i];
            if(anchor.getAttribute("href") && anchor.getAttribute('rel')=='externo') { // <-- É necessário inserir rel="externo" no link
                anchor.target = '_blank';
                var title = anchor.title + ' (Este link abre uma nova janela)'; // <-- Insere este texto no final do Title do link
                anchor.title = title;
            }
        }
    }
}

//........................................................................
//........................................................................

// Esta função "chama" todas as funções usadas em um documento.
//========================================================
// Event Listener by Scott Andrew - http://scottandrew.com
// edited by Mark Wubben, <useCapture> is now set to false
//http://simon.incutio.com/archive/2004/05/26/addLoadEvent
//========================================================
function addEvent(obj, evType, fn){
    if(obj.addEventListener){
        obj.addEventListener(evType, fn, false);

        return true;

    } else if (obj.attachEvent){
        var r = obj.attachEvent('on'+evType, fn);

        return r;

    } else {
        return false;

    }
}

addEvent(window, "load", init);