/*************************************************************************
 * Índice de Funções JAVASCRIPT
 *
 * - obj() 								> Função para resgatar o objeto pelo ID
 * - gera_mensagem() 					> Função para gerar uma mensagem de preenchimento
 * - abre_janela() 						> Função para abrir uma popup
 * - val_campo_email() 					> Função para validar o e-mail digitado
 * - val_entrada_dados() 				> Função para validar a entrada de dados em um campo 
 * - val_campo_data()					> Função para validar um campo de data
 * - val_campo_minuto()					> Função para validar um campo de minutos
 * - val_campo_hora()					> Função para validar um campo de horas 
 * - val_campo_cpf()					> Função para validar um campo de CPF
 * - resgata_topo_objeto() 				> Função para resgatar a distancia do topo da janela até o objeto
 * - resgata_esquerda_objeto() 			> Função para resgatar a distancia da esquerda da janela até o objeto
 * - resgata_altura_objeto() 			> Função para resgatar a altua do objeto
 * - resgata_dimensoes_tela() 			> Função para resgatar as dimensões da tela do navegador
 * - resgata_texto_combo() 				> Função para resgar o texto de um combo
 * - resgata_valor_combo() 				> Função para resgar o value de um combo
 * - resgata_quantidade_caracteres()	> Função para contar a quantidade de caracteres de algum campo texto
 * - seta_maxlength(o) 					> Função para setar um maxlength no campo textarea
 * - seta_mascara_data()				> Função para setar mascara em um campo de data DD/MM/YYYY
 * - remover_item_combo() 				> Função para remover um item de um combo/list
 * - resgata_browser() 					> Função para regatar o browser do usuario
 * - addEvent()							> Função para adicionar um evento a determinado elemento
 * - reinica_combo()					> Função para reiniciar os elementos de um combo (select)
 * - adicionar_itens_combo()			> Função para adicionar elementos em um combo (select)
 * - xhr()								> Função para AJAX (XMLHttpRequest)
 *
 * Criado por: Cássio Fernando T. Rodrigues
 * Email: cassiorodrigues@gmail.com
 * Data: 28/03/2007
 *
 ************************************************************************/

/**
 * Função para validar CPF
 *
 * Uso:
 * xxxx
 *
 * 
 */
function vercpf (cpf) 
{if (cpf.length != 11 || cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == "44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999")
return false;
add = 0;
for (i=0; i < 9; i ++)
add += parseInt(cpf.charAt(i)) * (10 - i);
rev = 11 - (add % 11);
if (rev == 10 || rev == 11)
rev = 0;
if (rev != parseInt(cpf.charAt(9)))
return false;
add = 0;
for (i = 0; i < 10; i ++)
add += parseInt(cpf.charAt(i)) * (11 - i);
rev = 11 - (add % 11);
if (rev == 10 || rev == 11)
rev = 0;
if (rev != parseInt(cpf.charAt(10)))
return false;

return true;
}


// Verifica se o CNPJ é válido

function vercnpj(s)

{
	var i;
	
	 //s = limpa_string(numero);
	
	 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;

}

/**
 * Função para resgatar o objeto pelo ID
 *
 * Uso:
 * onclick="alert(obj('CAMPO').value);"
 *
 * var o: nome do objeto
 */
function obj(o){
	return document.getElementById(o);
}

/**
 * Função para gerar uma mensagem de preenchimento
 *
 * Uso:
 * onclick="gera_mensagem(1,'Nome')"
 *
 * var tipo: 1 (texto), 2 (combo)
 * var label: nome do campo
 */
function gera_mensagem(tipo,label){
	if (tipo==1){ // campos do tipo texto
		alert('Por favor, preencha o campo '+label+'.');
	}
	if (tipo==2){ // campos do tipo combo
		alert('Por favor, selecione uma opção do campo '+label+'.');
	}
}

/**
 * Função para resgar o texto de um combo
 *
 * Uso:
 * onclick="alert(resgata_texto_combo('OBJETO',null);"
 *
 * var o: objeto
 * var p: posição que deseja retornar o texto (null = posição selecionada)
 */
function resgata_texto_combo(o,p){
	if (p==null){
		return obj(o).options[obj(o).selectedIndex].text;
	} else {
		return obj(o).options[p].text;
	}
}

/**
 * Função para resgar o value de um combo
 *
 * Uso:
 * onclick="alert(resgata_valor_combo('OBJETO',null);"
 *
 * var o: objeto
 * var p: posição que deseja retornar o texto (null = posição selecionada)
 */
function resgata_valor_combo(o,p){
	if (p==null){
		return obj(o).options[obj(o).selectedIndex].value;
	} else {
		return obj(o).options[p].value;
	}
}

/**
 * Função para abrir uma popup
 *
 * Uso:
 * onclick="abre_janela('teste.php','sem_nome',640,480,0,0,0,0,0,1,0,1,0,0);"
 *
 * var url: caminho da popup
 * var name: nome da janela
 * var width: largura
 * var height: altura
 * var left: distancia da esquerda
 * var top: distancia do topo
 * var toolbar: 0/1 (sem/com) barra de ferramentas 
 * var status: 0/1 (sem/com) barra de status
 * var scrollbars: 0/1 (sem/com) barra de rolagem
 * var menubar: 0/1 (sem/com) barra do menu
 * var resizable: 0/1 (sem/com) redimensionável
 * var location: 0/1 (sem/com) barra de enderecos
 */
function abre_janela(url,name,width,height,left,top,toolbar,status,scrollbars,menubar,resizable,location){
	window.open(url,name,'width='+width+',height='+height+',left='+left+',top='+top+',toolbar='+toolbar+',status='+status+',scrollbars='+scrollbars+',menubar='+menubar+',resizable='+resizable+',location='+location);
}

/**
 * Função para validar o e-mail digitado
 *
 * Uso:
 * onblur="val_campo_email('CAMPO');"
 *
 * var o: objeto
 */
function val_campo_email(o){
	var er = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/);
	if (typeof(obj(o).value)=="string"){
		if(er.test(obj(o).value)){
			return true; 
		}
	} else if(typeof(obj(o).value)=="object"){
			if(er.test(obj(o).value.value)){
				return true;
			}
	}else{
		return false;
	}
}

/**
 * Função para resgatar as dimensões da tela do navegador
 *
 * Uso:
 * onclick="alert(resgata_dimensoes_tela(true));" // retorna largura, altura
 *
 * var total: true (área total), false (área visível)
 */
function resgata_dimensoes_tela(total){ 
	var l=0;
	var a=0;
	if(document.layers){       
		l=(total)?(innerWidth+window.pageXOffset):(innerWidth);
		a=(total)?(innerHeight+window.pageYOffset):(innerHeight);
	} else {
		if(document.all){
			l=(total)?(document.body.clientWidth+document.body.scrollLeft):(document.body.clientWidth);
			a=(total)?(document.body.clientHeight+document.body.scrollTop):(document.body.clientHeight);
		} else {
			if(document.getElementById){
				l=(total)?(innerWidth+window.pageXOffset):(innerWidth);
				a=(total)?(innerHeight+window.pageYOffset):(innerHeight);
			}
		}
	}
	return new Array(l,a);
}

/**
 * Função para setar um maxlength no campo textarea
 *
 * Uso:
 * onkeypress="seta_maxlength('CAMPO');"
 *
 * var o: objeto
 */
function seta_maxlength(o){
	var mlength=document.getElementById(o).getAttribute ? parseInt(document.getElementById(o).getAttribute("maxlength")) : ""
	//alert(mlength);
	if (document.getElementById(o).getAttribute && document.getElementById(o).value.length>mlength){ 
		alert('Seu texto ultrapassou '+mlength+' caracteres!');
		document.getElementById(o).value=document.getElementById(o).value.substring(0,mlength);
		
	}
}

/**
 * Função para resgatar a distancia do topo até o objeto
 *
 * Uso:
 * onclick="alert(resgata_topo_objeto('CAMPO'));"
 *
 * var o: objeto
 */
function resgata_topo_objeto(o){
	var topo=0;
	while(obj(o)){
		topo+=obj(o).offsetTop;
		objeto=obj(o).offsetParent;
	}
	return topo;
}

/**
 * Função para resgatar a distancia da esquerda da janela até o objeto
 *
 * Uso:
 * onclick="alert(resgata_esquerda_objeto('CAMPO'));"
 *
 * var o: objeto
 */
function resgata_esquerda_objeto(o){	
	var esquerda=0;
	while(obj(o)){
		esquerda+=obj(o).offsetLeft;
		objeto=obj(o).offsetParent;
	}
	return esquerda;
}

/**
 * Função para resgatar a altua do objeto
 *
 * Uso:
 * onclick="alert(resgata_altura_objeto('CAMPO'));"
 *
 * var o: objeto
 */
function resgata_altura_objeto(o){
	var altura=0;
	altura=obj(o).offsetHeight;
	return altura;
}

/**
 * Função para remover um item de um combo/list
 *
 * Uso:
 * onclick="remover_item_combo('CAMPO',null);"
 *
 * var o: objeto
 * var p: posição que deseja retornar o texto (null = posição selecionada)
 */
function remover_item_combo(o,p){
	var tam = obj(o).options.length;
	if (p==null){ // elimina o item selecionado
		for (j=0;j<tam;j++){		
			obj(o).options[obj(o).selectedIndex] = null;
			var tam = obj(o).options.length;
		}
	} else { // elimina item especifico
		obj(o).options[p] = null;								
	}	
}

/**
 * Função para validar a entrada de dados em um campo
 *
 * Uso:
 * onkeypress="return val_entrada_dados(event,'0123456789/');"
 *
 * var evento: event
 * var filtro: caracteres liberados
 */
function val_entrada_dados(evento,filtro){
	var tecla;
	var caractertecla;
	
	if(window.event){
		tecla=window.event.keyCode;
	} else {
		if(evento){
			tecla=evento.which;
		} else {
			return true;
		}
	}
	
	caractertecla=String.fromCharCode(tecla);
	return ((tecla==null) || (tecla==0) || (tecla==8) || (tecla==9) || (tecla==13) || (tecla==27) || ((filtro.indexOf(caractertecla)>-1)));
}

/**
 * Função para setar mascara em um campo de data DD/MM/YYYY
 *
 * Uso:
 * onkeyup="return seta_mascara_data('CAMPO');"
 *
 * var o: objeto
 */
function seta_mascara_data(o){
	if (obj(o).value.length == 2) obj(o).value = obj(o).value + '/';
	if (obj(o).value.length == 5) obj(o).value = obj(o).value + '/';
	if (obj(o).value.length == 10){
		val_campo_data(o); // valida a data
	}
}

/**
 * Função para validar um campo de data
 *
 * Uso:
 * onblur="val_campo_data('CAMPO');"
 *
 * var o: objeto
 */
function val_campo_data(o) {
	if (obj(o).value!=""){
		var dia = (obj(o).value.substring(0,2));
		var mes = (obj(o).value.substring(3,5));
		var ano = (obj(o).value.substring(6,10));
		var situacao = true;

		if ((dia<1) || (dia<1 || dia>30) && (mes==4 || mes==6 || mes==9 || mes == 11) || dia>31){
			situacao = false;
		}

		if (mes<1 || mes>12){
			situacao = false;
		}

		if (mes==2 && ((dia<1) || (dia>29) && (dia>28 && (parseInt(ano/4)!=(ano/4))))){
			situacao = false;
		}
		
		if (situacao==false){
			obj(o).value = "";
			alert("Data digitada incorreta");
			obj(o).focus();
		}
	}
}

/**
 * Função para validar um campo de minutos
 *
 * Uso:
 * onblur="val_campo_minuto('CAMPO');"
 *
 * var o: objeto
 */
function val_campo_minuto(o) {
	if (obj(o).value!=""){
		if (obj(o).value>59){
			obj(o).value = "";
			alert('Os minutos digitados são incorretos, tente outro.');
			obj(o).focus();
		}
	}
}

/**
 * Função para validar um campo de horas
 *
 * Uso:
 * onblur="val_campo_hora('CAMPO');"
 *
 * var o: objeto
 */
function val_campo_hora(o) {
	if (obj(o).value!=""){
		if (obj(o).value>23){
			obj(o).value = "";
			alert('As horas digitadas são incorretas, tente outra.');
			obj(o).focus();
		}
	}
}

/**
 * Função para contar a quantidade de caracteres de algum campo texto
 *
 * Uso:
 * onkeyup="resgata_quantidade_caracteres('CAMPO','escreve_texto',null)"
 *
 * var o: objeto
 * var k: div onde será escrito a quantidade de caracteres
 * var n: quantidade de caracteres limitados (caso seja null, utiliza o maxlength do campo)
 */
function resgata_quantidade_caracteres(o,k,n){
	var conteudo;
	if (n==null){
		if (!obj(o).maxLength){
			n = obj(o).getAttribute ? parseInt(obj(o).getAttribute("maxlength")) : ""
		} else {
			n = obj(o).maxLength;
		}
	}
	if (obj(o).value.length>=n){
		conteudo = "<b><font color=\"red\">"+obj(o).value.length+"</font>/"+n+"</b> caracteres.";
	} else {
		conteudo = "<b>"+obj(o).value.length+"/"+n+"</b> caracteres.";
	}
	obj(k).innerHTML = "";
	obj(k).innerHTML = conteudo;
}

/**
 * Função para regatar o browser do usuario
 *
 * Uso:
 * onclick="alert(resgata_browser())"
 *
 */
function resgata_browser(){
	var nomBrow = navigator.userAgent;
	if (nomBrow.indexOf('MSIE')!=-1){
		return "ie";
	} else {
		if (nomBrow.indexOf('Firefox')!=-1){
			return "ff";				
		} else {
			return "sf";		
		}
	}
}

/**
 * Função para adicionar um evento a determinado elemento
 *
 * Uso:
 * addEvent("envia","click",function(e){ alert('Teste'); return false; });
 *
 * var o: objeto
 * var evType: click, load, resize, mouseover, mouseout
 * var fn: função
 */
function addEvent(o, evType, fn, useCapture){
	if (obj(o).addEventListener){
		obj(o).addEventListener(evType, fn, useCapture);
		return true;
	} else if (obj(o).attachEvent){
		
		
		var r = obj(o).attachEvent("on"+evType, fn);
		return r;
	} else {
		alert("Não foi possível realizar a operação (addEvent).");
	}
}

/**
 * Função para AJAX (XMLHttpRequest)
 *
 * Uso:
 * xhr('arquivo.php?ID=1','caixa','select');
 *
 * xhr_req: requisição
 * xhr_objeto: objeto
 * xhr_tipo: select (combo) ou text (texto) 
 */
var xhr_req;
var xhr_objeto;
var xhr_tipo;
function xhr(url,o,tipo){
    xhr_req = null;
	xhr_objeto = o;
	xhr_tipo = tipo;
    if (window.XMLHttpRequest) {
        xhr_req = new XMLHttpRequest();
        xhr_req.onreadystatechange = processReqChange;
        xhr_req.open("GET", url, true);
        xhr_req.send(null);
    } else if (window.ActiveXObject) {
        xhr_req = new ActiveXObject("Microsoft.XMLHTTP");
        if (xhr_req) {
            xhr_req.onreadystatechange = processReqChange;
            xhr_req.open("GET", url, true);
            xhr_req.send();
        }
    }
}

function processReqChange(){
    if (xhr_req.readyState==4) { 
        if (xhr_req.status==200) { 
			if (xhr_tipo=="select"){
				adicionar_itens_combo(xhr_objeto,xhr_req.responseText);		
			}
			if (xhr_tipo=="text"){
				document.getElementById(xhr_objeto).value = xhr_req.responseText;
			}
			if (xhr_tipo=="div"){
				document.getElementById(xhr_objeto).innerHTML = xhr_req.responseText;	
			}	
        } else {
            alert("Houve um problema ao obter os dados:\n" + xhr_req.statusText);
        }
    }
}

/**
 * Função para validar um campo de CPF
 *
 * Uso:
 * onblur="val_campo_cpf('CAMPO');"
 *
 * var o: objeto
 */
function val_campo_cpf(o){
	var soma;
	var resto;
	var i;
	var cpf = obj(o).value;
	var situacao = true;

	if ((cpf.length!=11) ||
		(cpf == "00000000000") || (cpf == "11111111111") ||
		(cpf == "22222222222") || (cpf == "33333333333") ||
		(cpf == "44444444444") || (cpf == "55555555555") ||
		(cpf == "66666666666") || (cpf == "77777777777") ||
		(cpf == "88888888888") || (cpf == "99999999999")) {
		situacao = false;	
	}
	
	soma = 0;
	for (i=1;i<=9;i++) {
		soma += Math.floor(cpf.charAt(i-1))*(11-i);
	}

	resto = 11-(soma-(Math.floor(soma/11)*11));
	if ((resto==10) || (resto==11)) {
		resto = 0;
	}
	
	if (resto!=Math.floor(cpf.charAt(9))) {
		situacao = false;
	}
	
	soma = 0;
	for (i=1;i<=10;i++) {
		soma += cpf.charAt(i-1)*(12-i);
	}
	
	resto = 11-(soma-(Math.floor(soma/11)*11));
	if ((resto==10) || (resto==11)) {
		resto = 0;
	}
	
	if (resto!=Math.floor(cpf.charAt(10))) {
		situacao = false;
	}
	
	if (situacao==false){
		obj(o).value = "";
		alert("O CPF digitado é incorreto, tente outro.");
		obj(o).focus();
	}
}

/**
 * Função para reiniciar os elementos de um combo (select)
 *
 * Uso:
 * onclick="reinica_combo('CAMPO');"
 *
 * var o: objeto
 */
function reinica_combo(o){
	obj(o).length = 0;	
}

/**
 * Função para adicionar elementos em um combo (select)
 *
 * Uso:
 * onclick="adicionar_item_combo('CAMPO','VALUE_DESCRICAO|VALUE_DESCRICAO|VALUE_DESCRICAO');"
 *
 * var o: objeto
 * var conteudo: concatenacao do value + descricao
 */
function adicionar_itens_combo(o,conteudo){
	reinica_combo(o);

	document.getElementById(o).disabled=true;	

	obj(o).options[0] = new Option('- Selecione -','');			
	
	var indice = 1;
	/* cria um array com o conteudo enviado */
	var array = conteudo.split("|");
	/* elementos do array */
	var n_elem = array.length;
	
	/* passa por todos os elementos do array */
	for (a=0;a<n_elem;a++){
		
		var item_combo = "";
		item_combo = array[a].split("_");
		obj(o).options[indice] = new Option(item_combo[1],item_combo[0]);
		indice++;
		
	}	

	document.getElementById(o).disabled=false;
	
}
