﻿function valida_mail(mail)
{
	if(!(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(mail)))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function valida_fone(numero)
{
	if(numero.length != 13){return false;}
	
	var ddd = numero.substring(0,4);
	var fone_body = numero.substring(4,13);
	
	if(ddd == '(00)' || ddd == '(99)'){return false;}
	
	if(fone_body == '0000-0000' || fone_body == '1111-1111' || fone_body == '2222-2222' || fone_body == '3333-3333' || fone_body == '4444-4444' || fone_body == '5555-5555' || fone_body == '6666-6666' || fone_body == '7777-7777' || fone_body == '8888-8888' || fone_body == '9999-9999')
	{
		return false;
	}
	
	return true;
}

function valida_cep(numero)
{
	if(numero.length != 9){return false;}
	
	//para o cep basta nao ser tudo digito repetido ja esta bom, mesmo pq o tail do cep pode ser 000 por exemplo é dificil saber
	if(numero == '00000-000' || numero == '11111-111' || numero == '22222-222' || numero == '33333-333' || numero == '44444-444' || numero == '55555-555' || numero == '66666-666' || numero == '77777-777' || numero == '88888-888' || numero == '99999-999')
	{
		return false;
	}
	
	return true;
}

/**
* exclui apenas os valores obviamente invalidos para uma data, nao valida realmente pois o js utiliza data na maquina do cliente, ele pode
* controlar, portanto validar a data é irrelevante usando o getDate() do js, nao é confiavel
*/
function valida_data_nascimento(str)
{
	if(str.length != 10){return false;}
	
	if(str == '00/00/0000' || str == '11/11/1111' || str == '22/22/2222' || str == '33/33/3333' || str == '44/44/4444' || str == '55/55/5555' || 
		str == '66/66/6666' || str == '77/77/7777' || str == '88/88/8888' || str == '99/99/9999')
	{
		return false;
	}
	
	var dia = parseInt(str.substring(0,2),10);//parseInt(string) da erro para 08 e 09, tem que usar parseInt(string,10) dai nao da mais erros
	var mes = parseInt(str.substring(3,5),10);//dispensa a barra
	var ano = parseInt(str.substring(6,10),10);//dispensa a barra
	
	if(dia < 1 || dia > 31){return false;}
	if(mes < 1 || mes > 12){return false;}
	
	//com o ano nao tem muito o que fazer ja que o js pega a data da maquina do usuario e nao tem como decidir confiavelmente se o ano que entrou é maior do que o atual
	if(ano < 1 || mes > 9999){return false;}
	
	return true;
}

/**
*
*
*
*
*														essa pre validação se tornou obsoleta com as mudanças em 07/11/2011
*
*
*
*
*
*
*
*
*
* a validacao matematica nao pode ficar no js, basta o cliente desliga-lo e a validacao nao seria mais necessaria
* rg, cpf, cnpj, docs em geral sao validados no servidor, aqui fica um validados apenas para eliminar numeros obviamente invalidos como
* é feito para a data de nascimento acima
*
function pre_valida_rg(numero)
{
	if(numero.length != 12){return false;}
	
	if(numero == '00.000.000-0' || numero == '11.111.111-1' || numero == '22.222.222-2' || numero == '33.333.333-3' || numero == '44.444.444-4' ||
		numero == '55.555.555-5' || numero == '66.666.666-6' || numero == '77.777.777-7' || numero == '88.888.888-8' || numero == '99.999.999-9')
	{
		return false;
	}
	
	return true;
}
*/

function pre_valida_cpf(numero)
{
	if(numero.length != 14){return false;}
	
	if(numero == '000.000.000-00' || numero == '111.111.111-11' || numero == '222.222.222-22' || numero == '333.333.333-33' || numero == '444.444.444-44' ||
		numero == '555.555.555-55' || numero == '666.666.666-66' || numero == '777.777.777-77' || numero == '888.888.888-88' || numero == '999.999.999-99')
	{
		return false;
	}
	
	return true;
}

function pre_valida_cnpj(numero)
{
	if(numero.length != 18){return false;}
	
	if(numero == '00.000.000/0000-00' || numero == '11.111.111/1111-11' || numero == '22.222.222/2222-22' || numero == '33.333.333/3333-33' ||
		numero == '44.444.444/4444-44' || numero == '55.555.555/5555-55' || numero == '66.666.666/6666-66' || numero == '77.777.777/7777-77' ||
		numero == '88.888.888/8888-88' || numero == '99.999.999/9999-99')
	{
		return false;
	}
	
	return true;
}

//no momento apenas exige 15 digitos não repetidos nada mais nada menos
function pre_valida_inscricao_estadual(numero)
{
	if(numero.length != 15){return false;}
	
	if(numero == '000000000000000' || numero == '111111111111111' || numero == '222222222222222' || numero == '333333333333333' || numero == '444444444444444' ||
		numero == '555555555555555' || numero == '666666666666666' || numero == '777777777777777' || numero == '888888888888888' || numero == '999999999999999')
	{
		return false;
	}
	
	return true;
}

//a url do site nao é obrigatoria, logo validar o formato apenas no javascript é suficiente
function valida_url(url)
{
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
	
	return regexp.test(url);
}

function Mascara(o,f)
{
	v_obj = o;
  v_fun = f;
  setTimeout("exec_mascara()",1);
}

function exec_mascara()
{
	v_obj.value = v_fun(v_obj.value);
}

function limpa_xss(v)
{
	v = v.replace(/[^_@\. \? \! , àáâãèéêìíòóôõúçñ ÀÁÂÃÈÉÊÌÍÒÓÔÕÚÇÑ a-z A-Z 0-9-\s]/g, "");
	v = v.replace(/(\'|")/g, "");
	return v;
}

/*
* necessario para aceitar o novo input de RG (até 20 chars e letras e numeros)
*/
function so_alpha_chars(v)
{
	v = v.replace(/[^a-z A-Z 0-9]/g, "");
	v = v.replace(/(\'|")/g, "");
	return v;
}

/**
*
*														essa pre validação se tornou obsoleta com as mudanças em 07/11/2011
*
function rg_mask(v)
{
  v = v.replace(/\D/g,"");
  v = v.replace(/(\d{2})(\d)/,"$1.$2");
  v = v.replace(/(\d{3})(\d)/,"$1.$2");
  v = v.replace(/(\d{3})(\d{1,2})$/,"$1-$2");
  return v;
}
*/

function cpf_mask(v)
{
  v = v.replace(/\D/g,"");
  v = v.replace(/(\d{3})(\d)/,"$1.$2");
  v = v.replace(/(\d{3})(\d)/,"$1.$2");
  v = v.replace(/(\d{3})(\d{1,2})$/,"$1-$2");
  return v;
}

/**
* baseado no calculo matematico oficial da receita federal, para o cnpj o length maximo é 18 gerando a mascara ##.###.###/####-##, a mascara ###.###.###/####-##
* até que o calculo da receita mude é irrelevante, ja que zero a esquerda nao conta e valor de cnpj com ?##.###.###/####-##, onde ? diferente de zero nao existe
*/
function cnpj_mask(v)
{
  v = v.replace(/\D/g,"");
  v = v.replace(/^(\d{2})(\d)/,"$1.$2");
  v = v.replace(/^(\d{2})\.(\d{3})(\d)/,"$1.$2.$3");
  v = v.replace(/\.(\d{3})(\d)/,".$1/$2");
  v = v.replace(/(\d{4})(\d)/,"$1-$2");
	return v;
}

function data_mask(v)
{
  v = v.replace(/\D/g,"");
  v = v.replace(/(\d{2})(\d)/,"$1/$2");
  v = v.replace(/(\d{2})(\d)/,"$1/$2");
  return v;
}

function so_numeros(v)
{
	return v.replace(/\D/g,"");//remove tudo que nao é numero
}

function cep_mask(v)
{
  v = v.replace(/\D/g,"");
  v = v.replace(/^(\d{5})(\d)/,"$1-$2");
  return v;
}

function fone_mask(v)
{
	v = v.replace(/\D/g,"");
  v = v.replace(/^(\d\d)(\d)/g,"($1)$2");
  v = v.replace(/(\d{4})(\d)/,"$1-$2");
	return v;
}

function url_mask(v)
{
	v = v.replace(/^http:\/\/?/,"")
  dominio=v
	caminho=""
	
	if(v.indexOf("/")>-1)
		dominio=v.split("/")[0]
		caminho=v.replace(/[^\/]*/,"")
		dominio=dominio.replace(/[^\w\.\+-:@]/g,"")
		caminho=caminho.replace(/[^\w\d\+-@:\?&=%\(\)\.]/g,"")
		caminho=caminho.replace(/([\?&])=/,"$1")
	
	if(caminho!="")dominio=dominio.replace(/\.+$/,"")
		v="http://"+dominio+caminho
	
	return v
}

/*built in do dreamwearver para hover menu swap images*/
function MM_preloadImages()
{
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
  var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
  if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore()
{
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d)
{
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
  d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage()
{
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
  if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

//essa autotab é jquery dependente
function autotab(campo_origem, campo_destino, maxchars)
{
	var co = '#'+campo_origem;
	var cd = '#'+campo_destino;
	var mc = parseInt(maxchars);
	
  if($(co).val().length == mc)
	{
    $(cd).focus();
  }
}

function valida_periodo(data1, data2)
{
	var aux = data1.split("/");
	var dia1 = parseInt(aux[0],10);
	var mes1 = parseInt(aux[1],10);
	var ano1 = parseInt(aux[2],10);
	var d1 = new Date();
	d1.setFullYear(ano1, mes1 - 1, dia1);

	aux = data2.split("/");
	var dia2 = parseInt(aux[0],10);
	var mes2 = parseInt(aux[1],10);
	var ano2 = parseInt(aux[2],10);
	var d2 = new Date();
	d2.setFullYear(ano2, mes2 - 1, dia2);

	if(d2 < d1)
	{
		return false;
	}
	else
	{
		return true;
	}
}

function update_combobox_cidades(id_combobox,nome_estado,url_dados)
{
	/*
	* desabilita a combobox porque a premissa é que o usuario nao forneceu nenhum estado, ou seja, nao existem cidades para estado vazio
	* e se o servidor receber estado vazio no get_cidades_by_estado ele retorna apenas a <option value=''>Selecione</option> e a combobox
	* de cidades nao é reabilitada, ou seja, se nao escolher um estado, nao pode escolher uma cidade tambem
	*/
	$(id_combobox).attr('disabled','disabled');
	
	$.post(url_dados,{estado:nome_estado},function(data){
		if(data != '')
		{
			//teoricamente data nunca retornará vazio do servidor
			$(id_combobox).html(data);
			
			if(nome_estado != '')
			{
				$(id_combobox).removeAttr('disabled');
				$(id_combobox).focus();
			}
		}
	});
}

function update_combobox_modelos(id_combobox,nome_fabricante,url_dados)
{
	$(id_combobox).attr('disabled','disabled');
	
	$.post(url_dados,{fabricante:nome_fabricante},function(data){
		if(data != '')
		{
			$(id_combobox).html(data);
			
			if(nome_fabricante != '')
			{
				$(id_combobox).removeAttr('disabled');
				$(id_combobox).focus();
			}
		}
	});
}




















/***************************************************************************************************************************************************************/
/*************************************** ABAIXO VARIAS MASCARAS PARA INPUT TEXT NEM TODAS SAO UTILIZADAS NO SISTEMA ********************************************/
/***************************************************************************************************************************************************************/
function so_texto(v)
{
	return v.replace(/\d/g,"");//remove tudo o que não é letra
}

function so_texto_maiusculo(v)
{
  v = v.replace(/\d/g,"");//remove tudo o que não é letra
  v = v.toUpperCase();//converte tudo que ta no campo pra maiusculas
  return v;
}

function so_texto_minusculo(v)
{
  v = v.replace(/\d/g,"");//remove tudo o que não é letra
  v = v.toLowerCase();//converte tudo que ta no campo pra maiusculas
  return v;
}

function dinheiro_mask(v)
{
  v = v.replace(/\D/g,"");
  //v = v.replace(/[0-9]{12}/,"inválido")//limita pra máximo 999.999.999,99 via codigo mais o melhor mesmo é por maxlength no html, vou deixar aqui a titulo de curiosidade
  v = v.replace(/(\d{1})(\d{8})$/,"$1.$2");//coloca ponto antes dos últimos 8 digitos
  v = v.replace(/(\d{1})(\d{5})$/,"$1.$2");//coloca ponto antes dos últimos 5 digitos
  v = v.replace(/(\d{1})(\d{1,2})$/,"$1,$2");//coloca virgula antes dos últimos 2 digitos
  return v;
}

function ct_mask(v)
{
  //ct = carteira de trabalho, ex:0.000.000-0000
  v = v.replace(/\D/g,"");
  v = v.replace(/(\d{1})(\d)/,"$1.$2");
  v = v.replace(/(\d{3})(\d)/,"$1.$2");
  v = v.replace(/(\d{3})(\d{1,4})$/,"$1-$2");
  return v;
}

function hora_mask(v)
{
	v = v.replace(/\D/g,"");
  v = v.replace(/(\d{2})(\d)/,"$1:$2");
  return v;
}
