/*INICIO DE FUNCOES PARA FORMULARIOS  v.1.0
*
* Como funciona a aplicacao no HTML:
* -> Usamos a seguinte nomenclatura para nomes de ids: tipo_perfil_nome
* -> Exemplo:
*       txt_dat_nasc
*       txt_cpf_pax
*       txt_img_foto
* -> Tipo define o tipo fisico do elemento:
*       txt - caixa de texto
*       opt - grupo de opçoes como radio/checkbox
*       btn - botoes
*       cbb - combobox
*       -> Observação:
*       Se botao for texto teremos btn_txt_envia
*       Se botao for imagem teremos btn_img_envia
* -> Perfil define o tipo de conteudo do elemento:
*       data
*       cpf
*       cnpj
*       txt
*       img
*       int
*       mail
*-> Nome é de uso livre e sem regras
 ***************************/
function alteraCor(id)
{
	/* Essa função é chamada dentro de:
         * jsvValida()
         * jsvRequerido()
         * É necessário criar duas classes na CSS:
         * bgCampo_ok: faz os inputs voltarem a cor normal
         * bgCampo_erro: altera a cor do input para alerta
         */
        var idName = document.getElementById(id);
	
	if(idName.className.indexOf('bgCampo_ok') > -1)
	{
		idName.className = idName.className.replace('bgCampo_ok','bgCampo_erro');
	}
	
	idName.onfocus=function()
	{
		this.className = this.className.replace('bgCampo_erro','bgCampo_ok');
	}
}

function jsvValida(idFormValida)
{
	var intValidacao = true;
	
	var frmValida = document.getElementById(idFormValida);
	var	tagsPackV = new Array();
		tagsPackV[0] = 'input';
		tagsPackV[1] = 'textarea';
		tagsPackV[2] = 'select';	
		
	for(fv=0;fv<tagsPackV.length;fv++)
	{
		var tagV = frmValida.getElementsByTagName(tagsPackV[fv]);
		
		for (ob = 0; ob < tagV.length; ob++) 
		{
			var atrs = tagV[ob].attributes;
			
			//Valida pelo tipo caso a checagem tenha sido solicitada com jsvChecar | jsv quer dizer java script validate
			if(atrs.getNamedItem('class').value.indexOf('jsvValida') != -1) 
			{
				var tipoChecar = atrs.getNamedItem('id');
				tipoChecar = tipoChecar.value.split('_');
				
				switch(tipoChecar[1])
				{
					case 'data':
						var dataRegex = new RegExp("^[0-9]{2}[/]{1}[0-9]{2}[/]{1}[0-9]{4}$","g");
						if(tagV[ob].value != '')
						{
							if (!dataRegex.test(tagV[ob].value)) 
							{
								intValidacao = false;
								alteraCor(tagV[ob].id);
							}
						}
					break;
					
					case 'eml':
						if(tagV[ob].value.indexOf('@') == -1 || tagV[ob].value.indexOf('.') == -1)
						{
							intValidacao = false;
							alteraCor(tagV[ob].id);
						}
					break;
					
					case 'cpf':
						if(!isCpfCnpj(tagV[ob].value))
						{
							intValidacao = false;
							alteraCor(tagV[ob].id);
						}
					break;
					
					case 'cnpj':
						if(!isCpfCnpj(tagV[ob].value))
						{
							intValidacao = false;
							alteraCor(tagV[ob].id);
						}
					break;
					
					case 'cep':
						if(!isCEP(tagV[ob].value))
						{
							intValidacao = false;
							alteraCor(tagV[ob].id);
						}
					break;
				}
			}
		}
	}
	return intValidacao;
}

function jsvRequerido(idFormValida)
{
	// a regra usada para campos obrigatorios - class="jsvRequerido" | jsv quer dizer java script validate
	var intValidacao = true;
	
	var frmValida = document.getElementById(idFormValida);
	var	tagsPackV = new Array();
		tagsPackV[0] = 'input';
		tagsPackV[1] = 'textarea';
		tagsPackV[2] = 'select';	
			
	for(fv=0;fv<tagsPackV.length;fv++)
	{
		var tagV = frmValida.getElementsByTagName(tagsPackV[fv]);
		for (ob = 0; ob < tagV.length; ob++) 
		{
			var atrs = tagV[ob].attributes;
			if (atrs.getNamedItem('class') != undefined && atrs.getNamedItem('class') != '') 
			{
				//Valida apenas os obrigatorios
				if (atrs.getNamedItem('class').value.indexOf('jsvRequerido') != -1 ) 
				{
					switch(tagsPackV[fv])
					{
						case 'input':
							if(tagV[ob].type=='radio')
							{
								if (pegaRadio(tagV[ob].name) == undefined) 
								{
									intValidacao = false;
									alteraCor(tagV[ob].name);
								}
								
							}else{
								if(tagV[ob].value == '')
								{
									intValidacao = false;
									alteraCor(tagV[ob].id);
								}
							}
						break;
						
						case 'select':
							if(pegaCombo(tagV[ob].id) == -1)
							{
								intValidacao = false;
								alteraCor(tagV[ob].id);
							}
						break;
						
						case 'textarea':
							if(tagV[ob].value == '')
							{
								intValidacao = false;
								tagV[ob].style.border = '1px solid #FCF7B1';
								alteraCor(tagV[ob].id);
							}	
						break;
					}
				}
				
			}
		}
	}
	return intValidacao;
}

function aplicarJSV(frm)
{
	//aplicar mascara
        var frmAlvo = document.getElementById(frm);
	var	tagsPack = new Array();
		tagsPack[0] = 'input';
		tagsPack[1] = 'textarea';
		tagsPack[2] = 'select';

	for(t=0; t<tagsPack.length; t++)
	{
		var campos = frmAlvo.getElementsByTagName(tagsPack[t]);
		for(c=0; c<campos.length; c++)
		{
			var classCampo = campos[c].className;
			var idCampo = campos[c].id;
			var partesCampo = idCampo.split('_');

			if(classCampo.indexOf('jsvMask') > -1)
			{
				switch(partesCampo[1])
				{
					case 'cpf':
						campos[c].onkeyup = function () { this.value = formatCpfCnpj(this.value,1,0);}
					break;

					case 'cnpj':
						campos[c].onkeyup = function () { this.value = formatCpfCnpj(this.value,1,1);}
					break;

					case 'cep':
						campos[c].onkeyup = function () { this.value = formatCEP(this.value,1);}
					break;
				}
			}
		}
	}
}

function pegaDadosForm(idForm)
{
	var strSaida = '';
	
	var frm = document.getElementById(idForm);
	var	tagsPack = new Array();
		tagsPack[0] = 'input';
		tagsPack[1] = 'textarea';
		tagsPack[2] = 'select';		
	
	for(i=0; i<tagsPack.length;i++)
	{
		var tag = frm.getElementsByTagName(tagsPack[i]);
		if(tag.length)
		{
			for(t=0;t<tag.length;t++)
			{
				switch(tagsPack[i])
				{
					case 'input':
						if(tag[t].type=='radio')
						{
							if(strSaida.indexOf(tag[t].name)==-1)
							{
								if(pegaRadio(tag[t].name) == undefined)
								{
									strSaida += '&'+tag[t].name+'=';
								}else{
									strSaida += '&'+tag[t].name+'='+pegaRadio(tag[t].name);
								}
							}
						}else{
							if(tag[t].type=='checkbox')
                                                        {
                                                           if(tag[t].checked == true)
                                                           {
                                                               strSaida += '&'+tag[t].id+'='+escape(tag[t].value);
                                                           }
                                                        }else{
                                                            strSaida += '&'+tag[t].id+'='+tag[t].value;
                                                        }
						}
					break;
					
					case 'select':
						strSaida += '&'+tag[t].id+'='+pegaCombo(tag[t].id);
					break;
					
					case 'textarea':
						strSaida += '&'+tag[t].id+'='+tag[t].value;//innerHTML
					break;
				}
			}
		}
	}
	return strSaida;
}

function pegaCombo(idEl)
{
	var index = document.getElementById(idEl).options.selectedIndex;
        var chave = document.getElementById(idEl).options[index].value;
        return chave;
}

function pegaRadio(nameEl)
{
	var tagCol = document.getElementsByTagName('input');
	for(p=0;p<tagCol.length;p++)
	{
		var atrs = tagCol[p].attributes;
                
		if(atrs.getNamedItem('type').value == 'radio' && atrs.getNamedItem('name').value == nameEl)
		{
			var idRadio = atrs.getNamedItem('id').value;
			if(document.getElementById(idRadio).checked)
			{
               var retorno =  atrs.getNamedItem('value').value;
               break;
			}else{
               var retorno =  false;
            }
		}
	}
    return retorno;
}

function montaCombo(onde,id,classCont,start, finish, rotuloSelecione, reverse, ifmes, marcado, paramSend, eventos)
{
	var mes = new Array('Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro');

	var obNew = document.createElement('select');
	obNew.setAttribute('id',id);
	obNew.setAttribute('name',id);
	obNew.setAttribute('class',classCont);

	var obOpt = document.createElement('option');
	obOpt.innerHTML = rotuloSelecione;
	obOpt.setAttribute('value','-1');
        if(marcado=='')
        {
            obOpt.setAttribute('selected','selected');
        }
	obNew.appendChild(obOpt);
	if(paramSend != '')
	{
		var nomeVar = String(Math.random()).substring(2);
		eval('REQ'+nomeVar+' = (window.XMLHttpRequest) ? new XMLHttpRequest() : (window.ActiveXObject) ? new ActiveXObject("Microsoft.XMLHTTP") : false ;');
		eval('REQ'+nomeVar).open("GET",paramSend,true);

		eval('REQ'+nomeVar).onreadystatechange=function()
		{
			if (eval('REQ'+nomeVar).readyState==4)
			{
				dadosPack = eval('REQ'+nomeVar).responseText.split(';');
				if(eval('REQ'+nomeVar).responseText.indexOf(';') > -1)
				{
					start = 0;
					finish = dadosPack.length;

					var n = (reverse) ? finish : start;
					do{
						var recheio =  dadosPack[n].split('|');
						obOpt2 = document.createElement('option');
						obOpt2.innerHTML = recheio[1];
						obOpt2.setAttribute('value',recheio[0]);
                                                if(marcado==recheio[0])
                                                {
                                                    obOpt2.setAttribute('selected','selected');
                                                }
						obNew.appendChild(obOpt2);
						(reverse) ? n-- : n++;
					}while((reverse) ? n>start : n<finish);
				}else{
                                        if(id.toString().indexOf('Bairro')>-1)
					{
                                             //alert(eval('REQ'+nomeVar).responseText)
                                            if(eval('REQ'+nomeVar).responseText.indexOf('NPB') > -1)
                                            {
                                                obNew[0].innerHTML = 'Essa cidade n&atilde;o possui bairros';
                                            }else{
                                                obNew[0].innerHTML = 'Necess&aacute;rio informar uma Cidade primeiro';
                                            }
					}
					if(id.toString().indexOf('Cidade')>-1)
					{
                                            obNew[0].innerHTML = 'Necess&aacute;rio informar uma UF primeiro';
					}
					obNew.setAttribute('disabled','disabled');
				}
                                document.getElementById(onde).appendChild(obNew);
                               if(eventos != '')
                               {
                                        evPack = eval(eventos);

                                        for(e=0;e<evPack.length;e++)
                                        {
                                                 function aplicaEv()
                                                 {
                                                    eventoAdd = eval(eventos);
                                                    javaexec(parseInt(eventoAdd[1][0]),[[eventoAdd[1][1]],[eventoAdd[1][2]]]);
                                                 }
                                                 if (window.addEventListener)
                                                 {
                                                    document.getElementById(id).addEventListener(evPack[e][0],aplicaEv, true);
                                                 }
                                                 if (window.attachEvent)
                                                 {
                                                    document.getElementById(id).attachEvent("on"+evPack[e][0],aplicaEv)
                                                 }
                                        }
                                }
			}
		}
                eval('REQ'+nomeVar).send(null);
        }else{
            var n = (reverse) ? finish : start;
            do{
                    obOpt = document.createElement('option');
                    obOpt.innerHTML =(ifmes) ? mes[n-1] : ((n<10) ? '0'+n : n) ;
                    obOpt.setAttribute('value',((n<10) ? '0'+n : n));
                    if(marcado==((n<10) ? '0'+n : n))
                    {
                        obOpt.setAttribute('selected','selected');
                    }
                    obNew.appendChild(obOpt);
                    (reverse) ? n-- : n++;
            }while((reverse) ? n>=start : n<=finish);
           document.getElementById(onde).appendChild(obNew);
        }
	obNew.className = obNew.className.replace('bgCampo_erro','bgCampo_ok');
}
/****************************/

/*INICIO DE FUNCOES DE VALIDACAO E MASCARA  v.1.0
***************************/

var NUM_DIGITOS_CPF  = 11;
var NUM_DIGITOS_CNPJ = 14;
var NUM_DGT_CNPJ_BASE = 8;
var NUM_DIGITOS_CEP = 8;
var NUM_DIGITOS_TEL = 10;
var NUM_DIGITOS_RADIO = 9;

String.prototype.lpad = function(pSize, pCharPad)
{
	//String.lpad
    var str = this;
	var dif = pSize - str.length;
	var ch = String(pCharPad).charAt(0);
	for (; dif>0; dif--) str = ch + str;
	return (str);
}

String.prototype.trim = function()
{
	//String.trim
    return this.replace(/^\s*/, "").replace(/\s*$/, "");
} 

function unformatNumber(pNum)
{
	return String(pNum).replace(/\D/g, "").replace(/^0+/, "");
}

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");
		if (numero.length > NUM_DIGITOS_CNPJ + (pUseSepar == true ? 4 : 0)) numero = numero.replace(numero.substring(0,1), "");
	}else{
		reCpf  = /(\d{3})(\d{3})(\d{3})(\d{2})$/;
		numero = numero.replace(reCpf, "$1.$2.$3-$4");
		if (numero.length > NUM_DIGITOS_CPF + (pUseSepar == true ? 3 : 0)) numero = numero.replace(numero.substring(0,1), "");
	}
	return numero;
}

function formatTEL(pTEL, pUseSepar)
{
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = NUM_DIGITOS_TEL;
	var numero = unformatNumber(pTEL);

	numero = numero.lpad(maxDigitos, '0');
	if (!pUseSepar) return numero;

	reTEL  = /(\d{2})(\d{4})(\d{4})$/;
	numero = numero.replace(reTEL, "($1) $2-$3");
	if (numero.length > NUM_DIGITOS_TEL + (pUseSepar == true ? 4 : 0)) numero = numero.replace(numero.substring(0,1), "");
	return numero;
}

function formatRADIO(pRADIO, pUseSepar)
{
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = NUM_DIGITOS_RADIO;
	var numero = unformatNumber(pRADIO);

	numero = numero.lpad(maxDigitos, '0');
	if (!pUseSepar) return numero;

	reRADIO  = /(\d{2})(\d{2})(\d{5})$/;
	numero = numero.replace(reRADIO, "$1*$2*$3");
	if (numero.length > NUM_DIGITOS_RADIO + (pUseSepar == true ? 2 : 0)) numero = numero.replace(numero.substring(0,1), "");
	return numero;
}

function formatCEP(pCEP, pUseSepar)
{
	if (pUseSepar==null) pUseSepar = true;
	var maxDigitos = NUM_DIGITOS_CEP;
	var numero = unformatNumber(pCEP);

	numero = numero.lpad(maxDigitos, '0');
	if (!pUseSepar) return numero;

	reCEP  = /(\d{5})(\d{3})$/;
	numero = numero.replace(reCEP, "$1-$2");
	if (numero.length > NUM_DIGITOS_CEP + (pUseSepar == true ? 1 : 0)) numero = numero.replace(numero.substring(0,1), "");
	return numero;
}

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, false, pIsCnpj);
	calculado = calculado.substring(2, maxDigitos);
	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;
}

function isCpf(pCpf)
{
	var numero = formatCpfCnpj(pCpf, false, 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; i<NUM_DIGITOS_CPF; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	
	return(!algUnico);
}

function isCnpj(pCnpj)
{
	var numero = formatCpfCnpj(pCnpj, false, true);
	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; i<NUM_DGT_CNPJ_BASE; i++)
	{
		algUnico = 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");
}

function isCEP(pCEP)
{
	var numero = formatCEP(pCEP, false);
	
	var algUnico, i;
	algUnico = true;
	for (i=1; i<NUM_DIGITOS_CEP; i++)
	{
		algUnico = algUnico && (numero.charAt(i-1) == numero.charAt(i));
	}
	
	return(!algUnico);
}

function isCpfCnpj(pCpfCnpj)
{
	var numero = pCpfCnpj.replace(/\D/g, "");
	if (numero.length > NUM_DIGITOS_CPF)
		return isCnpj(pCpfCnpj)
	else
		return isCpf(pCpfCnpj);
}

function isNumber(evt)
{
 var charCode = (evt.which) ? evt.which : event.keyCode
 if (charCode > 31 && (charCode < 48 || charCode > 57))
    return false;
 return true;
}
/****************************/

/*INICIO DE FUNCOES GERAIS  v.1.0
***************************/
function readCookie(name)
{
  var cookieValue = "";
  var search = name + "=";
  if(document.cookie.length > 0)
  {
    offset = document.cookie.indexOf(search);
    if (offset != -1)
    {
      offset += search.length;
      end = document.cookie.indexOf(";", offset);
      if (end == -1) end = document.cookie.length;
      cookieValue = unescape(document.cookie.substring(offset, end))
    }
  }
  return cookieValue;
}

function writeCookie(name, value, hours)
{
  var expire = "";
  if(hours != null)
  {
    expire = new Date((new Date()).getTime() + hours * 3600000);
    expire = "; expires=" + expire.toGMTString();
  }
  document.cookie = name + "=" + escape(value) + expire;
}
/****************************/
