// JavaScript Document
function counterUpdate(opt_countedTextBox, opt_countBody, opt_maxSize) {
	var countedTextBox = opt_countedTextBox ? opt_countedTextBox : "counttxt";
	var countBody = opt_countBody ? opt_countBody : "countBody";
	var maxSize = opt_maxSize ? opt_maxSize : 1024;
	
	var field = document.getElementById(countedTextBox);

	if ((field != null) && (field.value.length >= maxSize)) {
		field.value = field.value.substring(0, maxSize);
	}
	var txtField = document.getElementById(countBody);
	if (txtField) {
		txtField.innerHTML = field.value.length;
	}
}

function popup(url){
	var largura = screen.availWidth;
	var altura = screen.availHeight;
	
	window.open(url,"site","width="+largura+", height="+altura+", toolbars=no, scrollbars=no,location=no,copyhistory=no,directories=no, screenX=1,screenY=1,left=1,top=1");
}

function alertar(mensagem) {
	if (mensagem != null) {
		if (mensagem != "") {
			alert(mensagem);
		}
			
	}
}

var NUM_DIGITOS_CPF  = 11;
var NUM_DIGITOS_CNPJ = 14;
var NUM_DGT_CNPJ_BASE = 8;
var NUM_MINIMO_SENHA = 6;
var NUM_MINIMO_LOGIN = 4;

function cnpj(form){
	
	var cnpj = form.cnpj.value;
	var razaosocial = form.empresa.value;
	
	if (cnpj == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ CNPJ ] É OBRIGATÓRIO.');
		form.cnpj.focus();
		return false;
	}else if (razaosocial == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ RAZÃO SOCIAL ] É OBRIGATÓRIO.');
		form.cnpj.focus();
		return false;
	}else if(!isCnpj(cnpj)){
		alert('ATENÇÃO! \n\nCNPJ INVÁLIDO!');
		form.cnpj.focus();
		return false;		
	}

	return true;
}

function camposComum(form){

	var nome = form.nome.value;
	var login = form.login.value;
	var senha = form.senha.value;
	var confSenha = form.confSenha.value;
	var cpf = form.cpf.value;
	var email = form.email.value;
	
	if (nome == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ NOME COMPLETO ] É OBRIGATÓRIO.');
		form.nome.focus();
		return false;
	}
	
	if (login == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ LOGIN ] É OBRIGATÓRIO.');
		form.login.focus();
		return false;
	}
	
	if (senha == '' ) {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ SENHA ] É OBRIGATÓRIO.');
		form.senha.focus();
		return false;
	}else if(confSenha == ''){
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ CONFIRME A SENHA ]  É OBRIGATÓRIO.');
		form.confSenha.focus();
		return false;
	}else if (senha.length < NUM_MINIMO_SENHA || confSenha.length < NUM_MINIMO_SENHA){
		alert('ATENÇÃO! \n\nOS CAMPOS [ SENHA ] E [ CONFIRME SENHA ] DEVE TER MÍNIMO '+NUM_MINIMO_SENHA+' CARACTERES.');
		form.senha.value = '';
		form.confSenha.value = '';
		form.senha.focus();
		return false;
	}else if(confSenha != senha){
		alert('ATENÇÃO! \n\nOS CAMPOS [ SENHA ] E [ CONFIRME SENHA ] ESTÃOS DIFERENTES.');
		form.senha.value = '';
		form.confSenha.value = '';
		form.senha.focus();
		return false;
	}
	
	if (cpf == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ CPF ] É OBRIGATÓRIO.');
		form.cpf.focus();
		return false;
	}else if(!isCpf(cpf)){
		alert('ATENÇÃO! \n\nCPF INVÁLIDO!');
		form.cpf.focus();
		return false;		
	}
	
	if (email == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ E-MAIL ] É OBRIGATÓRIO.');
		form.email.focus();
		return false;
	}
	
	return true;
}

function lembrarSenha(form){
	
	var cpf = form.cpf.value;
	
	if (cpf == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ CPF ] É OBRIGATÓRIO.');
		form.cpf.focus();
		return false;
	}else if(!isCpf(cpf)){
		alert('ATENÇÃO! \n\nCPF INVÁLIDO!');
		form.cpf.focus();
		return false;		
	}
	
	return true;
	
}


function alterarSenha(form){
	var login = form.login.value;
	var senha = form.senha.value;
	var senhaNova = form.senhaNova.value;
	var confSenhaNova = form.confSenhaNova.value;
	
	if (login == '') {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ LOGIN ] É OBRIGATÓRIO.');
		form.login.focus();
		return false;
	}
	if (senha == '' ) {
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ SENHA ATUAL ] É OBRIGATÓRIO.');
		form.senha.focus();
		return false;
	}else if(senhaNova == ''){
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ SENHA NOVA ]  É OBRIGATÓRIO.');
		form.senhaNova.focus();
		return false;
	}else if(confSenhaNova == ''){
		alert('ATENÇÃO! \n\nPREENCHA O CAMPO [ CONFIRME A SENHA NOVA ]  É OBRIGATÓRIO.');
		form.confSenhaNova.focus();
		return false;
	}else if (senhaNova.length < NUM_MINIMO_SENHA || confSenhaNova.length < NUM_MINIMO_SENHA){
		alert('ATENÇÃO! \n\nOS CAMPOS [ SENHA NOVA ] E [ CONFIRME A SENHA NOVA ] DEVEM TER MÍNIMO DE '+NUM_MINIMO_SENHA+' CARACTERES.');
		form.senhaNova.value = '';
		form.confSenhaNova.value = '';
		form.senhaNova.focus();
		return false;
	}else if(senhaNova != confSenhaNova){
		alert('ATENÇÃO! \n\nOS CAMPOS [ SENHA NOVA ] E [ CONFIRME A SENHA NOVA ] ESTÃOS DIFERENTES.');
		form.senhaNova.value = '';
		form.confSenhaNova.value = '';
		form.senhaNova.focus();
		return false;
	}
	return true;
	
}

UTF8 = {
    encode: function(s){
        for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l;
            s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]
        );
        return s.join("");
    },
    decode: function(s){
        for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l;
            ((a = s[i][c](0)) & 0x80) &&
            (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ?
            o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "")
        );
        return s.join("");
    }
};

function validaPesquisaHome(form) {
	var atividade = form.atividade.selectedIndex;
	if (atividade == null || atividade == 0) {
		alert('POR FAVOR SELECIONE ATIVIDADE.');
		form.atividade.focus();
		return false;
	}else {
		var noAtividade = form.atividade.options[form.atividade.selectedIndex].text;
		form.noTipoAtividade.value = noAtividade;
	}
	return true;
}

function validarNovoUsuario(form){
	
	var selObj = document.getElementById('perfis');
	var perfil;
	var i;
	var flag = false;
	var count = 0;
	for (i=0; i<selObj.options.length; i++) {
	  if (selObj.options[i].selected) {
	    perfil = selObj.options[i].value;
	    
		if (perfil != 444) {
			flag = true;
		}
		count++;
	  }
	}
	 
	if (count < 1) {
		alert('ATENÇÃO! \n\nSELECIONE PELO MENOS UM PERFIL DE ACESSO.');
		form.perfis.focus();
		return false;
	}
	
	if (flag) {
		ok = camposComum(form);
		if(ok){

			ok = cnpj(form);
			return ok;
			
		}
		return ok;
	}else{
		ok = camposComum(form);
		return ok;
	}

}


function habilitaObrigatorios(form){
	
	var selObj = form.perfis;
	var perfil;
	var i;
	var flag = false;
	for (i=0; i<selObj.options.length; i++) {
	  if (selObj.options[i].selected) {
	
		perfil = selObj.options[i].text;
		if (perfil.indexOf('Guia') == -1) {
			flag = true;
		}
		
	  }
	}
	if (flag) {
		document.getElementById("c").style.display = "";
		document.getElementById("c1").style.display = "";
	}else {
		document.getElementById("c").style.display = "none";
		document.getElementById("c1").style.display = "none";
	}
	
}

function makeLowerCase(campo) {

	campo.value           = campo.value.toLowerCase();

}

function makeUpperCase(campo) {
	
	campo.value           = campo.value.toUpperCase();
	
}

/**
 * Adiciona método lpad() à classe String.
 * Preenche a String à esquerda com o caractere fornecido,
 * até que ela atinja o tamanho especificado.
 */
String.prototype.lpad = function(pSize, pCharPad)
{
	var str = this;
	var dif = pSize - str.length;
	var ch = String(pCharPad).charAt(0);
	for (; dif>0; dif--) str = ch + str;
	return (str);
} //String.lpad


/**
 * Adiciona método trim() à classe String.
 * Elimina brancos no início e fim da String.
 */
String.prototype.trim = function()
{
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
} //String.trim


function isCpfCnpj(campo)
{
	var numero = campo.value.replace(/\D/g, "");
	if (numero.length <= NUM_DIGITOS_CPF){
		if(!isCpf(numero)){
			alert('ATENÇÃO! \n\nCPF INVÁLIDO!');
			return false;
		}
	}else{
		if(!isCnpj(numero)){
			alert('ATENÇÃO! \n\nCNPJ INVÁLIDO!');
			return false;
		}
	}
	return true;
} //isCpfCnpj

/**
 * Testa se a String pCpf fornecida é um CPF válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCpf
 *      String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CPF válido.
 */
function isCpf(pCpf)
{
	var numero = formatCpfCnpj(pCpf, false, false);
	if (numero.length > NUM_DIGITOS_CPF) return false;

	var base = numero.substring(0, numero.length - 2);
	var digitos = dvCpfCnpj(base, false);
	var algUnico, i;

	// Valida dígitos verificadores
	if (numero != "" + base + digitos) return false;

	/* Não serão considerados válidos os seguintes CPF:
	 * 000.000.000-00, 111.111.111-11, 222.222.222-22, 333.333.333-33, 444.444.444-44,
	 * 555.555.555-55, 666.666.666-66, 777.777.777-77, 888.888.888-88, 999.999.999-99.
	 */
	algUnico = true;
	for (i=1; algUnico && i<NUM_DIGITOS_CPF; i++)
	{
		algUnico = (numero.charAt(i-1) == numero.charAt(i));
	}
	return (!algUnico);
} //isCpf

/**
 * Formata a string fornecida como CNPJ ou CPF, adicionando zeros
 * à esquerda se necessário e caracteres separadores, conforme solicitado.
 * @param String pCpfCnpj
 *      String fornecida para ser formatada.
 * @param boolean pUseSepar
 *      Indica se devem ser usados caracteres separadores (. - /).
 * @param boolean pIsCnpj
 *      Indica se a string fornecida é um CNPJ.
 *      Caso contrário, é CPF. Default = false (CPF).
 * @return String de CPF ou CNPJ devidamente formatada.
 */

function formatCpfCnpj(pCpfCnpj, pUseSepar, pIsCnpj)
{
	if (pIsCnpj==null) pIsCnpj = false;
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var numero = unformatNumber(pCpfCnpj);

	numero = numero.lpad(maxDigitos, '0');

	if (!pUseSepar) return numero;

	if (pIsCnpj)
	{
		reCnpj = /(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})$/;
		numero = numero.replace(reCnpj, "$1.$2.$3/$4-$5");
	}
	else
	{
		reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
		numero = numero.replace(reCpf, "$1.$2.$3-$4");
	}
	return numero;
} //formatCpfCnpj

/**
 * Elimina caracteres de formatação e zeros à esquerda da string
 * de número fornecida.
 * @param String pNum
 *      String de número fornecida para ser desformatada.
 * @return String de número desformatada.
 */
function unformatNumber(pNum)
{
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
} //unformatNumber

/**
 * Calcula os 2 dígitos verificadores para o número-efetivo pEfetivo de
 * CNPJ (12 dígitos) ou CPF (9 dígitos) fornecido. pIsCnpj é booleano e
 * informa se o número-efetivo fornecido é CNPJ (default = false).
 * @param String pEfetivo
 *      String do número-efetivo (SEM dígitos verificadores) de CNPJ ou CPF.
 * @param boolean pIsCnpj
 *      Indica se a string fornecida é de um CNPJ.
 *      Caso contrário, é CPF. Default = false (CPF).
 * @return String com os dois dígitos verificadores.
 */
function dvCpfCnpj(pEfetivo, pIsCnpj)
{
	if (pIsCnpj==null) pIsCnpj = false;
	var i, j, k, soma, dv;
	var cicloPeso = pIsCnpj? NUM_DGT_CNPJ_BASE: NUM_DIGITOS_CPF;
	var maxDigitos = pIsCnpj? NUM_DIGITOS_CNPJ: NUM_DIGITOS_CPF;
	var calculado = formatCpfCnpj(pEfetivo + "00", false, pIsCnpj);
	calculado = calculado.substring(0, maxDigitos - 2);
	var result = "";

	for (j = 1; j <= 2; j++)
	{
		k = 2;
		soma = 0;
		for (i = calculado.length-1; i >= 0; i--)
		{
			soma += (calculado.charAt(i) - '0') * k;
			k = (k-1) % cicloPeso + 2;
		}
		dv = 11 - soma % 11;
		if (dv > 9) dv = 0;
		calculado += dv;
		result += dv
	}

	return result;
} //dvCpfCnpj

/**
 * Testa se a String pCnpj fornecida é um CNPJ válido.
 * Qualquer formatação que não seja algarismos é desconsiderada.
 * @param String pCnpj
 *      String fornecida para ser testada.
 * @return <code>true</code> se a String fornecida for um CNPJ válido.
 */
function isCnpj(pCnpj)
{
	var numero = formatCpfCnpj(pCnpj, false, true);
	if (numero.length > NUM_DIGITOS_CNPJ) return false;

	var base = numero.substring(0, NUM_DGT_CNPJ_BASE);
	var ordem = numero.substring(NUM_DGT_CNPJ_BASE, 12);
	var digitos = dvCpfCnpj(base + ordem, true);
	var algUnico;

	// Valida dígitos verificadores
	if (numero != "" + base + ordem + digitos) return false;

	/* Não serão considerados válidos os CNPJ com os seguintes números BÁSICOS:
	 * 11.111.111, 22.222.222, 33.333.333, 44.444.444, 55.555.555,
	 * 66.666.666, 77.777.777, 88.888.888, 99.999.999.
	 */
	algUnico = numero.charAt(0) != '0';
	for (i=1; algUnico && i<NUM_DGT_CNPJ_BASE; i++)
	{
		algUnico = (numero.charAt(i-1) == numero.charAt(i));
	}
	if (algUnico) return false;

	/* Não será considerado válido CNPJ com número de ORDEM igual a 0000.
	 * Não será considerado válido CNPJ com número de ORDEM maior do que 0300
	 * e com as três primeiras posições do número BÁSICO com 000 (zeros).
	 * Esta crítica não será feita quando o no BÁSICO do CNPJ for igual a 00.000.000.
	 */
	if (ordem == "0000") return false;
	return (base == "00000000"
		|| parseInt(ordem, 10) <= 300 || base.substring(0, 3) != "000");
} //isCnpj

/**
 * Verifica se a quantidade de dígitos é valida para o campo Login.
 * @param String pLogin
 */
function isLogin(campo){
	var login = campo.value;
	var strResult = "";
	
	for(i = 0; i < login.length; i++){
	      if(login.charAt(i) != ' ') strResult += login.charAt(i);
	}
	campo.value = strResult;
	
	if (strResult.length < NUM_MINIMO_LOGIN){
		alert('ATENÇÃO! \n\nO campo "Login" requer no mínimo 4 caracteres!');
		campo.value = "";
		return false;
	}
	return true; 
}
